Name: series-workflowxq5qd Phase: Succeeded StartedAt: 2026-07-28 11:46:15 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[0] Phase: Succeeded StartedAt: 2026-07-28 11:46:15 +0000 UTC FinishedAt: 2026-07-28 12:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[0].run-triage Phase: Succeeded StartedAt: 2026-07-28 11:46:15 +0000 UTC FinishedAt: 2026-07-28 12:21:22 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "772cfe86-dd6d-4c81-98a0-2d301ef357e4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQ2NDM3ZTFlMmM5MjNlZDI0ZWU5MThlNTViMTQ3ZDEwMDVlYjQ3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDEyOjE5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCBmZTYzZjNjNTVkMGQ5Ni4uNTY3YjAzMWVjNTA1OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzMxLDYgJiM0MzszMzEsMjcgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuYmRfc2l6ZV91cGRhdGUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X3BhcnQpXG4mIzQzO1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShuYmQtXHUwMDNlZGlzaywgY29uZmlnLVx1MDAzZWJ5dGVzaXplIFx1MDAzZVx1MDAzZSA5KSlcbiYjNDM7XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChieXRlc2l6ZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplID0gYnl0ZXNpemU7XG4mIzQzO1x0aWYgKG5iZC1cdTAwM2VwaWQpXG4mIzQzO1x0XHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuQEAgLTM3NSwxMCAmIzQzOzM5Niw3IEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGlmIChtYXhfcGFydClcbi1cdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuLVx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShuYmQtXHUwMDNlZGlzaywgYnl0ZXNpemUgXHUwMDNlXHUwMDNlIDkpKVxuLVx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuJiM0MztcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIwNjIsMTEgJiM0MzsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxuIFx0XHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pO1xuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pIHtcbiBcdFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcbiYjNDM7XHRcdGlmICghYnNpemUpXG4mIzQzO1x0XHRcdGJzaXplID0gMXUgXHUwMDNjXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xuJiM0MztcdFx0aWYgKGJsa192YWxpZGF0ZV9ibG9ja19zaXplKGJzaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRpZiAoYnl0ZXMgIT0gY29uZmlnLVx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpIHtcbiYjNDM7XHRcdGlmIChic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuJiM0MztcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2l6ZV9zZXQobmJkLCBieXRlcyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkNjQzN2UxZTJjOTIzZWQyNGVlOTE4ZTU1YjE0N2QxMDA1ZWI0NzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAxMjoxOToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGZlNjNmM2M1NWQwZDk2Li41NjdiMDMxZWM1MDU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zMzEsNiAmIzQzOzMzMSwyNyBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssCiAJbnNvY2stJmd0O3NlbnQgPSAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLSZndDtjb25maWc7CiYjNDM7CiYjNDM7CWlmIChtYXhfcGFydCkKJiM0MzsJCXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7CiYjNDM7CWlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLSZndDtkaXNrLCBjb25maWctJmd0O2J5dGVzaXplICZndDsmZ3Q7IDkpKQomIzQzOwkJa29iamVjdF91ZXZlbnQoJmFtcDtuYmRfdG9fZGV2KG5iZCktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKQomIzQzO3sKJiM0MzsJaWYgKGJ5dGVzaXplICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwluYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUgPSBieXRlc2l6ZTsKJiM0MzsJaWYgKG5iZC0mZ3Q7cGlkKQomIzQzOwkJbmJkX3NpemVfdXBkYXRlKG5iZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CkBAIC0zNzUsMTAgJiM0MzszOTYsNyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKG1heF9wYXJ0KQotCQlzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCAmYW1wO25iZC0mZ3Q7ZGlzay0mZ3Q7c3RhdGUpOwotCWlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLSZndDtkaXNrLCBieXRlc2l6ZSAmZ3Q7Jmd0OyA5KSkKLQkJa29iamVjdF91ZXZlbnQoJmFtcDtuYmRfdG9fZGV2KG5iZCktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKJiM0MzsJbmJkX3NpemVfdXBkYXRlKG5iZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNjIsMTEgJiM0MzsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pCiAJCWJ5dGVzID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pOwogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKQomIzQzOwlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pIHsKIAkJYnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7CiYjNDM7CQlpZiAoIWJzaXplKQomIzQzOwkJCWJzaXplID0gMXUgJmx0OyZsdDsgTkJEX0RFRl9CTEtTSVpFX0JJVFM7CiYjNDM7CQlpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKLQlpZiAoYnl0ZXMgIT0gY29uZmlnLSZndDtieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKQotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTsKJiM0MzsJaWYgKGJ5dGVzICE9IGNvbmZpZy0mZ3Q7Ynl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSkgewomIzQzOwkJaWYgKGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpCiYjNDM7CQkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7CiYjNDM7CQlyZXR1cm4gbmJkX3NpemVfc2V0KG5iZCwgYnl0ZXMpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBTaXplIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBzaXplIHVwZGF0ZSBtZWNoYW5pc20gZm9yIE5CRCBkZXZpY2VzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9uYmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdHdvIG5ldyBmdW5jdGlvbnM6IGBuYmRfc2l6ZV91cGRhdGVgIGFuZCBgbmJkX3NpemVfc2V0YC4gRnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBuYmRfc2V0X3NpemVgIHRvIGxldmVyYWdlIGBuYmRfc2l6ZV91cGRhdGVgLiBJdCBhbHNvIGltcGFjdHMgYG5iZF9nZW5sX3NpemVfc2V0YCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3RpbmcgYml0cyBhcmUgbGlrZWx5IGhhcHBlbmluZy4KCkkgc2VlIHRoYXQgYG5iZF9nZW5sX3NpemVfc2V0YCBub3cgaGFzIHNvbWUgZXh0cmEgdmFsaWRhdGlvbiBmb3IgYmxvY2sgc2l6ZS4gSXQmIzM5O3MgYWxzbyBoYW5kbGluZyBzaXplIGNoYW5nZXMgaW4gYSBtb3JlIG51YW5jZWQgd2F5LiBTcGVjaWZpY2FsbHksIGlmIG9ubHkgdGhlIGBieXRlc2l6ZWAgb2YgdGhlIE5CRCBkZXZpY2UgaXMgYmVpbmcgbW9kaWZpZWQsIGl0IG5vdyBjYWxscyBgbmJkX3NpemVfc2V0YCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsbHkgaGVhdmllciBgbmJkX3NldF9zaXplYCBmbG93LiBUaGlzIGxpa2VseSByZWR1Y2VzIHNvbWUgb3ZlcmhlYWQgaW4gY2VydGFpbiBzY2VuYXJpb3MuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIGBuYmRfZ2VubF9zaXplX3NldGAgYW5kIGBuYmRfc2V0X3NpemVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvYmxvY2svbmJkLmNgIGZpbGUgaXRzZWxmLiBUaGlzIGNvZGUgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIHRvIHRoZSBOQkQgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBicmFuY2hpbmcgbG9naWMgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMvZHJhd2JhY2tzLiBJIHNob3VsZCBhbHNvIHRyYWNrIGRvd24gdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOQkQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIFNpemUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQkxLX0RFVl9OQkRgLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0dGluZyBvciB1cGRhdGluZyB0aGUgTkJEIHNpemUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG5iZF9zaXplX3NldGAsIGBuYmRfc2l6ZV91cGRhdGVgLCBgbmJkX2dlbmxfc2l6ZV9zZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdGVsbGluZy4gU3RhdGljIG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZS4gVGhleSBhcmVuJiMzOTt0IGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJIGZ1bmN0aW9ucy4gR29vZC4gTm93LCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlbT8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBrbm93LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG5iZF9nZW5sX3NpemVfc2V0YCBiZWNhdXNlLCBhcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIGNhbGxzLCBpdHMgdGhlIG9uZSBpbiBteSBtaW5kIHRoYXQmIzM5O3MgbW9zdCBsaWtlbHkgdG8gYmUgc2V0dGluZyB0aGlzIHNpemUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfc2l6ZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjA2OT1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA3NDpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA5OT1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNzctXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMTc4Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE3OS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzM2PXN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTk6XHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNDAwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqQW5hbHl6aW5nIHRoZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBuYmRfZ2VubF9zaXplX3NldGAgaXMgY2xlYXJseSBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBGcm9tIHRoZSBzbmlwcGV0LCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAuICBCb3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlIGludGVybmFsIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWVhbnMgdGhleSBhcmUgbGlrZWx5IHNwZWNpZmljIHRvIHRoZSBtb2R1bGUgb3IgY29tcG9uZW50IHdoZXJlIGBuYmRfZ2VubF9zaXplX3NldGAgcmVzaWRlcy4gSXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9yIHNldHVwIGR1cmluZyBjb25uZWN0IGFuZCByZWNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gaG93IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBjYWxsIHN0YWNrIG9yaWdpbmF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTIwNzQ9c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5OTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEwMC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0NzgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3OTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ4MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgTmV0bGluayBPcGVyYXRpb25zIGluIHRoZSBDb250ZXh0IG9mIGBuYmRfZ2VubGAqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhleSBhcmUgdGhlIE5ldGxpbmsgb3BlcmF0aW9ucyBoZXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGhhcyBhbiBpbW1lZGlhdGUgaW1wbGljYXRpb246IHRoZXkgd29uJiMzOTt0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgbGltaXRzIHRoZWlyIGRpcmVjdCBleHRlcm5hbCBhY2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGZvciBtZSBpcyB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGgsIG9yIGNhbGwsIHRoZXNlIGBzdGF0aWNgIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZCBhbmQgb3JjaGVzdHJhdGVkIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsgb2YgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxMi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTktXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4MTpcdFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE3ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlx0LmNvbXBhdF9pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXHQuZnJlZV9kaXNrID1cdG5iZF9mcmVlX2Rpc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTUKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5CRCBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBgbmJkX2lvY3RsYCBmdW5jdGlvbiwgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBOb3csIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgKmFsc28qIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgY291bnRlcmludHVpdGl2ZSBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBlbnRyeSBwb2ludHMuIEJ1dCBpZiB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlbiB1c2luZyB0aGVzZSBzdGF0aWMgZW50cnkgcG9pbnRzLCBuYW1lbHkgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAsIG1pZ2h0IGJlIG15IG9ubHkgb3B0aW9uLgoKV2FpdCBhIG1pbnV0ZSwgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgU3l6a2FsbGVyIGFuZCBzdGF0aWMgZnVuY3Rpb25zPyBPaCwgcmlnaHQsIGl0IGNhbiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBkZWJ1ZyBpbmZvLiBCdXQgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIE9rYXksIGJ1dC4uLiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlbiYjMzk7dCBpbmxpbmVkIGJlY2F1c2UgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGAuZG9pdGAuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgZmluZSB0byB1c2UgYXMgZm9jdXMgc3ltYm9scyEgUGVyZmVjdC4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaW4gdGhpcyBjYXNlLgoKQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiB0aHJvdWdoIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSYjMzk7dmUgbWlzc2VkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXChbXlxcKV0qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE3OTc9c3RhdGljIGludCBuYmRfZGJnX3Rhc2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODA2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODA3OkRFRklORV9TSE9XX0FUVFJJQlVURShuYmRfZGJnX3Rhc2tzKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgwOC1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOT1zdGF0aWMgaW50IG5iZF9kYmdfZmxhZ3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MzY6REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODM3LVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUwMj1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE1LX07XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTY6TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5CRF9HRU5MX0ZBTUlMWV9OQU1FKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MzQ9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY5Om1vZHVsZV9pbml0KG5iZF9pbml0KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MDptb2R1bGVfZXhpdChuYmRfY2xlYW51cCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NzEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NzI6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O05ldHdvcmsgQmxvY2sgRGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MzpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzc0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc1Om1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3NjpNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Nzc6bW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc4Ok1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqUmVnZXggT3ZlcnNpZ2h0IGFuZCBSZWZpbmVtZW50KioKClVnaCwgSSBtZXNzZWQgdXAgdGhhdCByZWdleC4gVGhhdCYjMzk7cyBmcnVzdHJhdGluZy4gT2theSwgZm9yZ2V0IHRoZSBvcmlnaW5hbCBhcHByb2FjaC4gSSYjMzk7bGwganVzdCBmb2N1cyBvbiB0aGUgY29yZSBjYWxsczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBCdXQgaGFuZyBvbiwgZGlkbiYjMzk7dCBJIHNlZSBgbmJkX3NldF9zaXplYCBpbiB0aGUgYF9fbmJkX2lvY3RsYCBjb2RlIHBhdGggYXMgd2VsbD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfc2V0X3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MzQ0PXN0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzU1OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDg5PXN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTU1Ny1cdH1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTU1ODpcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNTU5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2MTE9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyNS1cdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI2Olx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI3LVx0Y2FzZSBOQkRfU0VUX1NJWkU6XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mjg6XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI5LVx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy1cdGNhc2UgTkJEX1NFVF9USU1FT1VUOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA3ND1zdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLVx0XHRpZiAoYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MzpcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5NC1cdFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOQkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgY29uZmlybWluZyB0aGF0IGBfX25iZF9pb2N0bGAgZGVmaW5pdGVseSBjYWxscyBgbmJkX3NldF9zaXplYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGNvbm5lY3Rpb24gcmlnaHQgdGhlcmUuIFNvLCBgbmJkX2lvY3RsYCBpdHNlbGYgaXMgYSByZWFsbHkgZ29vZCBmb2NhbCBwb2ludCBmb3IgdGhpcy4gSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIC0gdGhvc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBzZXR1cCBhbmQgcmVjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UuIFRpbWUgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgZm9yIG90aGVyIGNvbmZpZyBvcHRpb25zLiBBaCwgeWVzLCB0aGUgbWFpbiBvbmUsIG9idmlvdXNseSwgaXMgYEJMS19ERVZfTkJEYC4gQnV0IHdhaXTigKYgYEJMS19ERVZfTkJEYCBkZXBlbmRzIG9uIGBCTE9DS2AuIFJpZ2h0LCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJsb2NrIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLiBNeSBtZW50YWwgY2hlY2tsaXN0IHNheXMsICYjMzQ7V2hlcmUgd291bGQgSSBmaW5kIHRoZSAqY29yZSogY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBibG9jayBkcml2ZXJzPyYjMzQ7IE15IGV4cGVyaWVuY2UgaW1tZWRpYXRlbHkgc3RlZXJzIG1lIHRvd2FyZHMgdGhlIGBLY29uZmlnYCBmaWxlcywgd2hpY2ggaGFuZGxlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjaG9pY2VzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXJzIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGRyaXZlcnMvYmxvY2svYCBpcyBhIGxpa2VseSBzcG90IGFuZCB0aGUgS2NvbmZpZyB0aGVyZSB3aWxsIGNvbnRhaW4gd2hhdCBJIG5lZWQuIExldCBtZSBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxOTY7IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZXhwbG9yZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0ICBUaGUgaGlzdG9yaWMgZGVmYXVsdCBpcyA4LiBJZiBhIGxhdGUgMjAxMSB2ZXJzaW9uIG9mIGxvc2V0dXAoOClcbiAxOTE6XHRcdCAgaXMgdXNlZCwgaXQgY2FuIGJlIHNldCB0byAwLCBzaW5jZSBuZWVkZWQgbG9vcCBkZXZpY2VzIGNhbiBiZVxuIDE5MjpcdFx0ICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCB0aGUgL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLlxuIDE5MzpcdFxuIDE5NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuIDE5NTpcdFxuIDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2gmIzM5O3MgZnV6emFiaWxpdHkgaGluZ2VzIG9uIGBORVRgLCBidXQgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfTkJEYCBjb25maWcgaXMgdGhlIG9ubHkgcHJlcmVxdWlzaXRlLiBMZXQmIzM5O3MgZGlzdGlsbCB0aGlzOgoKRXNzZW50aWFsbHksIHRoaXMgaXMgZnV6emFibGUuIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLiBXZSYjMzk7cmUgdGFyZ2V0aW5nIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQkxLX0RFVl9OQkRgLiBNeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IG5ldHdvcmsgYmxvY2sgZGV2aWNlIChOQkQpIHNpemVzIGFyZSB1cGRhdGVkLiBUaGUgbmV3IGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIE5CRC1zcGVjaWZpYyBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0IGFuZCByZWNvbmZpZ3VyZSkgYW5kIHRoZSByZWxldmFudCBpb2N0bHMuCgpIYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1lc3NlcyB3aXRoIGBuYmRfc2l6ZV91cGRhdGVgLiBJIHNob3VsZCB0YWtlIGEgbW9tZW50IGFuZCBjb25maXJtIHRoYXQgYG5iZF9zaXplX3VwZGF0ZWAgaXNuJiMzOTt0IGNhbGxlZCBmcm9tICpvdGhlciogcGxhY2VzIGFzIHdlbGwuIEdvdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zaXplX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0zMDU9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzMzLVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzQ6c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUwLVx0aWYgKG5iZC1cdTAwM2VwaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM1MTpcdFx0bmJkX3NpemVfdXBkYXRlKG5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Mi1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzU1PXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM5OTpcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy00MDAtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgYXNzZXNzbWVudDoKCioqRm9jdXNpbmcgTXkgSW52ZXN0aWdhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSB0aGlzIHF1aWNrIHJldmlldywgdGhvc2Ugc2l6ZS1zZXR0aW5nIGZ1bmN0aW9ucywgYG5iZF9zaXplX3NldGAgYW5kIGBuYmRfc2V0X3NpemVgLCBhcmUgdGhlIG9ubHkgcG9pbnRzIG9mIGNhbGwgaGVyZS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGlmIEkgZm9jdXMgbXkgYW5hbHlzaXMgb24gYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIEkmIzM5O2xsIGJlIGNvdmVyaW5nIHRoZSBjcnVjaWFsIGFyZWFzLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIHRoaXMuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYG5iZF9pb2N0bGAgaXMsIGluIGZhY3QsIHN0YXRpYy4gKlllcyosIGl0IGFwcGVhcnMgdG8gYmUgZGVjbGFyZWQgc3RhdGljYWxseS4gSG1tLi4uIHdhaXQgYSBzZWNvbmQuLi4gaXMgdGhhdCAqdHJ1bHkqIHRoZSBjYXNlPyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbiBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxMi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTktXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4MTpcdFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE3ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlx0LmNvbXBhdF9pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXHQuZnJlZV9kaXNrID1cdG5iZF9mcmVlX2Rpc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTAwCgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQ6CgoqKkFuYWx5emluZyBBUEkgRW50cnlwb2ludHMgYW5kIFN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgdGhlIHByb21wdCBpcyB0aHJvd2luZyBhIGN1cnZlYmFsbCBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYG5iZF9pb2N0bGAgYmVpbmcgc3RhdGljIGlzIGNvcnJlY3QsIGJ1dCB0aGVuIEkgbmVlZCB0byBzdG9wIGFuZCBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGd1aWRlbGluZXMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLgoKYG5iZF9pb2N0bGAgaXMgKm5vdCogaW5saW5lZCwgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aGUgYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBzdHJ1Y3QuIEZ1bmN0aW9uIHBvaW50ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgbWFpbnRhaW4gYSBkaXN0aW5jdCBhZGRyZXNzIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoaXMgbWVhbnMgaXQgaGFzIGEgY2xlYXIsIG5vbi1pbmxpbmVkIHN5bWJvbC4gVGhlIHNhbWUgYXBwbGllcyB0byBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAg4oCTIHRoZXNlIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgZ2VubF9zbWFsbF9vcHNgLCBhbmQgdGhleSBhcmUgdGhlcmVmb3JlIGFsc28gKm5vdCogaW5saW5lZCBhbmQgcG9zc2VzcyBkaXN0aW5jdCBzeW1ib2xzLgoKVGhlcmVmb3JlLCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhpcyBndWlkZWxpbmUuIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2l6ZSB1cGRhdGUgbG9naWMgZm9yIE5ldHdvcmsgQmxvY2sgRGV2aWNlcyAoTkJEKS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBOQkQgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCwgcmVjb25maWd1cmUpIGFuZCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyMy4zOTExNzk2NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc0NDkxNjEzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyMy4zOTExODg0MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTg4MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkNjQzN2UxZTJjOTIzZWQyNGVlOTE4ZTU1YjE0N2QxMDA1ZWI0NzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTI6MTk6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCBmZTYzZjNjNTVkMGQ5Ni4uNTY3YjAzMWVjNTA1OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5AQCAtMzMxLDYgKzMzMSwyNyBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuK3tcXG4rXFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cXHUwMDNlY29uZmlnO1xcbitcXG4rXFx0aWYgKG1heF9wYXJ0KVxcbitcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2bmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLVxcdTAwM2VkaXNrLCBjb25maWctXFx1MDAzZWJ5dGVzaXplIFxcdTAwM2VcXHUwMDNlIDkpKVxcbitcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2bmJkX3RvX2RldihuYmQpLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcXG4re1xcbitcXHRpZiAoYnl0ZXNpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VieXRlc2l6ZSA9IGJ5dGVzaXplO1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpXFxuK1xcdFxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG5AQCAtMzc1LDEwICszOTYsNyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGlmIChtYXhfcGFydClcXG4tXFx0XFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXFx1MDAyNm5iZC1cXHUwMDNlZGlzay1cXHUwMDNlc3RhdGUpO1xcbi1cXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cXHUwMDNlZGlzaywgYnl0ZXNpemUgXFx1MDAzZVxcdTAwM2UgOSkpXFxuLVxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4rXFx0bmJkX3NpemVfdXBkYXRlKG5iZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMDYyLDExICsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxcbiBcXHRcXHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKTtcXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSlcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKSB7XFxuIFxcdFxcdGJzaXplID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xcbitcXHRcXHRpZiAoIWJzaXplKVxcbitcXHRcXHRcXHRic2l6ZSA9IDF1IFxcdTAwM2NcXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xcbitcXHRcXHRpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcXG4tXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7XFxuK1xcdGlmIChieXRlcyAhPSBjb25maWctXFx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpIHtcXG4rXFx0XFx0aWYgKGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXFxuK1xcdFxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NpemVfc2V0KG5iZCwgYnl0ZXMpO1xcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyNC4wNzIwMDgxMzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY3NjgzMjQ3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDY0MzdlMWUyYzkyM2VkMjRlZTkxOGU1NWIxNDdkMTAwNWViNDc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTI6MTk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggZmU2M2YzYzU1ZDBkOTYuLjU2N2IwMzFlYzUwNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTMzMSw2ICszMzEsMjcgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5iZF9zaXplX3VwZGF0ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1xuK1x0aWYgKG1heF9wYXJ0KVxuK1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4rXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cdTAwM2VkaXNrLCBjb25maWctXHUwMDNlYnl0ZXNpemUgXHUwMDNlXHUwMDNlIDkpKVxuK1x0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuK31cbitcbitzdGF0aWMgaW50IG5iZF9zaXplX3NldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUpXG4re1xuK1x0aWYgKGJ5dGVzaXplIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5iZC1cdTAwM2Vjb25maWctXHUwMDNlYnl0ZXNpemUgPSBieXRlc2l6ZTtcbitcdGlmIChuYmQtXHUwMDNlcGlkKVxuK1x0XHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuQEAgLTM3NSwxMCArMzk2LDcgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKG1heF9wYXJ0KVxuLVx0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cdTAwM2VkaXNrLCBieXRlc2l6ZSBcdTAwM2VcdTAwM2UgOSkpXG4tXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4rXHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMDYyLDExICsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxuIFx0XHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pO1xuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pXG4rXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSkge1xuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuK1x0XHRpZiAoIWJzaXplKVxuK1x0XHRcdGJzaXplID0gMXUgXHUwMDNjXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xuK1x0XHRpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuLVx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdGlmIChieXRlcyAhPSBjb25maWctXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSkge1xuK1x0XHRpZiAoYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbitcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjI0LjA3MjAxMDA3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjM0ODM2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgU2l6ZSBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgc2l6ZSB1cGRhdGUgbWVjaGFuaXNtIGZvciBOQkQgZGV2aWNlcyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHR3byBuZXcgZnVuY3Rpb25zOiBgbmJkX3NpemVfdXBkYXRlYCBhbmQgYG5iZF9zaXplX3NldGAuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGlzdGluZyBgbmJkX3NldF9zaXplYCB0byBsZXZlcmFnZSBgbmJkX3NpemVfdXBkYXRlYC4gSXQgYWxzbyBpbXBhY3RzIGBuYmRfZ2VubF9zaXplX3NldGAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIGJpdHMgYXJlIGxpa2VseSBoYXBwZW5pbmcuXG5cbkkgc2VlIHRoYXQgYG5iZF9nZW5sX3NpemVfc2V0YCBub3cgaGFzIHNvbWUgZXh0cmEgdmFsaWRhdGlvbiBmb3IgYmxvY2sgc2l6ZS4gSXQncyBhbHNvIGhhbmRsaW5nIHNpemUgY2hhbmdlcyBpbiBhIG1vcmUgbnVhbmNlZCB3YXkuIFNwZWNpZmljYWxseSwgaWYgb25seSB0aGUgYGJ5dGVzaXplYCBvZiB0aGUgTkJEIGRldmljZSBpcyBiZWluZyBtb2RpZmllZCwgaXQgbm93IGNhbGxzIGBuYmRfc2l6ZV9zZXRgIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWxseSBoZWF2aWVyIGBuYmRfc2V0X3NpemVgIGZsb3cuIFRoaXMgbGlrZWx5IHJlZHVjZXMgc29tZSBvdmVyaGVhZCBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBgbmJkX2dlbmxfc2l6ZV9zZXRgIGFuZCBgbmJkX3NldF9zaXplYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCBmaWxlIGl0c2VsZi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyB0byB0aGUgTkJEIGRldmljZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBicmFuY2hpbmcgbG9naWMgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMvZHJhd2JhY2tzLiBJIHNob3VsZCBhbHNvIHRyYWNrIGRvd24gdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOQkQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyOC45MzU0OTU2NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzQ4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjI5LjAzMDEzNjA3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODY1MzUzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIFNpemUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYEJMS19ERVZfTkJEYC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0dGluZyBvciB1cGRhdGluZyB0aGUgTkJEIHNpemUuIExldCdzIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci5cblxuT2theSwgSSd2ZSBnb3QgaXQuIEknbSBzZWVpbmcgdGhhdCBgbmJkX3NpemVfc2V0YCwgYG5iZF9zaXplX3VwZGF0ZWAsIGBuYmRfZ2VubF9zaXplX3NldGAsIGFuZCBgbmJkX3NldF9zaXplYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHRlbGxpbmcuIFN0YXRpYyBtZWFucyB0aGV5J3JlIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZS4gVGhleSBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBBUEkgZnVuY3Rpb25zLiBHb29kLiBOb3csIHdoYXQncyBjYWxsaW5nIHRoZW0/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBrbm93LiBMZXQncyBjaGVjayB0aGUgY2FsbGVycyBvZiBgbmJkX2dlbmxfc2l6ZV9zZXRgIGJlY2F1c2UsIGFzIHRoZSBnZW5lcmljIG5ldGxpbmsgY2FsbHMsIGl0cyB0aGUgb25lIGluIG15IG1pbmQgdGhhdCdzIG1vc3QgbGlrZWx5IHRvIGJlIHNldHRpbmcgdGhpcyBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzIuNjE2NjczNDc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9zaXplX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjA2OT1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMDc0OnN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMDk5PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTc3LVxcdHNldF9iaXQoTkJEX1JUX0JPVU5ELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNzg6XFx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMzNj1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzk5OlxcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDAwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjMyLjczNDAyNTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDYwODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYG5iZF9nZW5sX3NpemVfc2V0YCBpcyBjbGVhcmx5IGFuIGltcG9ydGFudCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEZyb20gdGhlIHNuaXBwZXQsIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiAgQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1lYW5zIHRoZXkgYXJlIGxpa2VseSBzcGVjaWZpYyB0byB0aGUgbW9kdWxlIG9yIGNvbXBvbmVudCB3aGVyZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIHJlc2lkZXMuIEl0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvciBzZXR1cCBkdXJpbmcgY29ubmVjdCBhbmQgcmVjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaG93IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBjYWxsIHN0YWNrIG9yaWdpbmF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjM1LjkzODYzNjU0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ1NjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMDc0PXN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTk6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTAwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjQ3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0NzgtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3OTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0ODAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzYuMDM3MDk3NDM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTY1NDIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBOZXRsaW5rIE9wZXJhdGlvbnMgaW4gdGhlIENvbnRleHQgb2YgYG5iZF9nZW5sYCoqXG5cbkFscmlnaHQsIEknbSBmb2N1c2luZyBvbiB0aGUgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhleSBhcmUgdGhlIE5ldGxpbmsgb3BlcmF0aW9ucyBoZXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaGFzIGFuIGltbWVkaWF0ZSBpbXBsaWNhdGlvbjogdGhleSB3b24ndCBiZSBleHBvcnRlZCBhcyBzeW1ib2xzLiBUaGF0IGxpbWl0cyB0aGVpciBkaXJlY3QgZXh0ZXJuYWwgYWNjZXNzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoLCBvciBjYWxsLCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgcmVsYXRpb25zaGlwcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kIG9yY2hlc3RyYXRlZCB3aXRoaW4gdGhlIE5ldGxpbmsgZnJhbWV3b3JrIG9mIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzkuMjY4NzU0MzUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ4NzgzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYwMT1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYxMTpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEyLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1OS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjgxOlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTc4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc4OS1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkwOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5MTpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkyLVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjQxLjIxNzU0MzI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDIwNDY2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5CRCBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGBuYmRfaW9jdGxgIGZ1bmN0aW9uLCBpdCdzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBOb3csIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgKmFsc28qIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgY291bnRlcmludHVpdGl2ZSBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBlbnRyeSBwb2ludHMuIEJ1dCBpZiB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlbiB1c2luZyB0aGVzZSBzdGF0aWMgZW50cnkgcG9pbnRzLCBuYW1lbHkgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAsIG1pZ2h0IGJlIG15IG9ubHkgb3B0aW9uLlxuXG5XYWl0IGEgbWludXRlLCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBhbmQgc3RhdGljIGZ1bmN0aW9ucz8gT2gsIHJpZ2h0LCBpdCBjYW4gZm9jdXMgb24gc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBkZWJ1ZyBpbmZvLiBCdXQgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIE9rYXksIGJ1dC4uLiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlbid0IGlubGluZWQgYmVjYXVzZSB0aGV5J3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgLmRvaXRgLiBUaGF0IG1lYW5zIHRoZXkncmUgZmluZSB0byB1c2UgYXMgZm9jdXMgc3ltYm9scyEgUGVyZmVjdC4gVGhleSdyZSBiYXNpY2FsbHkgZXF1aXZhbGVudCB0byBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiB0aGlzIGNhc2UuXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIHRocm91Z2ggYGRyaXZlcnMvYmxvY2svbmJkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIEkndmUgbWlzc2VkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxNSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo0Ni42MTk1OTM4OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjgyNDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoW15cXFxcKV0qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE3OTc9c3RhdGljIGludCBuYmRfZGJnX3Rhc2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MDYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODA3OkRFRklORV9TSE9XX0FUVFJJQlVURShuYmRfZGJnX3Rhc2tzKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA5PXN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODM1LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNjpERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODM3LVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNS19O1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNjpNT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoTkJEX0dFTkxfRkFNSUxZX05BTUUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjczND1zdGF0aWMgdm9pZCBfX2V4aXQgbmJkX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Njk6bW9kdWxlX2luaXQobmJkX2luaXQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MDptb2R1bGVfZXhpdChuYmRfY2xlYW51cCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzcxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk5ldHdvcmsgQmxvY2sgRGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzczOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc1Om1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NzY6TU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc3Om1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Nzg6TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo0Ni43MzY0MjI1NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzgyMzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipSZWdleCBPdmVyc2lnaHQgYW5kIFJlZmluZW1lbnQqKlxuXG5VZ2gsIEkgbWVzc2VkIHVwIHRoYXQgcmVnZXguIFRoYXQncyBmcnVzdHJhdGluZy4gT2theSwgZm9yZ2V0IHRoZSBvcmlnaW5hbCBhcHByb2FjaC4gSSdsbCBqdXN0IGZvY3VzIG9uIHRoZSBjb3JlIGNhbGxzOiBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2lvY3RsYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIEJ1dCBoYW5nIG9uLCBkaWRuJ3QgSSBzZWUgYG5iZF9zZXRfc2l6ZWAgaW4gdGhlIGBfX25iZF9pb2N0bGAgY29kZSBwYXRoIGFzIHdlbGw/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjQ5LjY4MDI0ODU5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzNjY2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NldF9zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozNTU6c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0ODk9c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1NTctXFx0fVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTU1ODpcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTU5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYxMT1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjUtXFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI2OlxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyNy1cXHRjYXNlIE5CRF9TRVRfU0laRTpcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mjg6XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI5LVxcdGNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MzI6XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzMtXFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwNzQ9c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLVxcdFxcdGlmIChic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MzpcXHRcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTQtXFx0XFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NDkuNzc5NjM2Nzk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzY2NjkxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBjb25maXJtaW5nIHRoYXQgYF9fbmJkX2lvY3RsYCBkZWZpbml0ZWx5IGNhbGxzIGBuYmRfc2V0X3NpemVgLiBUaGF0J3MgYSBzb2xpZCBjb25uZWN0aW9uIHJpZ2h0IHRoZXJlLiBTbywgYG5iZF9pb2N0bGAgaXRzZWxmIGlzIGEgcmVhbGx5IGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEknbSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIC0gdGhvc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBzZXR1cCBhbmQgcmVjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZS4gVGltZSB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBmb3Igb3RoZXIgY29uZmlnIG9wdGlvbnMuIEFoLCB5ZXMsIHRoZSBtYWluIG9uZSwgb2J2aW91c2x5LCBpcyBgQkxLX0RFVl9OQkRgLiBCdXQgd2FpdOKApiBgQkxLX0RFVl9OQkRgIGRlcGVuZHMgb24gYEJMT0NLYC4gUmlnaHQsIGxldCdzIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NTMuOTE2MzA4NDU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5MjY1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjU0LjAzMjI0MDY1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQwODk2MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJsb2NrIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzLCBcIldoZXJlIHdvdWxkIEkgZmluZCB0aGUgKmNvcmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYmxvY2sgZHJpdmVycz9cIiBNeSBleHBlcmllbmNlIGltbWVkaWF0ZWx5IHN0ZWVycyBtZSB0b3dhcmRzIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIHdoaWNoIGhhbmRsZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2hvaWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXJzIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGRyaXZlcnMvYmxvY2svYCBpcyBhIGxpa2VseSBzcG90IGFuZCB0aGUgS2NvbmZpZyB0aGVyZSB3aWxsIGNvbnRhaW4gd2hhdCBJIG5lZWQuIExldCBtZSBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxOTY7IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZXhwbG9yZS4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgc29tZXRoaW5nIHJlbGV2YW50IHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo1Ny4zNzMxNDA2NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0ICBUaGUgaGlzdG9yaWMgZGVmYXVsdCBpcyA4LiBJZiBhIGxhdGUgMjAxMSB2ZXJzaW9uIG9mIGxvc2V0dXAoOClcXG4gMTkxOlxcdFxcdCAgaXMgdXNlZCwgaXQgY2FuIGJlIHNldCB0byAwLCBzaW5jZSBuZWVkZWQgbG9vcCBkZXZpY2VzIGNhbiBiZVxcbiAxOTI6XFx0XFx0ICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCB0aGUgL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NTcuMzczMjY2NzY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzcxMTg4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCdzIGZ1enphYmlsaXR5IGhpbmdlcyBvbiBgTkVUYCwgYnV0IHNwZWNpZmljYWxseSwgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIGlzIHRoZSBvbmx5IHByZXJlcXVpc2l0ZS4gTGV0J3MgZGlzdGlsbCB0aGlzOlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBmdXp6YWJsZS4gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuIFdlJ3JlIHRhcmdldGluZyBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoZSBlbmFibGluZyBjb25maWcgaXMgYEJMS19ERVZfTkJEYC4gTXkgcmVhc29uaW5nPyBUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBuZXR3b3JrIGJsb2NrIGRldmljZSAoTkJEKSBzaXplcyBhcmUgdXBkYXRlZC4gVGhlIG5ldyBjb2RlIGlzIHRyaWdnZXJlZCBieSB0aG9zZSBOQkQtc3BlY2lmaWMgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCBhbmQgcmVjb25maWd1cmUpIGFuZCB0aGUgcmVsZXZhbnQgaW9jdGxzLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1lc3NlcyB3aXRoIGBuYmRfc2l6ZV91cGRhdGVgLiBJIHNob3VsZCB0YWtlIGEgbW9tZW50IGFuZCBjb25maXJtIHRoYXQgYG5iZF9zaXplX3VwZGF0ZWAgaXNuJ3QgY2FsbGVkIGZyb20gKm90aGVyKiBwbGFjZXMgYXMgd2VsbC4gR290IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjA6MDIuMDEwMzkwNDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2OTY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NpemVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0zMDU9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMzQ6c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTAtXFx0aWYgKG5iZC1cXHUwMDNlcGlkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzUxOlxcdFxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUyLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNTU9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzk4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzk5OlxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDAwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoyMDowMi4xMjUwOTEzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzc3NDcwOTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBhc3Nlc3NtZW50OlxuXG4qKkZvY3VzaW5nIE15IEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZmFyIGFzIEkgY2FuIHNlZSBmcm9tIHRoaXMgcXVpY2sgcmV2aWV3LCB0aG9zZSBzaXplLXNldHRpbmcgZnVuY3Rpb25zLCBgbmJkX3NpemVfc2V0YCBhbmQgYG5iZF9zZXRfc2l6ZWAsIGFyZSB0aGUgb25seSBwb2ludHMgb2YgY2FsbCBoZXJlLiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbSBjb25maWRlbnQgdGhhdCBpZiBJIGZvY3VzIG15IGFuYWx5c2lzIG9uIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBJJ2xsIGJlIGNvdmVyaW5nIHRoZSBjcnVjaWFsIGFyZWFzLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIHRoaXMuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBuYmRfaW9jdGxgIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpZZXMqLCBpdCBhcHBlYXJzIHRvIGJlIGRlY2xhcmVkIHN0YXRpY2FsbHkuIEhtbS4uLiB3YWl0IGEgc2Vjb25kLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIG15IGFzc3VtcHRpb24gaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjE6MDUuODk5ODA0Njk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3NjU2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTItXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU5LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXFx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6XFx0XFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODItXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNzg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlxcdC5jb21wYXRfaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXFx0LmZyZWVfZGlzayA9XFx0bmJkX2ZyZWVfZGlzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjE6MDYuMDAyNTc2MTQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDY1NTE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQ6XG5cbioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50cyBhbmQgU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRoZSBwcm9tcHQgaXMgdGhyb3dpbmcgYSBjdXJ2ZWJhbGwgYWJvdXQgc3RhdGljIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBuYmRfaW9jdGxgIGJlaW5nIHN0YXRpYyBpcyBjb3JyZWN0LCBidXQgdGhlbiBJIG5lZWQgdG8gc3RvcCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLlxuXG5gbmJkX2lvY3RsYCBpcyAqbm90KiBpbmxpbmVkLCBiZWNhdXNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gdGhlIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2Agc3RydWN0LiBGdW5jdGlvbiBwb2ludGVycywgYnkgdGhlaXIgdmVyeSBuYXR1cmUsIG1haW50YWluIGEgZGlzdGluY3QgYWRkcmVzcyBpbiB0aGUgc3ltYm9sIHRhYmxlLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGNsZWFyLCBub24taW5saW5lZCBzeW1ib2wuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIOKAkyB0aGVzZSBhcmUgYWxzbyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYCwgYW5kIHRoZXkgYXJlIHRoZXJlZm9yZSBhbHNvICpub3QqIGlubGluZWQgYW5kIHBvc3Nlc3MgZGlzdGluY3Qgc3ltYm9scy5cblxuVGhlcmVmb3JlLCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhpcyBndWlkZWxpbmUuIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAwLCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoyMToxMC43MDkxMzA2NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzExOTk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2l6ZSB1cGRhdGUgbG9naWMgZm9yIE5ldHdvcmsgQmxvY2sgRGV2aWNlcyAoTkJEKS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBOQkQgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCwgcmVjb25maWd1cmUpIGFuZCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-28 11:46:15 +0000 UTC FinishedAt: 2026-07-28 12:21:12 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NBD" ], "series_id": "772cfe86-dd6d-4c81-98a0-2d301ef357e4" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "nbd_ioctl", "nbd_genl_connect", "nbd_genl_reconfigure" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTkJEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmJkX2lvY3RsJiMzNDssCiAgICAmIzM0O25iZF9nZW5sX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfcmVjb25maWd1cmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmQ2NDM3ZTFlMmM5MjNlZDI0ZWU5MThlNTViMTQ3ZDEwMDVlYjQ3OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDI4IDEyOjE5OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5pbmRleCBmZTYzZjNjNTVkMGQ5Ni4uNTY3YjAzMWVjNTA1OWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jXG5AQCAtMzMxLDYgJiM0MzszMzEsMjcgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBuYmRfc2l6ZV91cGRhdGUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuJiM0MztcbiYjNDM7XHRpZiAobWF4X3BhcnQpXG4mIzQzO1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShuYmQtXHUwMDNlZGlzaywgY29uZmlnLVx1MDAzZWJ5dGVzaXplIFx1MDAzZVx1MDAzZSA5KSlcbiYjNDM7XHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcbiYjNDM7e1xuJiM0MztcdGlmIChieXRlc2l6ZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRuYmQtXHUwMDNlY29uZmlnLVx1MDAzZWJ5dGVzaXplID0gYnl0ZXNpemU7XG4mIzQzO1x0aWYgKG5iZC1cdTAwM2VwaWQpXG4mIzQzO1x0XHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuQEAgLTM3NSwxMCAmIzQzOzM5Niw3IEBAIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdGlmIChtYXhfcGFydClcbi1cdFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXHUwMDI2bmJkLVx1MDAzZWRpc2stXHUwMDNlc3RhdGUpO1xuLVx0aWYgKCFzZXRfY2FwYWNpdHlfYW5kX25vdGlmeShuYmQtXHUwMDNlZGlzaywgYnl0ZXNpemUgXHUwMDNlXHUwMDNlIDkpKVxuLVx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuJiM0MztcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTIwNjIsMTEgJiM0MzsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxuIFx0XHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pO1xuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pXG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pIHtcbiBcdFx0YnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKTtcbiYjNDM7XHRcdGlmICghYnNpemUpXG4mIzQzO1x0XHRcdGJzaXplID0gMXUgXHUwMDNjXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xuJiM0MztcdFx0aWYgKGJsa192YWxpZGF0ZV9ibG9ja19zaXplKGJzaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRpZiAoYnl0ZXMgIT0gY29uZmlnLVx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpIHtcbiYjNDM7XHRcdGlmIChic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuJiM0MztcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbiYjNDM7XHRcdHJldHVybiBuYmRfc2l6ZV9zZXQobmJkLCBieXRlcyk7XG4mIzQzO1x0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDZkNjQzN2UxZTJjOTIzZWQyNGVlOTE4ZTU1YjE0N2QxMDA1ZWI0NzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyOCAxMjoxOToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IGZlNjNmM2M1NWQwZDk2Li41NjdiMDMxZWM1MDU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0zMzEsNiAmIzQzOzMzMSwyNyBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssCiAJbnNvY2stJmd0O3NlbnQgPSAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmJkX2NvbmZpZyAqY29uZmlnID0gbmJkLSZndDtjb25maWc7CiYjNDM7CiYjNDM7CWlmIChtYXhfcGFydCkKJiM0MzsJCXNldF9iaXQoR0RfTkVFRF9QQVJUX1NDQU4sICZhbXA7bmJkLSZndDtkaXNrLSZndDtzdGF0ZSk7CiYjNDM7CWlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLSZndDtkaXNrLCBjb25maWctJmd0O2J5dGVzaXplICZndDsmZ3Q7IDkpKQomIzQzOwkJa29iamVjdF91ZXZlbnQoJmFtcDtuYmRfdG9fZGV2KG5iZCktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKQomIzQzO3sKJiM0MzsJaWYgKGJ5dGVzaXplICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwluYmQtJmd0O2NvbmZpZy0mZ3Q7Ynl0ZXNpemUgPSBieXRlc2l6ZTsKJiM0MzsJaWYgKG5iZC0mZ3Q7cGlkKQomIzQzOwkJbmJkX3NpemVfdXBkYXRlKG5iZCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpCiB7CiAJc3RydWN0IHF1ZXVlX2xpbWl0cyBsaW07CkBAIC0zNzUsMTAgJiM0MzszOTYsNyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKQogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKG1heF9wYXJ0KQotCQlzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCAmYW1wO25iZC0mZ3Q7ZGlzay0mZ3Q7c3RhdGUpOwotCWlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLSZndDtkaXNrLCBieXRlc2l6ZSAmZ3Q7Jmd0OyA5KSkKLQkJa29iamVjdF91ZXZlbnQoJmFtcDtuYmRfdG9fZGV2KG5iZCktJmd0O2tvYmosIEtPQkpfQ0hBTkdFKTsKJiM0MzsJbmJkX3NpemVfdXBkYXRlKG5iZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNjIsMTEgJiM0MzsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCkKIAlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pCiAJCWJ5dGVzID0gbmxhX2dldF91NjQoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pOwogCi0JaWYgKGluZm8tJmd0O2F0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKQomIzQzOwlpZiAoaW5mby0mZ3Q7YXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pIHsKIAkJYnNpemUgPSBubGFfZ2V0X3U2NChpbmZvLSZndDthdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSk7CiYjNDM7CQlpZiAoIWJzaXplKQomIzQzOwkJCWJzaXplID0gMXUgJmx0OyZsdDsgTkJEX0RFRl9CTEtTSVpFX0JJVFM7CiYjNDM7CQlpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiAKLQlpZiAoYnl0ZXMgIT0gY29uZmlnLSZndDtieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKQotCQlyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTsKJiM0MzsJaWYgKGJ5dGVzICE9IGNvbmZpZy0mZ3Q7Ynl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSkgewomIzQzOwkJaWYgKGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpCiYjNDM7CQkJcmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7CiYjNDM7CQlyZXR1cm4gbmJkX3NpemVfc2V0KG5iZCwgYnl0ZXMpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5CRCBTaXplIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHRoZSBzaXplIHVwZGF0ZSBtZWNoYW5pc20gZm9yIE5CRCBkZXZpY2VzIHdpdGhpbiBgZHJpdmVycy9ibG9jay9uYmQuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgdHdvIG5ldyBmdW5jdGlvbnM6IGBuYmRfc2l6ZV91cGRhdGVgIGFuZCBgbmJkX3NpemVfc2V0YC4gRnJvbSB3aGF0IEkgZ2F0aGVyLCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBuYmRfc2V0X3NpemVgIHRvIGxldmVyYWdlIGBuYmRfc2l6ZV91cGRhdGVgLiBJdCBhbHNvIGltcGFjdHMgYG5iZF9nZW5sX3NpemVfc2V0YCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgaW50ZXJlc3RpbmcgYml0cyBhcmUgbGlrZWx5IGhhcHBlbmluZy4KCkkgc2VlIHRoYXQgYG5iZF9nZW5sX3NpemVfc2V0YCBub3cgaGFzIHNvbWUgZXh0cmEgdmFsaWRhdGlvbiBmb3IgYmxvY2sgc2l6ZS4gSXQmIzM5O3MgYWxzbyBoYW5kbGluZyBzaXplIGNoYW5nZXMgaW4gYSBtb3JlIG51YW5jZWQgd2F5LiBTcGVjaWZpY2FsbHksIGlmIG9ubHkgdGhlIGBieXRlc2l6ZWAgb2YgdGhlIE5CRCBkZXZpY2UgaXMgYmVpbmcgbW9kaWZpZWQsIGl0IG5vdyBjYWxscyBgbmJkX3NpemVfc2V0YCBkaXJlY3RseSwgcmF0aGVyIHRoYW4gZ29pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsbHkgaGVhdmllciBgbmJkX3NldF9zaXplYCBmbG93LiBUaGlzIGxpa2VseSByZWR1Y2VzIHNvbWUgb3ZlcmhlYWQgaW4gY2VydGFpbiBzY2VuYXJpb3MuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBkaXJlY3RseSBpbnRvIGBuYmRfZ2VubF9zaXplX3NldGAgYW5kIGBuYmRfc2V0X3NpemVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvYmxvY2svbmJkLmNgIGZpbGUgaXRzZWxmLiBUaGlzIGNvZGUgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIHRvIHRoZSBOQkQgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBicmFuY2hpbmcgbG9naWMgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMvZHJhd2JhY2tzLiBJIHNob3VsZCBhbHNvIHRyYWNrIGRvd24gdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOQkQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIFNpemUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQkxLX0RFVl9OQkRgLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0dGluZyBvciB1cGRhdGluZyB0aGUgTkJEIHNpemUuIExldCYjMzk7cyBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIEkmIzM5O20gc2VlaW5nIHRoYXQgYG5iZF9zaXplX3NldGAsIGBuYmRfc2l6ZV91cGRhdGVgLCBgbmJkX2dlbmxfc2l6ZV9zZXRgLCBhbmQgYG5iZF9zZXRfc2l6ZWAgYXJlIGFsbCBzdGF0aWMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdGVsbGluZy4gU3RhdGljIG1lYW5zIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZS4gVGhleSBhcmVuJiMzOTt0IGludGVuZGVkIHRvIGJlIGRpcmVjdGx5IGV4cG9zZWQgYXMgQVBJIGZ1bmN0aW9ucy4gR29vZC4gTm93LCB3aGF0JiMzOTtzIGNhbGxpbmcgdGhlbT8gVGhhdCYjMzk7cyB3aGF0IEkgbmVlZCB0byBrbm93LiBMZXQmIzM5O3MgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYG5iZF9nZW5sX3NpemVfc2V0YCBiZWNhdXNlLCBhcyB0aGUgZ2VuZXJpYyBuZXRsaW5rIGNhbGxzLCBpdHMgdGhlIG9uZSBpbiBteSBtaW5kIHRoYXQmIzM5O3MgbW9zdCBsaWtlbHkgdG8gYmUgc2V0dGluZyB0aGlzIHNpemUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmJkX2dlbmxfc2l6ZV9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MjA2OT1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICYjNDM7IDFdID0ge1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA3My1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA3NDpzdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzUte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA5OT1zdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNzctXHRzZXRfYml0KE5CRF9SVF9CT1VORCwgXHUwMDI2Y29uZmlnLVx1MDAzZXJ1bnRpbWVfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyMTc4Olx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjE3OS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzM2PXN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIzOTk6XHRyZXQgPSBuYmRfZ2VubF9zaXplX3NldChpbmZvLCBuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNDAwLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqQW5hbHl6aW5nIHRoZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBuYmRfZ2VubF9zaXplX3NldGAgaXMgY2xlYXJseSBhbiBpbXBvcnRhbnQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBGcm9tIHRoZSBzbmlwcGV0LCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCBieSBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAuICBCb3RoIG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoZXkgYXJlIGludGVybmFsIHRvIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQuIFRoYXQgbWVhbnMgdGhleSBhcmUgbGlrZWx5IHNwZWNpZmljIHRvIHRoZSBtb2R1bGUgb3IgY29tcG9uZW50IHdoZXJlIGBuYmRfZ2VubF9zaXplX3NldGAgcmVzaWRlcy4gSXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9yIHNldHVwIGR1cmluZyBjb25uZWN0IGFuZCByZWNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gaG93IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBjYWxsIHN0YWNrIG9yaWdpbmF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTIwNzQ9c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5OTpzdGF0aWMgaW50IG5iZF9nZW5sX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjEwMC17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0yNDc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zbWFsbF9vcHMgbmJkX2Nvbm5lY3RfZ2VubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0NzgtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3OTpcdFx0LmRvaXRcdD0gbmJkX2dlbmxfY29ubmVjdCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ4MC1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcwOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgTmV0bGluayBPcGVyYXRpb25zIGluIHRoZSBDb250ZXh0IG9mIGBuYmRfZ2VubGAqKgoKQWxyaWdodCwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhleSBhcmUgdGhlIE5ldGxpbmsgb3BlcmF0aW9ucyBoZXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGlzIGhhcyBhbiBpbW1lZGlhdGUgaW1wbGljYXRpb246IHRoZXkgd29uJiMzOTt0IGJlIGV4cG9ydGVkIGFzIHN5bWJvbHMuIFRoYXQgbGltaXRzIHRoZWlyIGRpcmVjdCBleHRlcm5hbCBhY2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGZvciBtZSBpcyB0byBpbnZlc3RpZ2F0ZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSB0aGF0IG1pZ2h0IGludGVyYWN0IHdpdGgsIG9yIGNhbGwsIHRoZXNlIGBzdGF0aWNgIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aG9zZSByZWxhdGlvbnNoaXBzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgdXNlZCBhbmQgb3JjaGVzdHJhdGVkIHdpdGhpbiB0aGUgTmV0bGluayBmcmFtZXdvcmsgb2YgdGhpcyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxMi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTktXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4MTpcdFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE3ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlx0LmNvbXBhdF9pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXHQuZnJlZV9kaXNrID1cdG5iZF9mcmVlX2Rpc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTUKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5CRCBEcml2ZXIgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBgbmJkX2lvY3RsYCBmdW5jdGlvbiwgaXQmIzM5O3MgYWxzbyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBOb3csIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgKmFsc28qIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgY291bnRlcmludHVpdGl2ZSBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBlbnRyeSBwb2ludHMuIEJ1dCBpZiB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlbiB1c2luZyB0aGVzZSBzdGF0aWMgZW50cnkgcG9pbnRzLCBuYW1lbHkgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAsIG1pZ2h0IGJlIG15IG9ubHkgb3B0aW9uLgoKV2FpdCBhIG1pbnV0ZSwgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgYWJvdXQgU3l6a2FsbGVyIGFuZCBzdGF0aWMgZnVuY3Rpb25zPyBPaCwgcmlnaHQsIGl0IGNhbiBmb2N1cyBvbiBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGluIHRoZSBkZWJ1ZyBpbmZvLiBCdXQgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIE9rYXksIGJ1dC4uLiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlbiYjMzk7dCBpbmxpbmVkIGJlY2F1c2UgdGhleSYjMzk7cmUgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGAuZG9pdGAuIFRoYXQgbWVhbnMgdGhleSYjMzk7cmUgZmluZSB0byB1c2UgYXMgZm9jdXMgc3ltYm9scyEgUGVyZmVjdC4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgaW4gdGhpcyBjYXNlLgoKQWxyaWdodCwgYmVmb3JlIEkgZmluYWxpemUgdGhpcywgbGV0JiMzOTtzIGp1c3QgZG91YmxlLWNoZWNrLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgc2NhbiB0aHJvdWdoIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgSSYjMzk7dmUgbWlzc2VkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSpcXChbXlxcKV0qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jPTE3OTc9c3RhdGljIGludCBuYmRfZGJnX3Rhc2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xODA2LVxuZHJpdmVycy9ibG9jay9uYmQuYzoxODA3OkRFRklORV9TSE9XX0FUVFJJQlVURShuYmRfZGJnX3Rhc2tzKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTgwOC1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTgwOT1zdGF0aWMgaW50IG5iZF9kYmdfZmxhZ3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MzUtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE4MzY6REVGSU5FX1NIT1dfQVRUUklCVVRFKG5iZF9kYmdfZmxhZ3MpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xODM3LVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjUwMj1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG5iZF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNTE1LX07XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI1MTY6TU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKE5CRF9HRU5MX0ZBTUlMWV9OQU1FKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTI3MzQ9c3RhdGljIHZvaWQgX19leGl0IG5iZF9jbGVhbnVwKHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzY4LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzY5Om1vZHVsZV9pbml0KG5iZF9pbml0KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MDptb2R1bGVfZXhpdChuYmRfY2xlYW51cCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NzEtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NzI6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O05ldHdvcmsgQmxvY2sgRGV2aWNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MzpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZHJpdmVycy9ibG9jay9uYmQuYy0yNzc0LVxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc1Om1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3NjpNT0RVTEVfUEFSTV9ERVNDKG5iZHNfbWF4LCBcJiMzNDtudW1iZXIgb2YgbmV0d29yayBibG9jayBkZXZpY2VzIHRvIGluaXRpYWxpemUgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Nzc6bW9kdWxlX3BhcmFtKG1heF9wYXJ0LCBpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc4Ok1PRFVMRV9QQVJNX0RFU0MobWF4X3BhcnQsIFwmIzM0O251bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqUmVnZXggT3ZlcnNpZ2h0IGFuZCBSZWZpbmVtZW50KioKClVnaCwgSSBtZXNzZWQgdXAgdGhhdCByZWdleC4gVGhhdCYjMzk7cyBmcnVzdHJhdGluZy4gT2theSwgZm9yZ2V0IHRoZSBvcmlnaW5hbCBhcHByb2FjaC4gSSYjMzk7bGwganVzdCBmb2N1cyBvbiB0aGUgY29yZSBjYWxsczogYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBCdXQgaGFuZyBvbiwgZGlkbiYjMzk7dCBJIHNlZSBgbmJkX3NldF9zaXplYCBpbiB0aGUgYF9fbmJkX2lvY3RsYCBjb2RlIHBhdGggYXMgd2VsbD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdCBjYWxsIGNoYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yOCAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuYmRfc2V0X3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL25iZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmM9MzQ0PXN0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1NC1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MzU1OnN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Ni17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0xNDg5PXN0YXRpYyBpbnQgbmJkX3N0YXJ0X2RldmljZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTU1Ny1cdH1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTU1ODpcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXHUwMDNlYnl0ZXNpemUsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNTU5LX1cbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE2MTE9c3RhdGljIGludCBfX25iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyNS1cdGNhc2UgTkJEX1NFVF9CTEtTSVpFOlxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI2Olx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVx1MDAzZWJ5dGVzaXplLCBhcmcpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI3LVx0Y2FzZSBOQkRfU0VUX1NJWkU6XG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mjg6XHRcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBhcmcsIG5iZF9ibGtzaXplKGNvbmZpZykpO1xuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI5LVx0Y2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYzMjpcdFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMy1cdGNhc2UgTkJEX1NFVF9USU1FT1VUOlxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MjA3ND1zdGF0aWMgaW50IG5iZF9nZW5sX3NpemVfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLVx0XHRpZiAoYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MzpcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5NC1cdFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBOQkQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgY29uZmlybWluZyB0aGF0IGBfX25iZF9pb2N0bGAgZGVmaW5pdGVseSBjYWxscyBgbmJkX3NldF9zaXplYC4gVGhhdCYjMzk7cyBhIHNvbGlkIGNvbm5lY3Rpb24gcmlnaHQgdGhlcmUuIFNvLCBgbmJkX2lvY3RsYCBpdHNlbGYgaXMgYSByZWFsbHkgZ29vZCBmb2NhbCBwb2ludCBmb3IgdGhpcy4gSSYjMzk7bSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIC0gdGhvc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBzZXR1cCBhbmQgcmVjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgTmV0d29yayBCbG9jayBEZXZpY2UuIFRpbWUgdG8gZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgZm9yIG90aGVyIGNvbmZpZyBvcHRpb25zLiBBaCwgeWVzLCB0aGUgbWFpbiBvbmUsIG9idmlvdXNseSwgaXMgYEJMS19ERVZfTkJEYC4gQnV0IHdhaXTigKYgYEJMS19ERVZfTkJEYCBkZXBlbmRzIG9uIGBCTE9DS2AuIFJpZ2h0LCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgYW5kIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTkJEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xOTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTk1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5Njpjb25maWcgQkxLX0RFVl9OQkRcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJsb2NrIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBjZXJ0YWluIGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLiBNeSBtZW50YWwgY2hlY2tsaXN0IHNheXMsICYjMzQ7V2hlcmUgd291bGQgSSBmaW5kIHRoZSAqY29yZSogY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBibG9jayBkcml2ZXJzPyYjMzQ7IE15IGV4cGVyaWVuY2UgaW1tZWRpYXRlbHkgc3RlZXJzIG1lIHRvd2FyZHMgdGhlIGBLY29uZmlnYCBmaWxlcywgd2hpY2ggaGFuZGxlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBjaG9pY2VzIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXJzIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGRyaXZlcnMvYmxvY2svYCBpcyBhIGxpa2VseSBzcG90IGFuZCB0aGUgS2NvbmZpZyB0aGVyZSB3aWxsIGNvbnRhaW4gd2hhdCBJIG5lZWQuIExldCBtZSBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxOTY7IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZXhwbG9yZS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHNvbWV0aGluZyByZWxldmFudCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MDpcdFx0ICBUaGUgaGlzdG9yaWMgZGVmYXVsdCBpcyA4LiBJZiBhIGxhdGUgMjAxMSB2ZXJzaW9uIG9mIGxvc2V0dXAoOClcbiAxOTE6XHRcdCAgaXMgdXNlZCwgaXQgY2FuIGJlIHNldCB0byAwLCBzaW5jZSBuZWVkZWQgbG9vcCBkZXZpY2VzIGNhbiBiZVxuIDE5MjpcdFx0ICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCB0aGUgL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLlxuIDE5MzpcdFxuIDE5NDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL2RyYmQvS2NvbmZpZ1wmIzM0O1xuIDE5NTpcdFxuIDE5NjpcdGNvbmZpZyBCTEtfREVWX05CRFxuIDE5NzpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuIDE5ODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAxOTk6XHRcdGhlbHBcbiAyMDA6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcbiAyMDE6XHRcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcbiAyMDI6XHRcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxuIDIwMzpcdFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxuIDIwNDpcdFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xuIDIwNTpcdFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgTmV0d29yayBibG9jayBkZXZpY2VzIGFsc28gYWxsb3dzIHlvdSB0byBydW4gYSBibG9jay1kZXZpY2UgaW5cbiAyMDg6XHRcdCAgdXNlcmxhbmQgKG1ha2luZyBzZXJ2ZXIgYW5kIGNsaWVudCBwaHlzaWNhbGx5IHRoZSBzYW1lIGNvbXB1dGVyLFxuIDIwOTpcdFx0ICBjb21tdW5pY2F0aW5nIHVzaW5nIHRoZSBsb29wYmFjayBuZXR3b3JrIGRldmljZSkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2gmIzM5O3MgZnV6emFiaWxpdHkgaGluZ2VzIG9uIGBORVRgLCBidXQgc3BlY2lmaWNhbGx5LCB0aGUgYEJMS19ERVZfTkJEYCBjb25maWcgaXMgdGhlIG9ubHkgcHJlcmVxdWlzaXRlLiBMZXQmIzM5O3MgZGlzdGlsbCB0aGlzOgoKRXNzZW50aWFsbHksIHRoaXMgaXMgZnV6emFibGUuIGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLiBXZSYjMzk7cmUgdGFyZ2V0aW5nIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiAgVGhlIGVuYWJsaW5nIGNvbmZpZyBpcyBgQkxLX0RFVl9OQkRgLiBNeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IG5ldHdvcmsgYmxvY2sgZGV2aWNlIChOQkQpIHNpemVzIGFyZSB1cGRhdGVkLiBUaGUgbmV3IGNvZGUgaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIE5CRC1zcGVjaWZpYyBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0IGFuZCByZWNvbmZpZ3VyZSkgYW5kIHRoZSByZWxldmFudCBpb2N0bHMuCgpIYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1lc3NlcyB3aXRoIGBuYmRfc2l6ZV91cGRhdGVgLiBJIHNob3VsZCB0YWtlIGEgbW9tZW50IGFuZCBjb25maXJtIHRoYXQgYG5iZF9zaXplX3VwZGF0ZWAgaXNuJiMzOTt0IGNhbGxlZCBmcm9tICpvdGhlciogcGxhY2VzIGFzIHdlbGwuIEdvdCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9zaXplX3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0zMDU9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzMzLVxuZHJpdmVycy9ibG9jay9uYmQuYzozMzQ6c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTMzNS17XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUwLVx0aWYgKG5iZC1cdTAwM2VwaWQpXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM1MTpcdFx0bmJkX3NpemVfdXBkYXRlKG5iZCk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Mi1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MzU1PXN0YXRpYyBpbnQgbmJkX3NldF9zaXplKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSwgbG9mZl90IGJsa3NpemUpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0zOTgtXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjM5OTpcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xuZHJpdmVycy9ibG9jay9uYmQuYy00MDAtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjggMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgYXNzZXNzbWVudDoKCioqRm9jdXNpbmcgTXkgSW52ZXN0aWdhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGZhciBhcyBJIGNhbiBzZWUgZnJvbSB0aGlzIHF1aWNrIHJldmlldywgdGhvc2Ugc2l6ZS1zZXR0aW5nIGZ1bmN0aW9ucywgYG5iZF9zaXplX3NldGAgYW5kIGBuYmRfc2V0X3NpemVgLCBhcmUgdGhlIG9ubHkgcG9pbnRzIG9mIGNhbGwgaGVyZS4gR2l2ZW4gdGhhdCBjb250ZXh0LCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGlmIEkgZm9jdXMgbXkgYW5hbHlzaXMgb24gYG5iZF9pb2N0bGAsIGBuYmRfZ2VubF9jb25uZWN0YCwgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIEkmIzM5O2xsIGJlIGNvdmVyaW5nIHRoZSBjcnVjaWFsIGFyZWFzLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIHRoaXMuCgpOb3csIGhvbGQgb24gYSBzZWNvbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYG5iZF9pb2N0bGAgaXMsIGluIGZhY3QsIHN0YXRpYy4gKlllcyosIGl0IGFwcGVhcnMgdG8gYmUgZGVjbGFyZWQgc3RhdGljYWxseS4gSG1tLi4uIHdhaXQgYSBzZWNvbmQuLi4gaXMgdGhhdCAqdHJ1bHkqIHRoZSBjYXNlPyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgbXkgYXNzdW1wdGlvbiBoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbmJkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYxMi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2NTktXHRcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY4MTpcdFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY4Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE3ODU9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBuYmRfZm9wcyA9XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVx0LnJlbGVhc2UgPVx0bmJkX3JlbGVhc2UsXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XHQuaW9jdGwgPVx0bmJkX2lvY3RsLFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlx0LmNvbXBhdF9pb2N0bCA9XHRuYmRfaW9jdGwsXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXHQuZnJlZV9kaXNrID1cdG5iZF9mcmVlX2Rpc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTAwCgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQ6CgoqKkFuYWx5emluZyBBUEkgRW50cnlwb2ludHMgYW5kIFN0YXRpYyBGdW5jdGlvbnMqKgoKT2theSwgdGhlIHByb21wdCBpcyB0aHJvd2luZyBhIGN1cnZlYmFsbCBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgb2YgYG5iZF9pb2N0bGAgYmVpbmcgc3RhdGljIGlzIGNvcnJlY3QsIGJ1dCB0aGVuIEkgbmVlZCB0byBzdG9wIGFuZCBjYXJlZnVsbHkgY29uc2lkZXIgdGhlIGd1aWRlbGluZXMuIFRoZSBwcm9tcHQgd2FudHMgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLgoKYG5iZF9pb2N0bGAgaXMgKm5vdCogaW5saW5lZCwgYmVjYXVzZSBpdCYjMzk7cyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiB0aGUgYGJsb2NrX2RldmljZV9vcGVyYXRpb25zYCBzdHJ1Y3QuIEZ1bmN0aW9uIHBvaW50ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgbWFpbnRhaW4gYSBkaXN0aW5jdCBhZGRyZXNzIGluIHRoZSBzeW1ib2wgdGFibGUuIFRoaXMgbWVhbnMgaXQgaGFzIGEgY2xlYXIsIG5vbi1pbmxpbmVkIHN5bWJvbC4gVGhlIHNhbWUgYXBwbGllcyB0byBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAg4oCTIHRoZXNlIGFyZSBhbHNvIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgZ2VubF9zbWFsbF9vcHNgLCBhbmQgdGhleSBhcmUgdGhlcmVmb3JlIGFsc28gKm5vdCogaW5saW5lZCBhbmQgcG9zc2VzcyBkaXN0aW5jdCBzeW1ib2xzLgoKVGhlcmVmb3JlLCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhpcyBndWlkZWxpbmUuIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI4IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05CRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25iZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9jb25uZWN0JiMzNDssCiAgICAmIzM0O25iZF9nZW5sX3JlY29uZmlndXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxLX0RFVl9OQkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYmRfaW9jdGwmIzM0OywKICAgICYjMzQ7bmJkX2dlbmxfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtuYmRfZ2VubF9yZWNvbmZpZ3VyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2l6ZSB1cGRhdGUgbG9naWMgZm9yIE5ldHdvcmsgQmxvY2sgRGV2aWNlcyAoTkJEKS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBOQkQgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCwgcmVjb25maWd1cmUpIGFuZCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyMy4zOTExNzk2NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc0NDkxNjEzMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyMy4zOTExODg0MzRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTg4MTQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZkNjQzN2UxZTJjOTIzZWQyNGVlOTE4ZTU1YjE0N2QxMDA1ZWI0NzlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTI6MTk6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5pbmRleCBmZTYzZjNjNTVkMGQ5Ni4uNTY3YjAzMWVjNTA1OWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmNcXG5AQCAtMzMxLDYgKzMzMSwyNyBAQCBzdGF0aWMgdm9pZCBuYmRfbWFya19uc29ja19kZWFkKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHN0cnVjdCBuYmRfc29jayAqbnNvY2ssXFxuIFxcdG5zb2NrLVxcdTAwM2VzZW50ID0gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuK3tcXG4rXFx0c3RydWN0IG5iZF9jb25maWcgKmNvbmZpZyA9IG5iZC1cXHUwMDNlY29uZmlnO1xcbitcXG4rXFx0aWYgKG1heF9wYXJ0KVxcbitcXHRcXHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcXHUwMDI2bmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdGlmICghc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkobmJkLVxcdTAwM2VkaXNrLCBjb25maWctXFx1MDAzZWJ5dGVzaXplIFxcdTAwM2VcXHUwMDNlIDkpKVxcbitcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2bmJkX3RvX2RldihuYmQpLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmJkX3NpemVfc2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIGxvZmZfdCBieXRlc2l6ZSlcXG4re1xcbitcXHRpZiAoYnl0ZXNpemUgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VieXRlc2l6ZSA9IGJ5dGVzaXplO1xcbitcXHRpZiAobmJkLVxcdTAwM2VwaWQpXFxuK1xcdFxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG5AQCAtMzc1LDEwICszOTYsNyBAQCBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG4gXFxuLVxcdGlmIChtYXhfcGFydClcXG4tXFx0XFx0c2V0X2JpdChHRF9ORUVEX1BBUlRfU0NBTiwgXFx1MDAyNm5iZC1cXHUwMDNlZGlzay1cXHUwMDNlc3RhdGUpO1xcbi1cXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cXHUwMDNlZGlzaywgYnl0ZXNpemUgXFx1MDAzZVxcdTAwM2UgOSkpXFxuLVxcdFxcdGtvYmplY3RfdWV2ZW50KFxcdTAwMjZuYmRfdG9fZGV2KG5iZCktXFx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcXG4rXFx0bmJkX3NpemVfdXBkYXRlKG5iZCk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMDYyLDExICsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4gXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxcbiBcXHRcXHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKTtcXG4gXFxuLVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSlcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW05CRF9BVFRSX0JMT0NLX1NJWkVfQllURVNdKSB7XFxuIFxcdFxcdGJzaXplID0gbmxhX2dldF91NjQoaW5mby1cXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xcbitcXHRcXHRpZiAoIWJzaXplKVxcbitcXHRcXHRcXHRic2l6ZSA9IDF1IFxcdTAwM2NcXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xcbitcXHRcXHRpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcXG4tXFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzLCBic2l6ZSk7XFxuK1xcdGlmIChieXRlcyAhPSBjb25maWctXFx1MDAzZWJ5dGVzaXplIHx8IGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpIHtcXG4rXFx0XFx0aWYgKGJzaXplICE9IG5iZF9ibGtzaXplKGNvbmZpZykpXFxuK1xcdFxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBieXRlcywgYnNpemUpO1xcbitcXHRcXHRyZXR1cm4gbmJkX3NpemVfc2V0KG5iZCwgYnl0ZXMpO1xcbitcXHR9XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyNC4wNzIwMDgxMzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDY3NjgzMjQ3MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OQkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYmRfaW9jdGxcIixcbiAgICBcIm5iZF9nZW5sX2Nvbm5lY3RcIixcbiAgICBcIm5iZF9nZW5sX3JlY29uZmlndXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNpemUgdXBkYXRlIGxvZ2ljIGZvciBOZXR3b3JrIEJsb2NrIERldmljZXMgKE5CRCkuIFRoZSBtb2RpZmllZCBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgTkJEIG5ldGxpbmsgY29tbWFuZHMgKGNvbm5lY3QsIHJlY29uZmlndXJlKSBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2ZDY0MzdlMWUyYzkyM2VkMjRlZTkxOGU1NWIxNDdkMTAwNWViNDc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjggMTI6MTk6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuaW5kZXggZmU2M2YzYzU1ZDBkOTYuLjU2N2IwMzFlYzUwNTliIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuY1xuKysrIGIvZHJpdmVycy9ibG9jay9uYmQuY1xuQEAgLTMzMSw2ICszMzEsMjcgQEAgc3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxuIFx0bnNvY2stXHUwMDNlc2VudCA9IDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG5iZF9zaXplX3VwZGF0ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxuK3tcbitcdHN0cnVjdCBuYmRfY29uZmlnICpjb25maWcgPSBuYmQtXHUwMDNlY29uZmlnO1xuK1xuK1x0aWYgKG1heF9wYXJ0KVxuK1x0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4rXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cdTAwM2VkaXNrLCBjb25maWctXHUwMDNlYnl0ZXNpemUgXHUwMDNlXHUwMDNlIDkpKVxuK1x0XHRrb2JqZWN0X3VldmVudChcdTAwMjZuYmRfdG9fZGV2KG5iZCktXHUwMDNla29iaiwgS09CSl9DSEFOR0UpO1xuK31cbitcbitzdGF0aWMgaW50IG5iZF9zaXplX3NldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUpXG4re1xuK1x0aWYgKGJ5dGVzaXplIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdG5iZC1cdTAwM2Vjb25maWctXHUwMDNlYnl0ZXNpemUgPSBieXRlc2l6ZTtcbitcdGlmIChuYmQtXHUwMDNlcGlkKVxuK1x0XHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuIHtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuQEAgLTM3NSwxMCArMzk2LDcgQEAgc3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0aWYgKG1heF9wYXJ0KVxuLVx0XHRzZXRfYml0KEdEX05FRURfUEFSVF9TQ0FOLCBcdTAwMjZuYmQtXHUwMDNlZGlzay1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAoIXNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KG5iZC1cdTAwM2VkaXNrLCBieXRlc2l6ZSBcdTAwM2VcdTAwM2UgOSkpXG4tXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNm5iZF90b19kZXYobmJkKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4rXHRuYmRfc2l6ZV91cGRhdGUobmJkKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMDYyLDExICsyMDgwLDE5IEBAIHN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcbiBcdGlmIChpbmZvLVx1MDAzZWF0dHJzW05CRF9BVFRSX1NJWkVfQllURVNdKVxuIFx0XHRieXRlcyA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfU0laRV9CWVRFU10pO1xuIFxuLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pXG4rXHRpZiAoaW5mby1cdTAwM2VhdHRyc1tOQkRfQVRUUl9CTE9DS19TSVpFX0JZVEVTXSkge1xuIFx0XHRic2l6ZSA9IG5sYV9nZXRfdTY0KGluZm8tXHUwMDNlYXR0cnNbTkJEX0FUVFJfQkxPQ0tfU0laRV9CWVRFU10pO1xuK1x0XHRpZiAoIWJzaXplKVxuK1x0XHRcdGJzaXplID0gMXUgXHUwMDNjXHUwMDNjIE5CRF9ERUZfQkxLU0laRV9CSVRTO1xuK1x0XHRpZiAoYmxrX3ZhbGlkYXRlX2Jsb2NrX3NpemUoYnNpemUpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuIFxuLVx0aWYgKGJ5dGVzICE9IGNvbmZpZy1cdTAwM2VieXRlc2l6ZSB8fCBic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxuLVx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdGlmIChieXRlcyAhPSBjb25maWctXHUwMDNlYnl0ZXNpemUgfHwgYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSkge1xuK1x0XHRpZiAoYnNpemUgIT0gbmJkX2Jsa3NpemUoY29uZmlnKSlcbitcdFx0XHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcbitcdFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjI0LjA3MjAxMDA3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NjM0ODM2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQkQgU2l6ZSBVcGRhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgc2l6ZSB1cGRhdGUgbWVjaGFuaXNtIGZvciBOQkQgZGV2aWNlcyB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbmJkLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIHR3byBuZXcgZnVuY3Rpb25zOiBgbmJkX3NpemVfdXBkYXRlYCBhbmQgYG5iZF9zaXplX3NldGAuIEZyb20gd2hhdCBJIGdhdGhlciwgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleGlzdGluZyBgbmJkX3NldF9zaXplYCB0byBsZXZlcmFnZSBgbmJkX3NpemVfdXBkYXRlYC4gSXQgYWxzbyBpbXBhY3RzIGBuYmRfZ2VubF9zaXplX3NldGAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZWFsIGludGVyZXN0aW5nIGJpdHMgYXJlIGxpa2VseSBoYXBwZW5pbmcuXG5cbkkgc2VlIHRoYXQgYG5iZF9nZW5sX3NpemVfc2V0YCBub3cgaGFzIHNvbWUgZXh0cmEgdmFsaWRhdGlvbiBmb3IgYmxvY2sgc2l6ZS4gSXQncyBhbHNvIGhhbmRsaW5nIHNpemUgY2hhbmdlcyBpbiBhIG1vcmUgbnVhbmNlZCB3YXkuIFNwZWNpZmljYWxseSwgaWYgb25seSB0aGUgYGJ5dGVzaXplYCBvZiB0aGUgTkJEIGRldmljZSBpcyBiZWluZyBtb2RpZmllZCwgaXQgbm93IGNhbGxzIGBuYmRfc2l6ZV9zZXRgIGRpcmVjdGx5LCByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSBwb3RlbnRpYWxseSBoZWF2aWVyIGBuYmRfc2V0X3NpemVgIGZsb3cuIFRoaXMgbGlrZWx5IHJlZHVjZXMgc29tZSBvdmVyaGVhZCBpbiBjZXJ0YWluIHNjZW5hcmlvcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpdmUgZGlyZWN0bHkgaW50byBgbmJkX2dlbmxfc2l6ZV9zZXRgIGFuZCBgbmJkX3NldF9zaXplYCB3aXRoaW4gdGhlIGBkcml2ZXJzL2Jsb2NrL25iZC5jYCBmaWxlIGl0c2VsZi4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBhbmQgYWNjZXNzaWJsZSB2aWEgbmV0bGluayBjb21tYW5kcyB0byB0aGUgTkJEIGRldmljZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBicmFuY2hpbmcgbG9naWMgYW5kIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYmVuZWZpdHMvZHJhd2JhY2tzLiBJIHNob3VsZCBhbHNvIHRyYWNrIGRvd24gdGhlIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBOQkQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGNoYW5nZSBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3ODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOToyOC45MzU0OTU2NTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzQ4NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjI5LjAzMDEzNjA3MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODY1MzUzODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5ldHdvcmsgQmxvY2sgRGV2aWNlIFNpemUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYEJMS19ERVZfTkJEYC4gVGhhdCdzIG91ciBzdGFydGluZyBwb2ludC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBwbGF5ZXJzLCB0aGUgY29yZSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0dGluZyBvciB1cGRhdGluZyB0aGUgTkJEIHNpemUuIExldCdzIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci5cblxuT2theSwgSSd2ZSBnb3QgaXQuIEknbSBzZWVpbmcgdGhhdCBgbmJkX3NpemVfc2V0YCwgYG5iZF9zaXplX3VwZGF0ZWAsIGBuYmRfZ2VubF9zaXplX3NldGAsIGFuZCBgbmJkX3NldF9zaXplYCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGltbWVkaWF0ZWx5IHRlbGxpbmcuIFN0YXRpYyBtZWFucyB0aGV5J3JlIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQgb3IgZmlsZS4gVGhleSBhcmVuJ3QgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgZXhwb3NlZCBhcyBBUEkgZnVuY3Rpb25zLiBHb29kLiBOb3csIHdoYXQncyBjYWxsaW5nIHRoZW0/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBrbm93LiBMZXQncyBjaGVjayB0aGUgY2FsbGVycyBvZiBgbmJkX2dlbmxfc2l6ZV9zZXRgIGJlY2F1c2UsIGFzIHRoZSBnZW5lcmljIG5ldGxpbmsgY2FsbHMsIGl0cyB0aGUgb25lIGluIG15IG1pbmQgdGhhdCdzIG1vc3QgbGlrZWx5IHRvIGJlIHNldHRpbmcgdGhpcyBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDI3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzIuNjE2NjczNDc1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzM0NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9zaXplX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MjA2OT1uYmRfZGV2aWNlX3BvbGljeVtOQkRfREVWSUNFX0FUVFJfTUFYICsgMV0gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMDc0OnN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwNzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMDk5PXN0YXRpYyBpbnQgbmJkX2dlbmxfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTc3LVxcdHNldF9iaXQoTkJEX1JUX0JPVU5ELCBcXHUwMDI2Y29uZmlnLVxcdTAwM2VydW50aW1lX2ZsYWdzKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIxNzg6XFx0cmV0ID0gbmJkX2dlbmxfc2l6ZV9zZXQoaW5mbywgbmJkKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIxNzktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjMzNj1zdGF0aWMgaW50IG5iZF9nZW5sX3JlY29uZmlndXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIzOTgtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyMzk5OlxcdHJldCA9IG5iZF9nZW5sX3NpemVfc2V0KGluZm8sIG5iZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDAwLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjMyLjczNDAyNTgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNDYwODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBjb2RlIHNuaXBwZXQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYG5iZF9nZW5sX3NpemVfc2V0YCBpcyBjbGVhcmx5IGFuIGltcG9ydGFudCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEZyb20gdGhlIHNuaXBwZXQsIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgYnkgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLiAgQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGV5IGFyZSBpbnRlcm5hbCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LiBUaGF0IG1lYW5zIHRoZXkgYXJlIGxpa2VseSBzcGVjaWZpYyB0byB0aGUgbW9kdWxlIG9yIGNvbXBvbmVudCB3aGVyZSBgbmJkX2dlbmxfc2l6ZV9zZXRgIHJlc2lkZXMuIEl0IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvciBzZXR1cCBkdXJpbmcgY29ubmVjdCBhbmQgcmVjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gaG93IHRob3NlIGBzdGF0aWNgIGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIgYW5kIHdoZXJlIHRoZSBjYWxsIHN0YWNrIG9yaWdpbmF0ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdpbGwgcHJvYmFibHkgZ2l2ZSBtZSB0aGUgYmVzdCBpbnNpZ2h0IGludG8gdGhlIG92ZXJhbGwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjM1LjkzODYzNjU0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODQ1NjkxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0yMDc0PXN0YXRpYyBpbnQgbmJkX2dlbmxfc2l6ZV9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5iZF9kZXZpY2UgKm5iZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjA5OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjIwOTk6c3RhdGljIGludCBuYmRfZ2VubF9jb25uZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMTAwLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjQ3NT1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5iZF9jb25uZWN0X2dlbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0NzgtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ3OTpcXHRcXHQuZG9pdFxcdD0gbmJkX2dlbmxfY29ubmVjdCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI0ODAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzYuMDM3MDk3NDM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMTY1NDIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBOZXRsaW5rIE9wZXJhdGlvbnMgaW4gdGhlIENvbnRleHQgb2YgYG5iZF9nZW5sYCoqXG5cbkFscmlnaHQsIEknbSBmb2N1c2luZyBvbiB0aGUgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhleSBhcmUgdGhlIE5ldGxpbmsgb3BlcmF0aW9ucyBoZXJlLiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZXkncmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoaXMgaGFzIGFuIGltbWVkaWF0ZSBpbXBsaWNhdGlvbjogdGhleSB3b24ndCBiZSBleHBvcnRlZCBhcyBzeW1ib2xzLiBUaGF0IGxpbWl0cyB0aGVpciBkaXJlY3QgZXh0ZXJuYWwgYWNjZXNzLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBmb3IgbWUgaXMgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBtb2R1bGUgdGhhdCBtaWdodCBpbnRlcmFjdCB3aXRoLCBvciBjYWxsLCB0aGVzZSBgc3RhdGljYCBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgcmVsYXRpb25zaGlwcyBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIG9wZXJhdGlvbnMgYXJlIGFjdHVhbGx5IHVzZWQgYW5kIG9yY2hlc3RyYXRlZCB3aXRoaW4gdGhlIE5ldGxpbmsgZnJhbWV3b3JrIG9mIHRoaXMgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6MzkuMjY4NzU0MzUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQ4NzgzNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5iZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmM9MTYwMT1zdGF0aWMgdm9pZCBuYmRfc2V0X2NtZF90aW1lb3V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHU2NCB0aW1lb3V0KVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggY29uZmlnX2xvY2sgaGVsZCAqL1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTYxMTpzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjEyLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1Ny1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2NTg6c3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYmxrX21vZGVfdCBtb2RlLFxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTY1OS1cXHRcXHQgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgwLVxcdCAgICAoY21kID09IE5CRF9ESVNDT05ORUNUIHx8IGNtZCA9PSBOQkRfQ0xFQVJfU09DSykpXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjgxOlxcdFxcdGVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbmJkLCBjbWQsIGFyZyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjgyLVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTc4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTc4OS1cXHQucmVsZWFzZSA9XFx0bmJkX3JlbGVhc2UsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkwOlxcdC5pb2N0bCA9XFx0bmJkX2lvY3RsLFxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTc5MTpcXHQuY29tcGF0X2lvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzkyLVxcdC5mcmVlX2Rpc2sgPVxcdG5iZF9mcmVlX2Rpc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjQxLjIxNzU0MzI5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDIwNDY2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5CRCBEcml2ZXIgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGBuYmRfaW9jdGxgIGZ1bmN0aW9uLCBpdCdzIGFsc28gZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBOb3csIGBuYmRfZ2VubF9jb25uZWN0YCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgKmFsc28qIHN0YXRpYywgd2hpY2ggc2VlbXMgYSBiaXQgY291bnRlcmludHVpdGl2ZSBzaW5jZSB0aGV5IGFwcGVhciB0byBiZSBlbnRyeSBwb2ludHMuIEJ1dCBpZiB0aGVyZSBhcmUgKm5vKiBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlbiB1c2luZyB0aGVzZSBzdGF0aWMgZW50cnkgcG9pbnRzLCBuYW1lbHkgYG5iZF9nZW5sX2Nvbm5lY3RgLCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBhbmQgYG5iZF9pb2N0bGAsIG1pZ2h0IGJlIG15IG9ubHkgb3B0aW9uLlxuXG5XYWl0IGEgbWludXRlLCB3YXNuJ3QgdGhlcmUgc29tZXRoaW5nIGFib3V0IFN5emthbGxlciBhbmQgc3RhdGljIGZ1bmN0aW9ucz8gT2gsIHJpZ2h0LCBpdCBjYW4gZm9jdXMgb24gc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGluIHRoZSBkZWJ1ZyBpbmZvLiBCdXQgdGhlIGd1aWRhbmNlIGlzIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIE9rYXksIGJ1dC4uLiBgbmJkX2dlbmxfY29ubmVjdGAgYW5kIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAgYXJlbid0IGlubGluZWQgYmVjYXVzZSB0aGV5J3JlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB0byBgLmRvaXRgLiBUaGF0IG1lYW5zIHRoZXkncmUgZmluZSB0byB1c2UgYXMgZm9jdXMgc3ltYm9scyEgUGVyZmVjdC4gVGhleSdyZSBiYXNpY2FsbHkgZXF1aXZhbGVudCB0byBub24tc3RhdGljIGVudHJ5IHBvaW50cyBpbiB0aGlzIGNhc2UuXG5cbkFscmlnaHQsIGJlZm9yZSBJIGZpbmFsaXplIHRoaXMsIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrLiBJJ2xsIHRha2UgYSBxdWljayBzY2FuIHRocm91Z2ggYGRyaXZlcnMvYmxvY2svbmJkLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIEkndmUgbWlzc2VkLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBraW5kIG9mIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxNSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo0Ni42MTk1OTM4OThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjgyNDE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoW15cXFxcKV0qXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL25iZC5jPTE3OTc9c3RhdGljIGludCBuYmRfZGJnX3Rhc2tzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MDYtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxODA3OkRFRklORV9TSE9XX0FUVFJJQlVURShuYmRfZGJnX3Rhc2tzKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE4MDgtXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xODA5PXN0YXRpYyBpbnQgbmJkX2RiZ19mbGFnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODM1LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTgzNjpERUZJTkVfU0hPV19BVFRSSUJVVEUobmJkX2RiZ19mbGFncyk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xODM3LVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yNTAyPXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgbmJkX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNS19O1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjUxNjpNT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoTkJEX0dFTkxfRkFNSUxZX05BTUUpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjUxNy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MjczND1zdGF0aWMgdm9pZCBfX2V4aXQgbmJkX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjc2OC1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Njk6bW9kdWxlX2luaXQobmJkX2luaXQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MDptb2R1bGVfZXhpdChuYmRfY2xlYW51cCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNzcxLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mjc3MjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk5ldHdvcmsgQmxvY2sgRGV2aWNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzczOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTI3NzQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc1Om1vZHVsZV9wYXJhbShuYmRzX21heCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3NzY6TU9EVUxFX1BBUk1fREVTQyhuYmRzX21heCwgXFxcIm51bWJlciBvZiBuZXR3b3JrIGJsb2NrIGRldmljZXMgdG8gaW5pdGlhbGl6ZSAoZGVmYXVsdDogMTYpXFxcIik7XFxuZHJpdmVycy9ibG9jay9uYmQuYzoyNzc3Om1vZHVsZV9wYXJhbShtYXhfcGFydCwgaW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI3Nzg6TU9EVUxFX1BBUk1fREVTQyhtYXhfcGFydCwgXFxcIm51bWJlciBvZiBwYXJ0aXRpb25zIHBlciBkZXZpY2UgKGRlZmF1bHQ6IDE2KVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo0Ni43MzY0MjI1NzRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0MzgyMzQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipSZWdleCBPdmVyc2lnaHQgYW5kIFJlZmluZW1lbnQqKlxuXG5VZ2gsIEkgbWVzc2VkIHVwIHRoYXQgcmVnZXguIFRoYXQncyBmcnVzdHJhdGluZy4gT2theSwgZm9yZ2V0IHRoZSBvcmlnaW5hbCBhcHByb2FjaC4gSSdsbCBqdXN0IGZvY3VzIG9uIHRoZSBjb3JlIGNhbGxzOiBgbmJkX2dlbmxfY29ubmVjdGAsIGBuYmRfZ2VubF9yZWNvbmZpZ3VyZWAsIGFuZCBgbmJkX2lvY3RsYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSByZWxldmFudCBmdW5jdGlvbnMuIEJ1dCBoYW5nIG9uLCBkaWRuJ3QgSSBzZWUgYG5iZF9zZXRfc2l6ZWAgaW4gdGhlIGBfX25iZF9pb2N0bGAgY29kZSBwYXRoIGFzIHdlbGw/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQgY2FsbCBjaGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjYyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjQ5LjY4MDI0ODU5MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTkzNjY2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NldF9zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTQtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozNTU6c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM1Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTE0ODk9c3RhdGljIGludCBuYmRfc3RhcnRfZGV2aWNlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE1NTctXFx0fVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTU1ODpcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgY29uZmlnLVxcdTAwM2VieXRlc2l6ZSwgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNTU5LX1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM9MTYxMT1zdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MjUtXFx0Y2FzZSBOQkRfU0VUX0JMS1NJWkU6XFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjI2OlxcdFxcdHJldHVybiBuYmRfc2V0X3NpemUobmJkLCBjb25maWctXFx1MDAzZWJ5dGVzaXplLCBhcmcpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYyNy1cXHRjYXNlIE5CRF9TRVRfU0laRTpcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2Mjg6XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGFyZywgbmJkX2Jsa3NpemUoY29uZmlnKSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjI5LVxcdGNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTYzMS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2MzI6XFx0XFx0cmV0dXJuIG5iZF9zZXRfc2l6ZShuYmQsIGJ5dGVzaXplLCBuYmRfYmxrc2l6ZShjb25maWcpKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MzMtXFx0Y2FzZSBOQkRfU0VUX1RJTUVPVVQ6XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIwNzQ9c3RhdGljIGludCBuYmRfZ2VubF9zaXplX3NldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmJkX2RldmljZSAqbmJkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0yMDkyLVxcdFxcdGlmIChic2l6ZSAhPSBuYmRfYmxrc2l6ZShjb25maWcpKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjA5MzpcXHRcXHRcXHRyZXR1cm4gbmJkX3NldF9zaXplKG5iZCwgYnl0ZXMsIGJzaXplKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTIwOTQtXFx0XFx0cmV0dXJuIG5iZF9zaXplX3NldChuYmQsIGJ5dGVzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NDkuNzc5NjM2Nzk4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzY2NjkxNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gTkJEIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBjb25maXJtaW5nIHRoYXQgYF9fbmJkX2lvY3RsYCBkZWZpbml0ZWx5IGNhbGxzIGBuYmRfc2V0X3NpemVgLiBUaGF0J3MgYSBzb2xpZCBjb25uZWN0aW9uIHJpZ2h0IHRoZXJlLiBTbywgYG5iZF9pb2N0bGAgaXRzZWxmIGlzIGEgcmVhbGx5IGdvb2QgZm9jYWwgcG9pbnQgZm9yIHRoaXMuIEknbSBhbHNvIHJlbWVtYmVyaW5nIHRoYXQgYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIGFyZSBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG9vIC0gdGhvc2UgYXJlIGNsZWFybHkgcmVsYXRlZCB0byBzZXR1cCBhbmQgcmVjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgcmVnYXJkaW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZS4gVGltZSB0byBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayBmb3Igb3RoZXIgY29uZmlnIG9wdGlvbnMuIEFoLCB5ZXMsIHRoZSBtYWluIG9uZSwgb2J2aW91c2x5LCBpcyBgQkxLX0RFVl9OQkRgLiBCdXQgd2FpdOKApiBgQkxLX0RFVl9OQkRgIGRlcGVuZHMgb24gYEJMT0NLYC4gUmlnaHQsIGxldCdzIGdvIHN0cmFpZ2h0IHRvIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgIGFuZCB2ZXJpZnkgdGhhdCBkZXBlbmRlbmN5IGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudC4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1MDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NTMuOTE2MzA4NDU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU5MjY1MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTkJEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTk0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9kcmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTk2OmNvbmZpZyBCTEtfREVWX05CRFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIk5ldHdvcmsgYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI4VDEyOjE5OjU0LjAzMjI0MDY1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQwODk2MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEJsb2NrIERyaXZlcnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgY2VydGFpbiBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZC4gTXkgbWVudGFsIGNoZWNrbGlzdCBzYXlzLCBcIldoZXJlIHdvdWxkIEkgZmluZCB0aGUgKmNvcmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYmxvY2sgZHJpdmVycz9cIiBNeSBleHBlcmllbmNlIGltbWVkaWF0ZWx5IHN0ZWVycyBtZSB0b3dhcmRzIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIHdoaWNoIGhhbmRsZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gY2hvaWNlcyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBzdGFuZGFyZCBkcml2ZXJzIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQgYGRyaXZlcnMvYmxvY2svYCBpcyBhIGxpa2VseSBzcG90IGFuZCB0aGUgS2NvbmZpZyB0aGVyZSB3aWxsIGNvbnRhaW4gd2hhdCBJIG5lZWQuIExldCBtZSBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBhbmQgem9vbSBpbiBhcm91bmQgbGluZSAxOTY7IHRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZXhwbG9yZS4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgc29tZXRoaW5nIHJlbGV2YW50IHRvIHdoYXQgSSdtIGxvb2tpbmcgYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoxOTo1Ny4zNzMxNDA2NzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTA6XFx0XFx0ICBUaGUgaGlzdG9yaWMgZGVmYXVsdCBpcyA4LiBJZiBhIGxhdGUgMjAxMSB2ZXJzaW9uIG9mIGxvc2V0dXAoOClcXG4gMTkxOlxcdFxcdCAgaXMgdXNlZCwgaXQgY2FuIGJlIHNldCB0byAwLCBzaW5jZSBuZWVkZWQgbG9vcCBkZXZpY2VzIGNhbiBiZVxcbiAxOTI6XFx0XFx0ICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCB0aGUgL2Rldi9sb29wLWNvbnRyb2wgaW50ZXJmYWNlLlxcbiAxOTM6XFx0XFxuIDE5NDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svZHJiZC9LY29uZmlnXFxcIlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRjb25maWcgQkxLX0RFVl9OQkRcXG4gMTk3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXR3b3JrIGJsb2NrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxOTg6XFx0XFx0ZGVwZW5kcyBvbiBORVRcXG4gMTk5OlxcdFxcdGhlbHBcXG4gMjAwOlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdXIgY29tcHV0ZXIgdG8gYmUgYSBjbGllbnQgZm9yIG5ldHdvcmtcXG4gMjAxOlxcdFxcdCAgYmxvY2sgZGV2aWNlcywgaS5lLiBpdCB3aWxsIGJlIGFibGUgdG8gdXNlIGJsb2NrIGRldmljZXMgZXhwb3J0ZWQgYnlcXG4gMjAyOlxcdFxcdCAgc2VydmVycyAobW91bnQgZmlsZSBzeXN0ZW1zIG9uIHRoZW0gZXRjLikuIENvbW11bmljYXRpb24gYmV0d2VlblxcbiAyMDM6XFx0XFx0ICBjbGllbnQgYW5kIHNlcnZlciB3b3JrcyBvdmVyIFRDUC9JUCBuZXR3b3JraW5nLCBidXQgdG8gdGhlIGNsaWVudFxcbiAyMDQ6XFx0XFx0ICBwcm9ncmFtIHRoaXMgaXMgaGlkZGVuOiBpdCBsb29rcyBsaWtlIGEgcmVndWxhciBsb2NhbCBmaWxlIGFjY2VzcyB0b1xcbiAyMDU6XFx0XFx0ICBhIGJsb2NrIGRldmljZSBzcGVjaWFsIGZpbGUgc3VjaCBhcyAvZGV2L25kMC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0XFx0ICBOZXR3b3JrIGJsb2NrIGRldmljZXMgYWxzbyBhbGxvd3MgeW91IHRvIHJ1biBhIGJsb2NrLWRldmljZSBpblxcbiAyMDg6XFx0XFx0ICB1c2VybGFuZCAobWFraW5nIHNlcnZlciBhbmQgY2xpZW50IHBoeXNpY2FsbHkgdGhlIHNhbWUgY29tcHV0ZXIsXFxuIDIwOTpcXHRcXHQgIGNvbW11bmljYXRpbmcgdXNpbmcgdGhlIGxvb3BiYWNrIG5ldHdvcmsgZGV2aWNlKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MTk6NTcuMzczMjY2NzY2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MzcxMTg4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkJEIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCdzIGZ1enphYmlsaXR5IGhpbmdlcyBvbiBgTkVUYCwgYnV0IHNwZWNpZmljYWxseSwgdGhlIGBCTEtfREVWX05CRGAgY29uZmlnIGlzIHRoZSBvbmx5IHByZXJlcXVpc2l0ZS4gTGV0J3MgZGlzdGlsbCB0aGlzOlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBmdXp6YWJsZS4gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuIFdlJ3JlIHRhcmdldGluZyBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYC4gIFRoZSBlbmFibGluZyBjb25maWcgaXMgYEJMS19ERVZfTkJEYC4gTXkgcmVhc29uaW5nPyBUaGlzIHBhdGNoIGlzIHR3ZWFraW5nIGhvdyBuZXR3b3JrIGJsb2NrIGRldmljZSAoTkJEKSBzaXplcyBhcmUgdXBkYXRlZC4gVGhlIG5ldyBjb2RlIGlzIHRyaWdnZXJlZCBieSB0aG9zZSBOQkQtc3BlY2lmaWMgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCBhbmQgcmVjb25maWd1cmUpIGFuZCB0aGUgcmVsZXZhbnQgaW9jdGxzLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBwYXRjaCBhbHNvIG1lc3NlcyB3aXRoIGBuYmRfc2l6ZV91cGRhdGVgLiBJIHNob3VsZCB0YWtlIGEgbW9tZW50IGFuZCBjb25maXJtIHRoYXQgYG5iZF9zaXplX3VwZGF0ZWAgaXNuJ3QgY2FsbGVkIGZyb20gKm90aGVyKiBwbGFjZXMgYXMgd2VsbC4gR290IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjA6MDIuMDEwMzkwNDk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2OTY0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX3NpemVfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0zMDU9c3RhdGljIHZvaWQgbmJkX21hcmtfbnNvY2tfZGVhZChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBzdHJ1Y3QgbmJkX3NvY2sgKm5zb2NrLFxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzMtXFxuZHJpdmVycy9ibG9jay9uYmQuYzozMzQ6c3RhdGljIHZvaWQgbmJkX3NpemVfdXBkYXRlKHN0cnVjdCBuYmRfZGV2aWNlICpuYmQpXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zMzUte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNDQ9c3RhdGljIGludCBuYmRfc2l6ZV9zZXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTAtXFx0aWYgKG5iZC1cXHUwMDNlcGlkKVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzUxOlxcdFxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUyLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zNTU9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzk4LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzk5OlxcdG5iZF9zaXplX3VwZGF0ZShuYmQpO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtNDAwLVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoyMDowMi4xMjUwOTEzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzc3NDcwOTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBhc3Nlc3NtZW50OlxuXG4qKkZvY3VzaW5nIE15IEludmVzdGlnYXRpb24qKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZmFyIGFzIEkgY2FuIHNlZSBmcm9tIHRoaXMgcXVpY2sgcmV2aWV3LCB0aG9zZSBzaXplLXNldHRpbmcgZnVuY3Rpb25zLCBgbmJkX3NpemVfc2V0YCBhbmQgYG5iZF9zZXRfc2l6ZWAsIGFyZSB0aGUgb25seSBwb2ludHMgb2YgY2FsbCBoZXJlLiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbSBjb25maWRlbnQgdGhhdCBpZiBJIGZvY3VzIG15IGFuYWx5c2lzIG9uIGBuYmRfaW9jdGxgLCBgbmJkX2dlbmxfY29ubmVjdGAsIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgLCBJJ2xsIGJlIGNvdmVyaW5nIHRoZSBjcnVjaWFsIGFyZWFzLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIGRpc3NlY3QgZm9yIHRoaXMuXG5cbk5vdywgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBuYmRfaW9jdGxgIGlzLCBpbiBmYWN0LCBzdGF0aWMuICpZZXMqLCBpdCBhcHBlYXJzIHRvIGJlIGRlY2xhcmVkIHN0YXRpY2FsbHkuIEhtbS4uLiB3YWl0IGEgc2Vjb25kLi4uIGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIG15IGFzc3VtcHRpb24gaGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzE2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjE6MDUuODk5ODA0Njk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3NjU2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmJkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbmJkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9uYmQuYz0xNjAxPXN0YXRpYyB2b2lkIG5iZF9zZXRfY21kX3RpbWVvdXQoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgdTY0IHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBjb25maWdfbG9jayBoZWxkICovXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNjExOnN0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKm5iZCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2MTItXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU3LVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MTY1ODpzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNjU5LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODAtXFx0ICAgIChjbWQgPT0gTkJEX0RJU0NPTk5FQ1QgfHwgY21kID09IE5CRF9DTEVBUl9TT0NLKSlcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE2ODE6XFx0XFx0ZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBuYmQsIGNtZCwgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE2ODItXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0xNzg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0xNzg5LVxcdC5yZWxlYXNlID1cXHRuYmRfcmVsZWFzZSxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjE3OTA6XFx0LmlvY3RsID1cXHRuYmRfaW9jdGwsXFxuZHJpdmVycy9ibG9jay9uYmQuYzoxNzkxOlxcdC5jb21wYXRfaW9jdGwgPVxcdG5iZF9pb2N0bCxcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTE3OTItXFx0LmZyZWVfZGlzayA9XFx0bmJkX2ZyZWVfZGlzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjhUMTI6MjE6MDYuMDAyNTc2MTQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDY1NTE1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQ6XG5cbioqQW5hbHl6aW5nIEFQSSBFbnRyeXBvaW50cyBhbmQgU3RhdGljIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHRoZSBwcm9tcHQgaXMgdGhyb3dpbmcgYSBjdXJ2ZWJhbGwgYWJvdXQgc3RhdGljIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IG9mIGBuYmRfaW9jdGxgIGJlaW5nIHN0YXRpYyBpcyBjb3JyZWN0LCBidXQgdGhlbiBJIG5lZWQgdG8gc3RvcCBhbmQgY2FyZWZ1bGx5IGNvbnNpZGVyIHRoZSBndWlkZWxpbmVzLiBUaGUgcHJvbXB0IHdhbnRzIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIExldCdzIGJyZWFrIHRoaXMgZG93biBmdXJ0aGVyLlxuXG5gbmJkX2lvY3RsYCBpcyAqbm90KiBpbmxpbmVkLCBiZWNhdXNlIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gdGhlIGBibG9ja19kZXZpY2Vfb3BlcmF0aW9uc2Agc3RydWN0LiBGdW5jdGlvbiBwb2ludGVycywgYnkgdGhlaXIgdmVyeSBuYXR1cmUsIG1haW50YWluIGEgZGlzdGluY3QgYWRkcmVzcyBpbiB0aGUgc3ltYm9sIHRhYmxlLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGNsZWFyLCBub24taW5saW5lZCBzeW1ib2wuIFRoZSBzYW1lIGFwcGxpZXMgdG8gYG5iZF9nZW5sX2Nvbm5lY3RgIGFuZCBgbmJkX2dlbmxfcmVjb25maWd1cmVgIOKAkyB0aGVzZSBhcmUgYWxzbyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGdlbmxfc21hbGxfb3BzYCwgYW5kIHRoZXkgYXJlIHRoZXJlZm9yZSBhbHNvICpub3QqIGlubGluZWQgYW5kIHBvc3Nlc3MgZGlzdGluY3Qgc3ltYm9scy5cblxuVGhlcmVmb3JlLCBgbmJkX2lvY3RsYCwgYG5iZF9nZW5sX2Nvbm5lY3RgLCBhbmQgYG5iZF9nZW5sX3JlY29uZmlndXJlYCBhcmUgcGVyZmVjdGx5IGFjY2VwdGFibGUgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhpcyBndWlkZWxpbmUuIEkgY2FuIG5vdyBjb25maWRlbnRseSBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAwLCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yOFQxMjoyMToxMC43MDkxMzA2NTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzExOTk2NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTkJEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmJkX2lvY3RsXCIsXG4gICAgXCJuYmRfZ2VubF9jb25uZWN0XCIsXG4gICAgXCJuYmRfZ2VubF9yZWNvbmZpZ3VyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzaXplIHVwZGF0ZSBsb2dpYyBmb3IgTmV0d29yayBCbG9jayBEZXZpY2VzIChOQkQpLiBUaGUgbW9kaWZpZWQgY29kZSBpcyByZWFjaGFibGUgdmlhIE5CRCBuZXRsaW5rIGNvbW1hbmRzIChjb25uZWN0LCByZWNvbmZpZ3VyZSkgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05CRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5iZF9pb2N0bFwiLFxuICAgIFwibmJkX2dlbmxfY29ubmVjdFwiLFxuICAgIFwibmJkX2dlbmxfcmVjb25maWd1cmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2l6ZSB1cGRhdGUgbG9naWMgZm9yIE5ldHdvcmsgQmxvY2sgRGV2aWNlcyAoTkJEKS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBOQkQgbmV0bGluayBjb21tYW5kcyAoY29ubmVjdCwgcmVjb25maWd1cmUpIGFuZCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[1] Phase: Succeeded StartedAt: 2026-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 12:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 12:21:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2] Phase: Succeeded StartedAt: 2026-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 12:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:22 +0000 UTC FinishedAt: 2026-07-28 12:21:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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-workflowxq5qd/series-workflowxq5qd-convert-artifact-844972359/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:32 +0000 UTC FinishedAt: 2026-07-28 12:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:32 +0000 UTC FinishedAt: 2026-07-28 12:47:24 +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:*d753c795-6ad0-429f-9074-be6d6becbb0f,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-workflowxq5qd/series-workflowxq5qd-convert-artifact-844972359/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": "46e7345c-5d67-436e-b103-ddb7a5ae95d0", "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-workflowxq5qd/series-workflowxq5qd-build-action-34097629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:21:32 +0000 UTC FinishedAt: 2026-07-28 12:47:14 +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:*d753c795-6ad0-429f-9074-be6d6becbb0f,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-workflowxq5qd/series-workflowxq5qd-convert-artifact-844972359/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": "46e7345c-5d67-436e-b103-ddb7a5ae95d0", "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-workflowxq5qd/series-workflowxq5qd-build-action-34097629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:24 +0000 UTC FinishedAt: 2026-07-28 12:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:24 +0000 UTC FinishedAt: 2026-07-28 12:47:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:24 +0000 UTC FinishedAt: 2026-07-28 12:47:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:24 +0000 UTC FinishedAt: 2026-07-28 12:47:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-workflowxq5qd/series-workflowxq5qd-convert-artifact-146808182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:34 +0000 UTC FinishedAt: 2026-07-28 12:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:47:34 +0000 UTC FinishedAt: 2026-07-28 12:49:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e7345c-5d67-436e-b103-ddb7a5ae95d0,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-workflowxq5qd/series-workflowxq5qd-build-action-34097629/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-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:49:35 +0000 UTC FinishedAt: 2026-07-28 12:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:49:35 +0000 UTC FinishedAt: 2026-07-28 12:49:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:49:35 +0000 UTC FinishedAt: 2026-07-28 13:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:49:35 +0000 UTC FinishedAt: 2026-07-28 13:38:14 +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:*d753c795-6ad0-429f-9074-be6d6becbb0f,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-workflowxq5qd/series-workflowxq5qd-convert-artifact-146808182/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": "907b3d2e-1557-40f7-9890-97a036b31a0d", "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-workflowxq5qd/series-workflowxq5qd-build-action-1632715898/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 12:49:35 +0000 UTC FinishedAt: 2026-07-28 13:37:43 +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:*d753c795-6ad0-429f-9074-be6d6becbb0f,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-workflowxq5qd/series-workflowxq5qd-convert-artifact-146808182/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": "907b3d2e-1557-40f7-9890-97a036b31a0d", "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-workflowxq5qd/series-workflowxq5qd-build-action-1632715898/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:38:14 +0000 UTC FinishedAt: 2026-07-28 13:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:38:14 +0000 UTC FinishedAt: 2026-07-28 13:38:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:38:14 +0000 UTC FinishedAt: 2026-07-28 13:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:38:14 +0000 UTC FinishedAt: 2026-07-28 13:40:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*907b3d2e-1557-40f7-9890-97a036b31a0d,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-workflowxq5qd/series-workflowxq5qd-build-action-1632715898/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-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +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"],"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:*46e7345c-5d67-436e-b103-ddb7a5ae95d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*907b3d2e-1557-40f7-9890-97a036b31a0d,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-workflowxq5qd/series-workflowxq5qd-build-action-34097629/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-workflowxq5qd/series-workflowxq5qd-build-action-1632715898/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 13:40:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 13:40:25 +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"],"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-workflowxq5qd/series-workflowxq5qd-convert-artifact-1482995611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 13:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 13:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:15 +0000 UTC FinishedAt: 2026-07-28 13:40:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:35 +0000 UTC FinishedAt: 2026-07-28 16:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxq5qd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","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"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NBD"],"series_id":"772cfe86-dd6d-4c81-98a0-2d301ef357e4","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-07-28 13:40:35 +0000 UTC FinishedAt: 2026-07-28 16:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46e7345c-5d67-436e-b103-ddb7a5ae95d0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*907b3d2e-1557-40f7-9890-97a036b31a0d,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-workflowxq5qd/series-workflowxq5qd-build-action-34097629/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-workflowxq5qd/series-workflowxq5qd-build-action-1632715898/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-workflowxq5qd/series-workflowxq5qd-convert-artifact-1482995611/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,}