Name: series-workflowk4p4h Phase: Succeeded StartedAt: 2026-09-04 13:23:19 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[0] Phase: Succeeded StartedAt: 2026-09-04 13:23:19 +0000 UTC FinishedAt: 2026-09-04 13:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 13:23:19 +0000 UTC FinishedAt: 2026-09-04 13:28:08 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_RFCOMM", "BT_RFCOMM_TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_RFCOMM", "BT_RFCOMM_TTY" ], "series_id": "1d9309f6-c32f-4a74-9df8-593b0f6b7e19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hci_conn_init_sysfs", "hci_conn_del_sysfs", "bt_link_release", "__match_tty" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTSYjMzQ7LAogICAgJiMzNDtCVF9SRkNPTU1fVFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGNpX2Nvbm5faW5pdF9zeXNmcyYjMzQ7LAogICAgJiMzNDtoY2lfY29ubl9kZWxfc3lzZnMmIzM0OywKICAgICYjMzQ7YnRfbGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O19fbWF0Y2hfdHR5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjaGlsZCBkZXZpY2UgZmlsdGVyaW5nIGR1cmluZyBCbHVldG9vdGggSENJIGNvbm5lY3Rpb24gc3lzZnMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIGluIG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGhlYXZpbHkgZXhlcmNpc2VkIHZpYSBCbHVldG9vdGggSENJL1JGQ09NTSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBzeXNmcyBoaWVyYXJjaHkgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNkMWNhZGVhNjllMmE0ZDM0OGY3Mjk1ZDc2Njc0YWIwMWNkMGExOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6Mjc6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyAmIzQzOzEzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7XG4gc3RhdGljIHZvaWQgYnRfbGlua19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSB0b19oY2lfY29ubihkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VwYXJlbnQ7XG4mIzQzO1xuIFx0a2ZyZWUoY29ubik7XG4mIzQzO1x0cHV0X2RldmljZShwYXJlbnQpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG5AQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbiBcdC5yZWxlYXNlID0gYnRfbGlua19yZWxlYXNlLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ublxuJiM0MzsgKiBpcyBkb3duLCBhbmQgc3lzZnMgZG9lc24mIzM5O3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4mIzQzOyAqIHNvIHdlIHNob3VsZCBtb3ZlIHRoZSBkZXZpY2UgYmVmb3JlIGNvbm4gZGV2aWNlIGlzIGRlc3Ryb3llZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICFzdHJuY21wKGRldl9uYW1lKGRldiksIFwmIzM0O3JmY29tbVwmIzM0OywgNik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxuIFxuIFx0Y29ubi1cdTAwM2VkZXYudHlwZSA9IFx1MDAyNmJ0X2xpbms7XG4gXHRjb25uLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmJ0X2NsYXNzO1xuLVx0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gXHUwMDI2aGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldik7XG4gXG4gXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gfVxuQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGRldiA9IGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XG4gXHRcdGlmICghZGV2KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xMyw3ICYjNDM7MTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHsKIHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LSZndDtwYXJlbnQ7CiYjNDM7CiAJa2ZyZWUoY29ubik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0gewpAQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHsKIAkucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ubgomIzQzOyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSwKJiM0MzsgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgJiMzNDtyZmNvbW0mIzM0OywgNik7CiYjNDM7fQomIzQzOwogdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tJmd0O2hkZXY7CkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKQogCiAJY29ubi0mZ3Q7ZGV2LnR5cGUgPSAmYW1wO2J0X2xpbms7CiAJY29ubi0mZ3Q7ZGV2LmNsYXNzID0gJmFtcDtidF9jbGFzczsKLQljb25uLSZndDtkZXYucGFyZW50ID0gJmFtcDtoZGV2LSZndDtkZXY7CiYjNDM7CWNvbm4tJmd0O2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZhbXA7aGRldi0mZ3Q7ZGV2KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKIH0KQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQkJZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKJiM0MzsJCWRldiA9IGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmx1ZXRvb3RoIEhDSSBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzIGNvbnNpZGVyYWJseS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCBgbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuY2AgaXRzZWxmLiBJIHdpbGwgbmVlZCB0byBjaGVjayBhbmQgdGhpbmsgYWJvdXQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNlcnRhaW4gb2YgdGhlIGltcGxpY2F0aW9ucyBhbmQgc2lkZSBlZmZlY3RzIG9mIHRoZSBjaGFuZ2VzLgoKVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgMSB0aHJvdWdoIDEwMC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBzdHJ1Y3R1cmUsIHRoZSByZWxldmFudCBpbmNsdWRlcywgYW5kIGxpa2VseSB0aGUgY3JpdGljYWwgaW5pdGlhbCBkZWNsYXJhdGlvbnMgdGhhdCB3aWxsIGZyYW1lIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gV2l0aCB0aGF0IGNvbnRleHQgaW4gaGFuZCwgSSBjYW4gc3RhcnQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xuICAgMzpcdFxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7XG4gIDEwOlx0XHQubmFtZSA9IFwmIzM0O2JsdWV0b290aFwmIzM0OyxcbiAgMTE6XHR9O1xuICAxMjpcdFxuICAxMzpcdHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDE0Olx0e1xuICAxNTpcdFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcbiAgMTY6XHRcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VwYXJlbnQ7XG4gIDE3Olx0XG4gIDE4Olx0XHRrZnJlZShjb25uKTtcbiAgMTk6XHRcdHB1dF9kZXZpY2UocGFyZW50KTtcbiAgMjA6XHR9XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xuICAyMzpcdFx0Lm5hbWUgICAgPSBcJiMzNDtsaW5rXCYjMzQ7LFxuICAyNDpcdFx0LnJlbGVhc2UgPSBidF9saW5rX3JlbGVhc2UsXG4gIDI1Olx0fTtcbiAgMjY6XHRcbiAgMjc6XHQvKlxuICAyODpcdCAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ublxuICAyOTpcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSxcbiAgMzA6XHQgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuXG4gIDMxOlx0ICovXG4gIDMyOlx0c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXG4gIDMzOlx0e1xuICAzNDpcdFx0cmV0dXJuICFzdHJuY21wKGRldl9uYW1lKGRldiksIFwmIzM0O3JmY29tbVwmIzM0OywgNik7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gIDM4Olx0e1xuICAzOTpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVx1MDAzZWhkZXY7XG4gIDQwOlx0XG4gIDQxOlx0XHRidF9kZXZfZGJnKGhkZXYsIFwmIzM0O2Nvbm4gJXBcJiMzNDssIGNvbm4pO1xuICA0MjpcdFxuICA0MzpcdFx0Y29ubi1cdTAwM2VkZXYudHlwZSA9IFx1MDAyNmJ0X2xpbms7XG4gIDQ0Olx0XHRjb25uLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmJ0X2NsYXNzO1xuICA0NTpcdFx0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldik7XG4gIDQ2Olx0XG4gIDQ3Olx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDQ4Olx0fVxuICA0OTpcdFxuICA1MDpcdHZvaWQgaGNpX2Nvbm5fYWRkX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNTM6XHRcbiAgNTQ6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2Y29ubi1cdTAwM2VkZXYpKVxuICA1NzpcdFx0XHRyZXR1cm47XG4gIDU4Olx0XG4gIDU5Olx0XHRkZXZfc2V0X25hbWUoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIFwmIzM0OyVzOiVkXCYjMzQ7LCBoZGV2LVx1MDAzZW5hbWUsIGNvbm4tXHUwMDNlaGFuZGxlKTtcbiAgNjA6XHRcbiAgNjE6XHRcdGlmIChkZXZpY2VfYWRkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KSBcdTAwM2MgMClcbiAgNjI6XHRcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdGlvbiBkZXZpY2VcJiMzNDspO1xuICA2MzpcdH1cbiAgNjQ6XHRcbiAgNjU6XHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gIDY2Olx0e1xuICA2NzpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVx1MDAzZWhkZXY7XG4gIDY4Olx0XG4gIDY5Olx0XHRidF9kZXZfZGJnKGhkZXYsIFwmIzM0O2Nvbm4gJXBcJiMzNDssIGNvbm4pO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZjb25uLVx1MDAzZWRldikpIHtcbiAgNzI6XHRcdFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXG4gIDczOlx0XHRcdCAqIHRvIGRyb3AgdGhlIHJlZmVyZW5jZSBjb3VudC5cbiAgNzQ6XHRcdFx0ICovXG4gIDc1Olx0XHRcdHB1dF9kZXZpY2UoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuICA3NjpcdFx0XHRyZXR1cm47XG4gIDc3Olx0XHR9XG4gIDc4Olx0XG4gIDc5Olx0XHQvKiBJZiB0aGVyZSBhcmUgZGV2aWNlcyB1c2luZyB0aGUgY29ubmVjdGlvbiBhcyBwYXJlbnQgcmVzZXQgaXQgdG8gTlVMTFxuICA4MDpcdFx0ICogYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZS5cbiAgODE6XHRcdCAqL1xuICA4MjpcdFx0d2hpbGUgKDEpIHtcbiAgODM6XHRcdFx0c3RydWN0IGRldmljZSAqZGV2O1xuICA4NDpcdFxuICA4NTpcdFx0XHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZjb25uLVx1MDAzZWRldiwgTlVMTCwgX19tYXRjaF90dHkpO1xuICA4NjpcdFx0XHRpZiAoIWRldilcbiAgODc6XHRcdFx0XHRicmVhaztcbiAgODg6XHRcdFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xuICA4OTpcdFx0XHRwdXRfZGV2aWNlKGRldik7XG4gIDkwOlx0XHR9XG4gIDkxOlx0XG4gIDkyOlx0XHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDkzOlx0fVxuICA5NDpcdFxuICA5NTpcdHN0YXRpYyB2b2lkIGJ0X2hvc3RfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSB0b19oY2lfZGV2KGRldik7XG4gIDk4Olx0XG4gIDk5Olx0XHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XG4gMTAwOlx0XHRcdGhjaV9yZWxlYXNlX2RldihoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCbHVldG9vdGggYW5kIGhjaV9zeXNmcy5jIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvYmx1ZXRvb3RoYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBgaGNpX3N5c2ZzLmNgIGlzIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkIG9wdGlvbnMsIHNvIEkmIzM5O2xsIGdvIGRpZ2dpbmcgaW4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoYXQgY29kZSBpcyBjb21waWxlZC4KClRoZW4sIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJ4oCZbGwgbmVlZCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZSBpdHNlbGYgaXMgYnVpbHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgdXNpbmcgZm9yIGBoY2lfc3lzZnMub2AsIHNvIEkgd2lsbCB1c2UgYGdyZXBgIGluIGBuZXQvYmx1ZXRvb3RoL01ha2VmaWxlYCB0byBsb2NhdGUgd2hlcmUgYGhjaV9zeXNmcy5vYCBpcyByZWZlcmVuY2VkLiBIb3BlZnVsbHkgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL01ha2VmaWxlPTE0PWJsdWV0b290aC15IDo9IGFmX2JsdWV0b290aC5vIGhjaV9jb3JlLm8gaGNpX2Nvbm4ubyBoY2lfZXZlbnQubyBtZ210Lm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGU6MTU6XHRoY2lfc29jay5vIGhjaV9zeXNmcy5vIGwyY2FwX2NvcmUubyBsMmNhcF9zb2NrLm8gc21wLm8gbGliLm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTYtXHRlY2RoX2hlbHBlci5vIG1nbXRfdXRpbC5vIG1nbXRfY29uZmlnLm8gaGNpX2NvZGVjLm8gZWlyLm8gaGNpX3N5bmMubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIHJlZ2FyZGluZyBCbHVldG9vdGggY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2JsdWV0b290aC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIHdpdGhpbiB0aGUgYmx1ZXRvb3RoIG1vZHVsZSAtIGxpa2VseSBzdGFydGluZyB3aXRoIGEgZ3JlcCBmb3IgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgbGlrZSBgQlRgLCBgQlRfUkZDT01NYCwgYW5kIHBlcmhhcHMgb3RoZXJzIHNwZWNpZmljIHRvIHRoZSBwcm90b2NvbHMgb3IgZmVhdHVyZXMgSSBoYXZlIGluIG1pbmQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUga2VybmVsIGlzIHN0cnVjdHVyZWQgZm9yIGhhbmRsaW5nIEJsdWV0b290aC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZnJhbWV3b3JrIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMgb2YgbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvS2NvbmZpZy01LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjY6bWVudWNvbmZpZyBCVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDEtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDMtXHRib29sIFwmIzM0O0JsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1wmIzM0O1xubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjU4OmNvbmZpZyBCVF9MRVxubmV0L2JsdWV0b290aC9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTY1LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjY2OmNvbmZpZyBCVF9MRV9MMkNBUF9FQ1JFRFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTDJDQVAgRW5oYW5jZWQgQ3JlZGl0IEZsb3cgQ29udHJvbFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03Ni1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxubmV0L2JsdWV0b290aC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo4Mzpjb25maWcgQlRfTEVEU1xubmV0L2JsdWV0b290aC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTkxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjkyOmNvbmZpZyBCVF9NU0ZURVhUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBNaWNyb3NvZnQgZXh0ZW5zaW9uc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05OC1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMDY6Y29uZmlnIEJUX0RFQlVHRlNcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0V4cG9ydCBCbHVldG9vdGggaW50ZXJuYWxzIGluIGRlYnVnZnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTEzLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjExNDpjb25maWcgQlRfU0VMRlRFU1Rcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O0JsdWV0b290aCBzZWxmIHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMjYtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFQ0RIIHRlc3QgY2FzZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEzNDpjb25maWcgQlRfU0VMRlRFU1RfU01QXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtTTVAgdGVzdCBjYXNlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDAtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTQxOmNvbmZpZyBCVF9GRUFUVVJFX0RFQlVHXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtFbmFibGUgcnVudGltZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBzdGF0ZW1lbnRzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjI6Y29uZmlnIEJUX0JORVBcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCTkVQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xMy1cbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjE0OmNvbmZpZyBCVF9CTkVQX01DX0ZJTFRFUlxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWctMTUtXHRib29sIFwmIzM0O011bHRpY2FzdCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnLTE5LVxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWc6MjA6Y29uZmlnIEJUX0JORVBfUFJPVE9fRklMVEVSXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7UHJvdG9jb2wgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWc6Mjpjb25maWcgQlRfSElEUFxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hJRFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWc6Mjpjb25maWcgQlRfUkZDT01NXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtSRkNPTU0gcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMTItXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnOjEzOmNvbmZpZyBCVF9SRkNPTU1fVFRZXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtSRkNPTU0gVFRZIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbHVldG9vdGggUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJIHNlZToKCjEuICBgYnRfbGlua19yZWxlYXNlYCBub3cgY2FsbGluZyBgcHV0X2RldmljZShwYXJlbnQpYCBvbiBgZGV2LSZndDtwYXJlbnRgIHdoZW4gdGhlIGBidF9saW5rYCBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gcmVzb3VyY2UgaGFuZGxpbmcuCjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgaW5pdGlhbGl6ZXMgYGNvbm4tJmd0O2Rldi5wYXJlbnRgIHdpdGggYGdldF9kZXZpY2UoJmFtcDtoZGV2LSZndDtkZXYpYC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUg4oCTIGEgbWlzc2VkIGBwdXRfZGV2aWNlYCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgbWVtb3J5IGxlYWtzIG9yIGRhbmdsaW5nIHBvaW50ZXJzLgozLiAgVGhlIGFkZGl0aW9uIG9mIHRoZSBgX19tYXRjaF90dHlgIGhlbHBlciBzcGVjaWZpY2FsbHkgZm9yIGByZmNvbW1gIG1hdGNoaW5nIGlzIGludGVyZXN0aW5nLiBUaGlzIGhpbnRzIGF0IG1vcmUgdGFyZ2V0ZWQgZGV2aWNlIGlkZW50aWZpY2F0aW9uLgo0LiAgRmluYWxseSwgYGhjaV9jb25uX2RlbF9zeXNmc2Agbm93IHVzZXMgYGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSlgIGluc3RlYWQgb2YgYGRldmljZV9maW5kX2FueV9jaGlsZGAuIFRoaXMgY2hhbmdlIGlzIHNwZWNpZmljIHRvIHRoZSBSRkNPTU0gZHJpdmVyLCBhbmQgaXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiBob3cgY2hpbGRyZW4gYXJlIGZvdW5kIHRvIG1ha2UgdGhlIHByb2Nlc3MgbW9yZSBlbGVnYW50LgoKVGhlIG5leHQgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBhYm91dCByZWFjaGFiaWxpdHkuICoqQ291bGQgdGhlc2UgbmV3IGNvZGUgcGF0aHMgYmUgdHJpZ2dlcmVkIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyoqIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGNhbiByZWxpYWJseSBleGVyY2lzZSB0aGVtLiBHaXZlbiB0aGUgZGVzY3JpcHRpb24sIHRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgYSByZXNvdW5kaW5nIHllcyEgU3l6a2FsbGVyIGV4dGVuc2l2ZWx5IHRlc3RzIEJsdWV0b290aCwgaW5jbHVkaW5nIEhDSSBzb2NrZXRzLCBWSENJLCBSRkNPTU0sIGFuZCBMMkNBUC4gQ29ubmVjdGlvbnMgYXJlIHJvdXRpbmVseSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgdmlhIFZIQ0kgYW5kIFJGQ09NTS4gSWYgdGhpcyBjb2RlIGlzIGNvbm5lY3RlZCB0byBIQ0kgY29ubmVjdGlvbnMgb3ZlciBSRkNPTU0gYW5kIG90aGVyIGNoYW5uZWxzLCB0aGVuIHRoaXMgY29kZSBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBpbiB0ZXN0aW5nLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNhbGwgZ3JhcGhzIGZvciB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uOiBgaGNpX2Nvbm5faW5pdF9zeXNmc2AsIGBoY2lfY29ubl9hZGRfc3lzZnNgLCBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCwgYW5kIGBidF9saW5rX3JlbGVhc2VgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHVzYWdlIGxvY2F0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX2Nvbm5fKGluaXR8YWRkfGRlbClfc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMzc9c3RhdGljIHZvaWQgaGNpX2Nvbm5fY2xlYW51cChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29ubi5jLTE2OS1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxNzA6XHRoY2lfY29ubl9kZWxfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTcxLVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMDAxPXN0YXRpYyBzdHJ1Y3QgaGNpX2Nvbm4gKl9faGNpX2Nvbm5fYWRkKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTE1Mi1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxMTUzOlx0aGNpX2Nvbm5faW5pdF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xMTU0LVx0cmV0dXJuIGNvbm47XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz0zMTUwPXN0YXRpYyB2b2lkIGhjaV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMyNDEtXHRcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzozMjQyOlx0XHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMyNDMtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz01MDM4PXN0YXRpYyB2b2lkIGhjaV9zeW5jX2Nvbm5fY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNC1cdFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxMDU6XHRcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNi1cdFx0YnJlYWs7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz01NzUxPXN0YXRpYyB2b2lkIGxlX2Nvbm5fY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkxLVx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjU4OTI6XHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTU4OTMtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz02OTY4PXN0YXRpYyB2b2lkIGhjaV9sZV9jaXNfZXN0YWJsaXNoZWRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNzA1MS1cdFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcwNTI6XHRcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNzA1My1cdFx0aGNpX2lzb19zZXR1cF9wYXRoKGNvbm4pO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NzE0Nj1zdGF0aWMgdm9pZCBoY2lfbGVfY3JlYXRlX2JpZ19jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MTk3LVx0XHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NzE5ODpcdFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MTk5LVx0XHRoY2lfaXNvX3NldHVwX3BhdGgoY29ubik7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz03MjE3PXN0YXRpYyB2b2lkIGhjaV9sZV9iaWdfc3luY19lc3RhYmxpc2hlZF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03Mjc4LVx0XHRcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGJpcyk7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcyNzk6XHRcdFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGJpcyk7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcyODAtXHRcdFx0aGNpX2lzb19zZXR1cF9wYXRoKGJpcyk7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYz0zMj1zdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLTM2LVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzozNzp2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy0zOC17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy00OS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmM6NTA6dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy01MS17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02NC1cbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmM6NjU6dm9pZCBoY2lfY29ubl9kZWxfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDIKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbHVldG9vdGggUkZDT01NIFRUWSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCbHVldG9vdGgsIHNwZWNpZmljYWxseSBSRkNPTU0gVFRZIGRldmljZSBoYW5kbGluZy4gIFNvLCBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlRgLCBgQ09ORklHX0JUX1JGQ09NTWAsIGFuZCBgQ09ORklHX0JUX1JGQ09NTV9UVFlgLiAgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbW1lbnQgYW5kIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBoY2lfc3lzZnMuY2AuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBjcnVjaWFsOiBgYnRfbGlua19yZWxlYXNlYCwgYF9fbWF0Y2hfdHR5YCwgYGhjaV9jb25uX2luaXRfc3lzZnNgLCBhbmQgYGhjaV9jb25uX2RlbF9zeXNmc2AuIFRob3NlIGFyZSB0aGUgbmV3IG9yIG1vZGlmaWVkIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiAgTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IG9uZXM6IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2RlbF9zeXNmc2AsIGFuZCBgYnRfbGlua19yZWxlYXNlYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGlzIGBfX21hdGNoX3R0eWAgd2hpY2ggc2VlbXMgdG8gYmUgdXNlZCB0byBwZXJmb3JtIHNvbWUgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBvbiBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSAoYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCkuCgpUaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LCBpdCBpcy4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiAgV2UmIzM5O3JlIG1vZGlmeWluZyBob3cgcmVmY291bnRpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEJsdWV0b290aCBkZXZpY2UgaGllcmFyY2h5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiBjb25uZWN0aW9ucywgYW5kIGRldmljZSBmaWx0ZXJpbmcgd2hlbiBtb3ZpbmcgVFRZIGRldmljZXMgYmVmb3JlIEhDSSBjb25uZWN0aW9uIGRldmljZSB0ZWFyZG93bi4gVGhhdCBzY3JlYW1zIHBvdGVudGlhbCBmb3IgcHJvYmxlbXMuICBJbmNvcnJlY3QgcmVmY291bnRpbmcgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgdGhvc2UgYW5ub3lpbmcgc3lzZnMgd2FybmluZ3MuIEdpdmVuIFN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBleGVyY2lzaW5nIEJsdWV0b290aCBjb25uZWN0aW9uIGNyZWF0aW9uL3RlYXJkb3duIGFuZCByZmNvbW0gdHR5IGRldmljZXMsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuCgpTbywgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBjb25maWd1cmF0aW9ucyBvbmUgbGFzdCB0aW1lOiBCVCwgQlRfUkZDT01NLCBCVF9SRkNPTU1fVFRZLiBDaGVjay4gQW5kIHRoZSBpbnN0cnVjdGlvbnMsIG9mIGNvdXJzZToKLSBFbmFibGVDb25maWdzOiBbJiMzNDtCVCYjMzQ7LCAmIzM0O0JUX1JGQ09NTSYjMzQ7LCAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0O10KLSBGb2N1c1N5bWJvbHM6IFsmIzM0O2hjaV9jb25uX2luaXRfc3lzZnMmIzM0OywgJiMzNDtoY2lfY29ubl9kZWxfc3lzZnMmIzM0OywgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywgJiMzNDtfX21hdGNoX3R0eSYjMzQ7XQotIFdvcnRoRnV6emluZzogdHJ1ZQotIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZnV6emluZyB2ZXJkaWN0LgoKRmluYWxseSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6IEVuYWJsZUNvbmZpZ3MgKGEgbGlzdCBvZiBzdHJpbmdzLCBubyBDT05GSUdfIHByZWZpeCksIEZvY3VzU3ltYm9scyAoYSBsaXN0IG9mIHN0cmluZ3MpLCBSZWFzb25pbmcgKGEgc3RyaW5nLCB0byBqdXN0aWZ5IG15IGRlY2lzaW9uKSwgYW5kIFdvcnRoRnV6emluZyAoYSBib29sZWFuKS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZjb3VudGluZyBhbmQgc3lzZnMgY2hpbGQgZGV2aWNlIHJlcGFyZW50aW5nIGluIEJsdWV0b290aCBIQ0kgKG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgYGNvbm4tXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGhpZXJhcmNoeSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZy4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkvcmVmY291bnQgbGVha3MsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5ldyBzdGFjay9oZWFwIGJ1ZmZlcnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSBpbnZvbHZlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xMyw3ICYjNDM7MTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHsKIHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LSZndDtwYXJlbnQ7CiYjNDM7CiAJa2ZyZWUoY29ubik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0gewpAQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHsKIAkucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ubgomIzQzOyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSwKJiM0MzsgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgJiMzNDtyZmNvbW0mIzM0OywgNik7CiYjNDM7fQomIzQzOwogdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tJmd0O2hkZXY7CkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKQogCiAJY29ubi0mZ3Q7ZGV2LnR5cGUgPSAmYW1wO2J0X2xpbms7CiAJY29ubi0mZ3Q7ZGV2LmNsYXNzID0gJmFtcDtidF9jbGFzczsKLQljb25uLSZndDtkZXYucGFyZW50ID0gJmFtcDtoZGV2LSZndDtkZXY7CiYjNDM7CWNvbm4tJmd0O2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZhbXA7aGRldi0mZ3Q7ZGV2KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKIH0KQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQkJZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKJiM0MzsJCWRldiA9IGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipFeGFtaW5pbmcgdGhlIEJsdWV0b290aCBIQ0kgU3lzZnMgUGF0Y2gqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbi4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBIQ0kgKEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UpIHN5c2ZzIGludGVyZmFjZSBsaXZlcyDigJMgdGhlIHdheSB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggQmx1ZXRvb3RoIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCByaWdodD8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBwYXRjaCBpcyBjaGFuZ2luZyB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTtsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIEJsdWV0b290aCBIQ0kgZHJpdmVyIG1vZGVsIHN1cHBvcnQuICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiAgMTA6XHRcdC5uYW1lID0gXCYjMzQ7Ymx1ZXRvb3RoXCYjMzQ7LFxuICAxMTpcdH07XG4gIDEyOlx0XG4gIDEzOlx0c3RhdGljIHZvaWQgYnRfbGlua19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiAgMTQ6XHR7XG4gIDE1Olx0XHRzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSB0b19oY2lfY29ubihkZXYpO1xuICAxNjpcdFx0c3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LVx1MDAzZXBhcmVudDtcbiAgMTc6XHRcbiAgMTg6XHRcdGtmcmVlKGNvbm4pO1xuICAxOTpcdFx0cHV0X2RldmljZShwYXJlbnQpO1xuICAyMDpcdH1cbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gIDIzOlx0XHQubmFtZSAgICA9IFwmIzM0O2xpbmtcJiMzNDssXG4gIDI0Olx0XHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdC8qXG4gIDI4Olx0ICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4gIDI5Olx0ICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJiMzOTt0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxuICAzMDpcdCAqIHNvIHdlIHNob3VsZCBtb3ZlIHRoZSBkZXZpY2UgYmVmb3JlIGNvbm4gZGV2aWNlIGlzIGRlc3Ryb3llZC5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbiAgMzM6XHR7XG4gIDM0Olx0XHRyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgXCYjMzQ7cmZjb21tXCYjMzQ7LCA2KTtcbiAgMzU6XHR9XG4gIDM2Olx0XG4gIDM3Olx0dm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNDA6XHRcbiAgNDE6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDQyOlx0XG4gIDQzOlx0XHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiAgNDQ6XHRcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4gIDQ1Olx0XHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFx1MDAyNmhkZXYtXHUwMDNlZGV2KTtcbiAgNDY6XHRcbiAgNDc6XHRcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiAgNDg6XHR9XG4gIDQ5Olx0XG4gIDUwOlx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxuICA1MTpcdHtcbiAgNTI6XHRcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi1cdTAwM2VoZGV2O1xuICA1MzpcdFxuICA1NDpcdFx0YnRfZGV2X2RiZyhoZGV2LCBcJiMzNDtjb25uICVwXCYjMzQ7LCBjb25uKTtcbiAgNTU6XHRcbiAgNTY6XHRcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZjb25uLVx1MDAzZWRldikpXG4gIDU3Olx0XHRcdHJldHVybjtcbiAgNTg6XHRcbiAgNTk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZjb25uLVx1MDAzZWRldiwgXCYjMzQ7JXM6JWRcJiMzNDssIGhkZXYtXHUwMDNlbmFtZSwgY29ubi1cdTAwM2VoYW5kbGUpO1xuICA2MDpcdFxuICA2MTpcdFx0aWYgKGRldmljZV9hZGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYpIFx1MDAzYyAwKVxuICA2MjpcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVwmIzM0Oyk7XG4gIDYzOlx0fVxuICA2NDpcdFxuICA2NTpcdHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgNjY6XHR7XG4gIDY3Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNjg6XHRcbiAgNjk6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KSkge1xuICA3MjpcdFx0XHQvKiBJZiBkZXZpY2VfYWRkKCkgaGFzICpub3QqIHN1Y2NlZWRlZCwgdXNlICpvbmx5KiBwdXRfZGV2aWNlKClcbiAgNzM6XHRcdFx0ICogdG8gZHJvcCB0aGUgcmVmZXJlbmNlIGNvdW50LlxuICA3NDpcdFx0XHQgKi9cbiAgNzU6XHRcdFx0cHV0X2RldmljZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDc2Olx0XHRcdHJldHVybjtcbiAgNzc6XHRcdH1cbiAgNzg6XHRcbiAgNzk6XHRcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXG4gIDgwOlx0XHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxuICA4MTpcdFx0ICovXG4gIDgyOlx0XHR3aGlsZSAoMSkge1xuICA4MzpcdFx0XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gIDg0Olx0XG4gIDg1Olx0XHRcdGRldiA9IGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XG4gIDg2Olx0XHRcdGlmICghZGV2KVxuICA4NzpcdFx0XHRcdGJyZWFrO1xuICA4ODpcdFx0XHRkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7XG4gIDg5Olx0XHRcdHB1dF9kZXZpY2UoZGV2KTtcbiAgOTA6XHRcdH1cbiAgOTE6XHRcbiAgOTI6XHRcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHRvX2hjaV9kZXYoZGV2KTtcbiAgOTg6XHRcbiAgOTk6XHRcdGlmIChoY2lfZGV2X3Rlc3RfZmxhZyhoZGV2LCBIQ0lfVU5SRUdJU1RFUikpIHtcbiAxMDA6XHRcdFx0aGNpX3JlbGVhc2VfZGV2KGhkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc4CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmcgZm9yIEJsdWV0b290aCBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGZvY3VzZWQgb24gQmx1ZXRvb3RoIGRldmljZSBsaWZlY3ljbGUgYW5kIHN5c2ZzIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBoY2lfY29ubmAgc3lzZnMgZGV2aWNlIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHJmY29tbSB0dHkgY2hpbGQgZGV2aWNlcy4gSSBzZWUgdGhlIG1haW4gY2hhbmdlcyBhcmUgYXJvdW5kIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgd2l0aGluIHRoZSBkZXZpY2UgaGllcmFyY2h5LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG9ic2VydmluZyB0aGUgZm9sbG93aW5nOgoKMS4gIEluIGBidF9saW5rX3JlbGVhc2VgLCBpdCBzZWVtcyB0aGV5JiMzOTtyZSBmaXhpbmcgYW4gaXNzdWUgd2l0aCBkcm9wcGluZyB0aGUgcmVmY291bnQgb2YgYHBhcmVudGAgd2hlbiBmcmVlaW5nIGBjb25uYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYHB1dF9kZXZpY2VgIGNhbGwuCjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZGV2aWNlIChgaGRldi0mZ3Q7ZGV2YCkgYW5kIGFzc2lnbmluZyBpdCB0byBgY29ubi0mZ3Q7ZGV2LnBhcmVudGAgdXNpbmcgYGdldF9kZXZpY2VgLgozLiAgVGhlIHVzZSBvZiBgZGV2aWNlX2ZpbmRfY2hpbGRgIHdpdGggYF9fbWF0Y2hfdHR5YCBpbiBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCBpbmRpY2F0ZXMgYSB0YXJnZXRlZCBhcHByb2FjaCB0byBtb3ZpbmcgKm9ubHkqIHRoZSByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMgZHVyaW5nIGNsZWFudXAsIGluc3RlYWQgb2YgYSBicm9hZGVyIHNlYXJjaC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBcmUgdGhleSBpbnRyb2R1Y2luZyBhbnkgcG90ZW50aWFsIGluZm8gbGVha3M/CgpBZnRlciBhIHF1aWNrIGNvZGUgd2Fsay10aHJvdWdoOgoKKiAgIFRoZSByZWZjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCB1c2luZyBgZ2V0X2RldmljZWAsIGBwdXRfZGV2aWNlYCwgYW5kIGBrZnJlZWAgYXBwZWFyIHN0YW5kYXJkIGFuZCBzYWZlLgoqICAgYF9fbWF0Y2hfdHR5YCB1c2VzIHN0cmluZyBjb21wYXJpc29uIGFuZCBgZGV2aWNlX2ZpbmRfY2hpbGRgIGRvZXMgYSBmdW5jdGlvbiBsb29rdXAuCiogICBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgaXNzdWVzIGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdXNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHB1cmVseSByZWZpbmluZyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBkZXZpY2UgaGllcmFyY2h5L3JlcGFyZW50aW5nIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIHN5c2ZzIGxpZmVjeWNsZS4KCkFueSBidWdzIHRoYXQgbWlnaHQgc3VyZmFjZSBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlZmVyZW5jZSBjb3VudCBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzIHJlbGF0ZWQgdG8gc3lzZnMgaGllcmFyY2h5IHByb2JsZW1zLiBUaGVzZSB3b3VsZCBsaWtlbHkgYmUgY2F1Z2h0IGJ5IEtBU0FOLCByZWZjb3VudCB0cmFja2luZyB0b29scywgYW5kIGxvY2tkZXAuIFRoZXJlJiMzOTtzIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBmaXQgdGhlIGNyaXRlcmlhOiBpdCBwcmltYXJpbHkgcmlza3MgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKGxlc3MgbGlrZWx5IGluIHRoaXMgY2FzZSksIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgZGV0ZWN0b3JzLiBBbHNvLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm8tbGVha3MsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzowNC4yNDUxMzA3MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU3NDkyNDAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfUkZDT01NXCIsXG4gICAgXCJCVF9SRkNPTU1fVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX2Nvbm5faW5pdF9zeXNmc1wiLFxuICAgIFwiaGNpX2Nvbm5fZGVsX3N5c2ZzXCIsXG4gICAgXCJidF9saW5rX3JlbGVhc2VcIixcbiAgICBcIl9fbWF0Y2hfdHR5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmY291bnRpbmcgYW5kIHN5c2ZzIGNoaWxkIGRldmljZSByZXBhcmVudGluZyBpbiBCbHVldG9vdGggSENJIChuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBjb25uLVxcdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBoaWVyYXJjaHksIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5L3JlZmNvdW50IGxlYWtzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgc3RhY2svaGVhcCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UgaW52b2x2ZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6MDQuMjQ1MTQxNzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxMzQzODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGNkMWNhZGVhNjllMmE0ZDM0OGY3Mjk1ZDc2Njc0YWIwMWNkMGExOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXFxuaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDRcXG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXFxuKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuY1xcbkBAIC0xMyw3ICsxMywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJ0X2NsYXNzID0ge1xcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbitcXG4gXFx0a2ZyZWUoY29ubik7XFxuK1xcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XFxuIFxcdC5yZWxlYXNlID0gYnRfbGlua19yZWxlYXNlLFxcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXFxuKyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbisgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgXFxcInJmY29tbVxcXCIsIDYpO1xcbit9XFxuK1xcbiB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiB7XFxuIFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi1cXHUwMDNlaGRldjtcXG5AQCAtMjksNyArNDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiBcXG4gXFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gXFx0Y29ubi1cXHUwMDNlZGV2LmNsYXNzID0gXFx1MDAyNmJ0X2NsYXNzO1xcbi1cXHRjb25uLVxcdTAwM2VkZXYucGFyZW50ID0gXFx1MDAyNmhkZXYtXFx1MDAzZWRldjtcXG4rXFx0Y29ubi1cXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXFx1MDAyNmhkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gfVxcbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG4tXFx0XFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuIFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzowNS44MTcxMDc1ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4ODU4MzQwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCIsXG4gICAgXCJCVF9SRkNPTU1cIixcbiAgICBcIkJUX1JGQ09NTV9UVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoY2lfY29ubl9pbml0X3N5c2ZzXCIsXG4gICAgXCJoY2lfY29ubl9kZWxfc3lzZnNcIixcbiAgICBcImJ0X2xpbmtfcmVsZWFzZVwiLFxuICAgIFwiX19tYXRjaF90dHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjaGlsZCBkZXZpY2UgZmlsdGVyaW5nIGR1cmluZyBCbHVldG9vdGggSENJIGNvbm5lY3Rpb24gc3lzZnMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIGluIG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGhlYXZpbHkgZXhlcmNpc2VkIHZpYSBCbHVldG9vdGggSENJL1JGQ09NTSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBzeXNmcyBoaWVyYXJjaHkgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyArMTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXHUwMDNlcGFyZW50O1xuK1xuIFx0a2ZyZWUoY29ubik7XG4rXHRwdXRfZGV2aWNlKHBhcmVudCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiB9O1xuIFxuKy8qXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4rICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJ3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4rICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcInJmY29tbVwiLCA2KTtcbit9XG4rXG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICs0Miw3IEBAIHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gXG4gXHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiBcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4tXHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZoZGV2LVx1MDAzZWRldjtcbitcdGNvbm4tXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXHUwMDI2aGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuIH1cbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbitcdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIE5VTEwsIF9fbWF0Y2hfdHR5KTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjA1LjgxNzEwOTE4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDEwODE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbHVldG9vdGggSENJIFN5c2ZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBpbnNwZWN0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBpdHNlbGYuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGFuZCB0aGluayBhYm91dCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIGFuZCBzaWRlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMuXG5cblRpbWUgdG8gcHVsbCB1cCB0aGUgZmlsZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDEgdGhyb3VnaCAxMDAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgc3RydWN0dXJlLCB0aGUgcmVsZXZhbnQgaW5jbHVkZXMsIGFuZCBsaWtlbHkgdGhlIGNyaXRpY2FsIGluaXRpYWwgZGVjbGFyYXRpb25zIHRoYXQgd2lsbCBmcmFtZSB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFdpdGggdGhhdCBjb250ZXh0IGluIGhhbmQsIEkgY2FuIHN0YXJ0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCByZWFzb25pbmcgYmVoaW5kIHRoZSBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjEwLjUxODE5Njc4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcXG4gIDEwOlxcdFxcdC5uYW1lID0gXFxcImJsdWV0b290aFxcXCIsXFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiAgMTQ6XFx0e1xcbiAgMTU6XFx0XFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRrZnJlZShjb25uKTtcXG4gIDE5OlxcdFxcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbiAgMjM6XFx0XFx0Lm5hbWUgICAgPSBcXFwibGlua1xcXCIsXFxuICAyNDpcXHRcXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBUaGUgcmZjb21tIHR0eSBkZXZpY2Ugd2lsbCBwb3NzaWJseSByZXRhaW4gZXZlbiB3aGVuIGNvbm5cXG4gIDI5OlxcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbiAgMzA6XFx0ICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcXFwicmZjb21tXFxcIiwgNik7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gIDQ0OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZidF9jbGFzcztcXG4gIDQ1OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFxcdTAwMjZoZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVxcdTAwM2VoZGV2O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRidF9kZXZfZGJnKGhkZXYsIFxcXCJjb25uICVwXFxcIiwgY29ubik7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSlcXG4gIDU3OlxcdFxcdFxcdHJldHVybjtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYsIFxcXCIlczolZFxcXCIsIGhkZXYtXFx1MDAzZW5hbWUsIGNvbm4tXFx1MDAzZWhhbmRsZSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChkZXZpY2VfYWRkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpIFxcdTAwM2MgMClcXG4gIDYyOlxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVxcXCIpO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSkge1xcbiAgNzI6XFx0XFx0XFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXFxuICA3MzpcXHRcXHRcXHQgKiB0byBkcm9wIHRoZSByZWZlcmVuY2UgY291bnQuXFxuICA3NDpcXHRcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmNvbm4tXFx1MDAzZWRldik7XFxuICA3NjpcXHRcXHRcXHRyZXR1cm47XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXFxuICA4MDpcXHRcXHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHR3aGlsZSAoMSkge1xcbiAgODM6XFx0XFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuICA4NjpcXHRcXHRcXHRpZiAoIWRldilcXG4gIDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgODg6XFx0XFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcbiAgODk6XFx0XFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdG9faGNpX2RldihkZXYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XFxuIDEwMDpcXHRcXHRcXHRoY2lfcmVsZWFzZV9kZXYoaGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjEwLjUxODM0MzE4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjk1NDkzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCbHVldG9vdGggYW5kIGhjaV9zeXNmcy5jIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYG5ldC9ibHVldG9vdGhgIGFuZCBzcGVjaWZpY2FsbHkgaG93IGBoY2lfc3lzZnMuY2AgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhleSdyZSB0aGUgc291cmNlIG9mIHRydXRoIGZvciBidWlsZCBvcHRpb25zLCBzbyBJJ2xsIGdvIGRpZ2dpbmcgaW4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoYXQgY29kZSBpcyBjb21waWxlZC5cblxuVGhlbiwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEnigJlsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlIGl0c2VsZiBpcyBidWlsdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIHVzaW5nIGZvciBgaGNpX3N5c2ZzLm9gLCBzbyBJIHdpbGwgdXNlIGBncmVwYCBpbiBgbmV0L2JsdWV0b290aC9NYWtlZmlsZWAgdG8gbG9jYXRlIHdoZXJlIGBoY2lfc3lzZnMub2AgaXMgcmVmZXJlbmNlZC4gSG9wZWZ1bGx5IHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzoxNC42ODc4OTQ3NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTQ3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3N5c2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9NYWtlZmlsZT0xND1ibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIFxcXFxcXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlOjE1OlxcdGhjaV9zb2NrLm8gaGNpX3N5c2ZzLm8gbDJjYXBfY29yZS5vIGwyY2FwX3NvY2subyBzbXAubyBsaWIubyBcXFxcXFxubmV0L2JsdWV0b290aC9NYWtlZmlsZS0xNi1cXHRlY2RoX2hlbHBlci5vIG1nbXRfdXRpbC5vIG1nbXRfY29uZmlnLm8gaGNpX2NvZGVjLm8gZWlyLm8gaGNpX3N5bmMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjE0LjczOTA1Njk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAzMTc2MjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEJsdWV0b290aCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB3aGF0IEknbSBsb29raW5nIGF0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIHdpdGhpbiB0aGUgYmx1ZXRvb3RoIG1vZHVsZSAtIGxpa2VseSBzdGFydGluZyB3aXRoIGEgZ3JlcCBmb3IgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgbGlrZSBgQlRgLCBgQlRfUkZDT01NYCwgYW5kIHBlcmhhcHMgb3RoZXJzIHNwZWNpZmljIHRvIHRoZSBwcm90b2NvbHMgb3IgZmVhdHVyZXMgSSBoYXZlIGluIG1pbmQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUga2VybmVsIGlzIHN0cnVjdHVyZWQgZm9yIGhhbmRsaW5nIEJsdWV0b290aC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZnJhbWV3b3JrIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMgb2YgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjIxLjc3MDgyMTc5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA4NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkJsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiRW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFQ0RIIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiU01QIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjI6Y29uZmlnIEJUX0JORVBcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCTkVQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xMy1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZzoxNDpjb25maWcgQlRfQk5FUF9NQ19GSUxURVJcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJNdWx0aWNhc3QgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xOS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZzoyMDpjb25maWcgQlRfQk5FUF9QUk9UT19GSUxURVJcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJQcm90b2NvbCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWc6Mjpjb25maWcgQlRfSElEUFxcbm5ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkhJRFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnOjI6Y29uZmlnIEJUX1JGQ09NTVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUkZDT01NIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTEyLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWc6MTM6Y29uZmlnIEJUX1JGQ09NTV9UVFlcXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIlJGQ09NTSBUVFkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6MjEuODIwOTA5NTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc3OTExODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgcGFydGljdWxhcmx5IGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4gSSBzZWU6XG5cbjEuICBgYnRfbGlua19yZWxlYXNlYCBub3cgY2FsbGluZyBgcHV0X2RldmljZShwYXJlbnQpYCBvbiBgZGV2LVx1MDAzZXBhcmVudGAgd2hlbiB0aGUgYGJ0X2xpbmtgIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiByZXNvdXJjZSBoYW5kbGluZy5cbjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgaW5pdGlhbGl6ZXMgYGNvbm4tXHUwMDNlZGV2LnBhcmVudGAgd2l0aCBgZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldilgLiBUaGlzIHNlZW1zIGxpa2UgYSBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlIOKAkyBhIG1pc3NlZCBgcHV0X2RldmljZWAgY291bGQgbGVhZCB0byBzZXJpb3VzIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy5cbjMuICBUaGUgYWRkaXRpb24gb2YgdGhlIGBfX21hdGNoX3R0eWAgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgYHJmY29tbWAgbWF0Y2hpbmcgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaGludHMgYXQgbW9yZSB0YXJnZXRlZCBkZXZpY2UgaWRlbnRpZmljYXRpb24uXG40LiAgRmluYWxseSwgYGhjaV9jb25uX2RlbF9zeXNmc2Agbm93IHVzZXMgYGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSlgIGluc3RlYWQgb2YgYGRldmljZV9maW5kX2FueV9jaGlsZGAuIFRoaXMgY2hhbmdlIGlzIHNwZWNpZmljIHRvIHRoZSBSRkNPTU0gZHJpdmVyLCBhbmQgaXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiBob3cgY2hpbGRyZW4gYXJlIGZvdW5kIHRvIG1ha2UgdGhlIHByb2Nlc3MgbW9yZSBlbGVnYW50LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHJlYWNoYWJpbGl0eS4gKipDb3VsZCB0aGVzZSBuZXcgY29kZSBwYXRocyBiZSB0cmlnZ2VyZWQgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/KiogSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB3aGV0aGVyIFN5emthbGxlciBhbmQgb3RoZXIgZnV6emVycyBjYW4gcmVsaWFibHkgZXhlcmNpc2UgdGhlbS4gR2l2ZW4gdGhlIGRlc2NyaXB0aW9uLCB0aGUgYW5zd2VyIHNlZW1zIHRvIGJlIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBleHRlbnNpdmVseSB0ZXN0cyBCbHVldG9vdGgsIGluY2x1ZGluZyBIQ0kgc29ja2V0cywgVkhDSSwgUkZDT01NLCBhbmQgTDJDQVAuIENvbm5lY3Rpb25zIGFyZSByb3V0aW5lbHkgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHZpYSBWSENJIGFuZCBSRkNPTU0uIElmIHRoaXMgY29kZSBpcyBjb25uZWN0ZWQgdG8gSENJIGNvbm5lY3Rpb25zIG92ZXIgUkZDT01NIGFuZCBvdGhlciBjaGFubmVscywgdGhlbiB0aGlzIGNvZGUgaXMgaGlnaGx5IGxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gdGVzdGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbCBncmFwaHMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gcXVlc3Rpb246IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2FkZF9zeXNmc2AsIGBoY2lfY29ubl9kZWxfc3lzZnNgLCBhbmQgYGJ0X2xpbmtfcmVsZWFzZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGFsbCB0aGUgdXNhZ2UgbG9jYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjI2LjE5ODgyMzk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgyNjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfY29ubl8oaW5pdHxhZGR8ZGVsKV9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMzc9c3RhdGljIHZvaWQgaGNpX2Nvbm5fY2xlYW51cChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTY5LVxcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxNzA6XFx0aGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xNzEtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmM9MTAwMT1zdGF0aWMgc3RydWN0IGhjaV9jb25uICpfX2hjaV9jb25uX2FkZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTE1Mi1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmM6MTE1MzpcXHRoY2lfY29ubl9pbml0X3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xMTU0LVxcdHJldHVybiBjb25uO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz0zMTUwPXN0YXRpYyB2b2lkIGhjaV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzI0MS1cXHRcXHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMyNDI6XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzI0My1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTAzOD1zdGF0aWMgdm9pZCBoY2lfc3luY19jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNC1cXHRcXHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxMDU6XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTc1MT1zdGF0aWMgdm9pZCBsZV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkxLVxcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NTg5MjpcXHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkzLVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz02OTY4PXN0YXRpYyB2b2lkIGhjaV9sZV9jaXNfZXN0YWJsaXNoZWRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MDUxLVxcdFxcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NzA1MjpcXHRcXHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MDUzLVxcdFxcdGhjaV9pc29fc2V0dXBfcGF0aChjb25uKTtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NzE0Nj1zdGF0aWMgdm9pZCBoY2lfbGVfY3JlYXRlX2JpZ19jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcxOTctXFx0XFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo3MTk4OlxcdFxcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcxOTktXFx0XFx0aGNpX2lzb19zZXR1cF9wYXRoKGNvbm4pO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz03MjE3PXN0YXRpYyB2b2lkIGhjaV9sZV9iaWdfc3luY19lc3RhYmxpc2hlZF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcyNzgtXFx0XFx0XFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oYmlzKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcyNzk6XFx0XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGJpcyk7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MjgwLVxcdFxcdFxcdGhjaV9pc29fc2V0dXBfcGF0aChiaXMpO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYz0zMj1zdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtMzYtXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzozNzp2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtMzgte1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy00OS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jOjUwOnZvaWQgaGNpX2Nvbm5fYWRkX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLTUxLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtNjQtXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzo2NTp2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjI2LjI1MzY1NDQ5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzM5OTk2OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggUkZDT01NIFRUWSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBCbHVldG9vdGgsIHNwZWNpZmljYWxseSBSRkNPTU0gVFRZIGRldmljZSBoYW5kbGluZy4gIFNvLCBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlRgLCBgQ09ORklHX0JUX1JGQ09NTWAsIGFuZCBgQ09ORklHX0JUX1JGQ09NTV9UVFlgLiAgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbW1lbnQgYW5kIHRoZSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBoY2lfc3lzZnMuY2AuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBjcnVjaWFsOiBgYnRfbGlua19yZWxlYXNlYCwgYF9fbWF0Y2hfdHR5YCwgYGhjaV9jb25uX2luaXRfc3lzZnNgLCBhbmQgYGhjaV9jb25uX2RlbF9zeXNmc2AuIFRob3NlIGFyZSB0aGUgbmV3IG9yIG1vZGlmaWVkIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiAgTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IG9uZXM6IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2RlbF9zeXNmc2AsIGFuZCBgYnRfbGlua19yZWxlYXNlYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGlzIGBfX21hdGNoX3R0eWAgd2hpY2ggc2VlbXMgdG8gYmUgdXNlZCB0byBwZXJmb3JtIHNvbWUgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBvbiBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSAoYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCkuXG5cblRoZSBiaWcgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHksIGl0IGlzLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuICBXZSdyZSBtb2RpZnlpbmcgaG93IHJlZmNvdW50aW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgY29ubmVjdGlvbnMsIGFuZCBkZXZpY2UgZmlsdGVyaW5nIHdoZW4gbW92aW5nIFRUWSBkZXZpY2VzIGJlZm9yZSBIQ0kgY29ubmVjdGlvbiBkZXZpY2UgdGVhcmRvd24uIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHByb2JsZW1zLiAgSW5jb3JyZWN0IHJlZmNvdW50aW5nIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIHRob3NlIGFubm95aW5nIHN5c2ZzIHdhcm5pbmdzLiBHaXZlbiBTeXprYWxsZXIncyBmb2N1cyBvbiBleGVyY2lzaW5nIEJsdWV0b290aCBjb25uZWN0aW9uIGNyZWF0aW9uL3RlYXJkb3duIGFuZCByZmNvbW0gdHR5IGRldmljZXMsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuXG5cblNvLCBsZXQncyB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMgb25lIGxhc3QgdGltZTogQlQsIEJUX1JGQ09NTSwgQlRfUkZDT01NX1RUWS4gQ2hlY2suIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zLCBvZiBjb3Vyc2U6XG4tIEVuYWJsZUNvbmZpZ3M6IFtcIkJUXCIsIFwiQlRfUkZDT01NXCIsIFwiQlRfUkZDT01NX1RUWVwiXVxuLSBGb2N1c1N5bWJvbHM6IFtcImhjaV9jb25uX2luaXRfc3lzZnNcIiwgXCJoY2lfY29ubl9kZWxfc3lzZnNcIiwgXCJidF9saW5rX3JlbGVhc2VcIiwgXCJfX21hdGNoX3R0eVwiXVxuLSBXb3J0aEZ1enppbmc6IHRydWVcbi0gUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuXG5cbkZpbmFsbHksIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOiBFbmFibGVDb25maWdzIChhIGxpc3Qgb2Ygc3RyaW5ncywgbm8gQ09ORklHXyBwcmVmaXgpLCBGb2N1c1N5bWJvbHMgKGEgbGlzdCBvZiBzdHJpbmdzKSwgUmVhc29uaW5nIChhIHN0cmluZywgdG8ganVzdGlmeSBteSBkZWNpc2lvbiksIGFuZCBXb3J0aEZ1enppbmcgKGEgYm9vbGVhbikuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQyLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzozNC41OTM2NTM1ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc5MTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX1JGQ09NTVwiLFxuICAgIFwiQlRfUkZDT01NX1RUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9jb25uX2luaXRfc3lzZnNcIixcbiAgICBcImhjaV9jb25uX2RlbF9zeXNmc1wiLFxuICAgIFwiYnRfbGlua19yZWxlYXNlXCIsXG4gICAgXCJfX21hdGNoX3R0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNoaWxkIGRldmljZSBmaWx0ZXJpbmcgZHVyaW5nIEJsdWV0b290aCBIQ0kgY29ubmVjdGlvbiBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gaW4gbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgaGVhdmlseSBleGVyY2lzZWQgdmlhIEJsdWV0b290aCBIQ0kvUkZDT01NIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIG9yIHN5c2ZzIGhpZXJhcmNoeSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX1JGQ09NTVwiLFxuICAgIFwiQlRfUkZDT01NX1RUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9jb25uX2luaXRfc3lzZnNcIixcbiAgICBcImhjaV9jb25uX2RlbF9zeXNmc1wiLFxuICAgIFwiYnRfbGlua19yZWxlYXNlXCIsXG4gICAgXCJfX21hdGNoX3R0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNoaWxkIGRldmljZSBmaWx0ZXJpbmcgZHVyaW5nIEJsdWV0b290aCBIQ0kgY29ubmVjdGlvbiBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gaW4gbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgaGVhdmlseSBleGVyY2lzZWQgdmlhIEJsdWV0b290aCBIQ0kvUkZDT01NIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIG9yIHN5c2ZzIGhpZXJhcmNoeSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjM0LjY3NTQ1MTQ0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDQ1OTMwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzozNC42NzU4Njc4MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjE0NDE3MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyArMTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXHUwMDNlcGFyZW50O1xuK1xuIFx0a2ZyZWUoY29ubik7XG4rXHRwdXRfZGV2aWNlKHBhcmVudCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiB9O1xuIFxuKy8qXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4rICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJ3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4rICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcInJmY29tbVwiLCA2KTtcbit9XG4rXG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICs0Miw3IEBAIHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gXG4gXHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiBcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4tXHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZoZGV2LVx1MDAzZWRldjtcbitcdGNvbm4tXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXHUwMDI2aGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuIH1cbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbitcdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIE5VTEwsIF9fbWF0Y2hfdHR5KTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjM0LjY3NTg2OTkzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzUwNzIzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIEJsdWV0b290aCBIQ0kgU3lzZnMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgYSB0aG9yb3VnaCBpbnNwZWN0aW9uLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgdGhlIEhDSSAoSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSkgc3lzZnMgaW50ZXJmYWNlIGxpdmVzIOKAkyB0aGUgd2F5IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBCbHVldG9vdGggaGFyZHdhcmUgY29uZmlndXJhdGlvbnMsIHJpZ2h0PyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgY2hhbmdpbmcgd2l0aGluIHRoYXQgY29udGV4dC4gSSdsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjQwLjQyNjU5NTMxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcXG4gIDEwOlxcdFxcdC5uYW1lID0gXFxcImJsdWV0b290aFxcXCIsXFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiAgMTQ6XFx0e1xcbiAgMTU6XFx0XFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRrZnJlZShjb25uKTtcXG4gIDE5OlxcdFxcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbiAgMjM6XFx0XFx0Lm5hbWUgICAgPSBcXFwibGlua1xcXCIsXFxuICAyNDpcXHRcXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBUaGUgcmZjb21tIHR0eSBkZXZpY2Ugd2lsbCBwb3NzaWJseSByZXRhaW4gZXZlbiB3aGVuIGNvbm5cXG4gIDI5OlxcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbiAgMzA6XFx0ICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcXFwicmZjb21tXFxcIiwgNik7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gIDQ0OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZidF9jbGFzcztcXG4gIDQ1OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFxcdTAwMjZoZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVxcdTAwM2VoZGV2O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRidF9kZXZfZGJnKGhkZXYsIFxcXCJjb25uICVwXFxcIiwgY29ubik7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSlcXG4gIDU3OlxcdFxcdFxcdHJldHVybjtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYsIFxcXCIlczolZFxcXCIsIGhkZXYtXFx1MDAzZW5hbWUsIGNvbm4tXFx1MDAzZWhhbmRsZSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChkZXZpY2VfYWRkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpIFxcdTAwM2MgMClcXG4gIDYyOlxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVxcXCIpO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSkge1xcbiAgNzI6XFx0XFx0XFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXFxuICA3MzpcXHRcXHRcXHQgKiB0byBkcm9wIHRoZSByZWZlcmVuY2UgY291bnQuXFxuICA3NDpcXHRcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmNvbm4tXFx1MDAzZWRldik7XFxuICA3NjpcXHRcXHRcXHRyZXR1cm47XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXFxuICA4MDpcXHRcXHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHR3aGlsZSAoMSkge1xcbiAgODM6XFx0XFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuICA4NjpcXHRcXHRcXHRpZiAoIWRldilcXG4gIDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgODg6XFx0XFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcbiAgODk6XFx0XFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdG9faGNpX2RldihkZXYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XFxuIDEwMDpcXHRcXHRcXHRoY2lfcmVsZWFzZV9kZXYoaGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjQwLjQyNjY3MTU4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjM5MzMyMzU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIEJsdWV0b290aCBTeXNmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIEJsdWV0b290aCBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBzeXNmcyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBgaGNpX2Nvbm5gIHN5c2ZzIGRldmljZSBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMuIEkgc2VlIHRoZSBtYWluIGNoYW5nZXMgYXJlIGFyb3VuZCByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIHdpdGhpbiB0aGUgZGV2aWNlIGhpZXJhcmNoeS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gb2JzZXJ2aW5nIHRoZSBmb2xsb3dpbmc6XG5cbjEuICBJbiBgYnRfbGlua19yZWxlYXNlYCwgaXQgc2VlbXMgdGhleSdyZSBmaXhpbmcgYW4gaXNzdWUgd2l0aCBkcm9wcGluZyB0aGUgcmVmY291bnQgb2YgYHBhcmVudGAgd2hlbiBmcmVlaW5nIGBjb25uYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYHB1dF9kZXZpY2VgIGNhbGwuXG4yLiAgYGhjaV9jb25uX2luaXRfc3lzZnNgIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGRldmljZSAoYGhkZXYtXHUwMDNlZGV2YCkgYW5kIGFzc2lnbmluZyBpdCB0byBgY29ubi1cdTAwM2VkZXYucGFyZW50YCB1c2luZyBgZ2V0X2RldmljZWAuXG4zLiAgVGhlIHVzZSBvZiBgZGV2aWNlX2ZpbmRfY2hpbGRgIHdpdGggYF9fbWF0Y2hfdHR5YCBpbiBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCBpbmRpY2F0ZXMgYSB0YXJnZXRlZCBhcHByb2FjaCB0byBtb3ZpbmcgKm9ubHkqIHRoZSByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMgZHVyaW5nIGNsZWFudXAsIGluc3RlYWQgb2YgYSBicm9hZGVyIHNlYXJjaC5cblxuTm93LCBJJ20gZ29pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gQXJlIHRoZXkgaW50cm9kdWNpbmcgYW55IHBvdGVudGlhbCBpbmZvIGxlYWtzP1xuXG5BZnRlciBhIHF1aWNrIGNvZGUgd2Fsay10aHJvdWdoOlxuXG4qICAgVGhlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHVzaW5nIGBnZXRfZGV2aWNlYCwgYHB1dF9kZXZpY2VgLCBhbmQgYGtmcmVlYCBhcHBlYXIgc3RhbmRhcmQgYW5kIHNhZmUuXG4qICAgYF9fbWF0Y2hfdHR5YCB1c2VzIHN0cmluZyBjb21wYXJpc29uIGFuZCBgZGV2aWNlX2ZpbmRfY2hpbGRgIGRvZXMgYSBmdW5jdGlvbiBsb29rdXAuXG4qICAgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgaXNzdWVzIGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdXNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IHJlZmluaW5nIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGRldmljZSBoaWVyYXJjaHkvcmVwYXJlbnRpbmcgd2l0aGluIHRoZSBCbHVldG9vdGggc3lzZnMgbGlmZWN5Y2xlLlxuXG5BbnkgYnVncyB0aGF0IG1pZ2h0IHN1cmZhY2UgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnQgbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyByZWxhdGVkIHRvIHN5c2ZzIGhpZXJhcmNoeSBwcm9ibGVtcy4gVGhlc2Ugd291bGQgbGlrZWx5IGJlIGNhdWdodCBieSBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcgdG9vbHMsIGFuZCBsb2NrZGVwLiBUaGVyZSdzIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gZml0IHRoZSBjcml0ZXJpYTogaXQgcHJpbWFyaWx5IHJpc2tzIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIChsZXNzIGxpa2VseSBpbiB0aGlzIGNhc2UpLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGRldGVjdG9ycy4gQWxzbywgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzgsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6NTYuODIwMDIxMzA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmY291bnRpbmcgYW5kIHN5c2ZzIGNoaWxkIGRldmljZSByZXBhcmVudGluZyBpbiBCbHVldG9vdGggSENJIChuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBjb25uLVxcdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBoaWVyYXJjaHksIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5L3JlZmNvdW50IGxlYWtzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgc3RhY2svaGVhcCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UgaW52b2x2ZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowk4p4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 13:23:19 +0000 UTC FinishedAt: 2026-09-04 13:27:58 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_RFCOMM", "BT_RFCOMM_TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BT", "BT_RFCOMM", "BT_RFCOMM_TTY" ], "series_id": "1d9309f6-c32f-4a74-9df8-593b0f6b7e19" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hci_conn_init_sysfs", "hci_conn_del_sysfs", "bt_link_release", "__match_tty" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JUJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTSYjMzQ7LAogICAgJiMzNDtCVF9SRkNPTU1fVFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGNpX2Nvbm5faW5pdF9zeXNmcyYjMzQ7LAogICAgJiMzNDtoY2lfY29ubl9kZWxfc3lzZnMmIzM0OywKICAgICYjMzQ7YnRfbGlua19yZWxlYXNlJiMzNDssCiAgICAmIzM0O19fbWF0Y2hfdHR5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjaGlsZCBkZXZpY2UgZmlsdGVyaW5nIGR1cmluZyBCbHVldG9vdGggSENJIGNvbm5lY3Rpb24gc3lzZnMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIGluIG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGhlYXZpbHkgZXhlcmNpc2VkIHZpYSBCbHVldG9vdGggSENJL1JGQ09NTSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBzeXNmcyBoaWVyYXJjaHkgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGNkMWNhZGVhNjllMmE0ZDM0OGY3Mjk1ZDc2Njc0YWIwMWNkMGExOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTM6Mjc6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyAmIzQzOzEzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7XG4gc3RhdGljIHZvaWQgYnRfbGlua19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSB0b19oY2lfY29ubihkZXYpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VwYXJlbnQ7XG4mIzQzO1xuIFx0a2ZyZWUoY29ubik7XG4mIzQzO1x0cHV0X2RldmljZShwYXJlbnQpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG5AQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbiBcdC5yZWxlYXNlID0gYnRfbGlua19yZWxlYXNlLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ublxuJiM0MzsgKiBpcyBkb3duLCBhbmQgc3lzZnMgZG9lc24mIzM5O3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4mIzQzOyAqIHNvIHdlIHNob3VsZCBtb3ZlIHRoZSBkZXZpY2UgYmVmb3JlIGNvbm4gZGV2aWNlIGlzIGRlc3Ryb3llZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuICFzdHJuY21wKGRldl9uYW1lKGRldiksIFwmIzM0O3JmY29tbVwmIzM0OywgNik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxuIFxuIFx0Y29ubi1cdTAwM2VkZXYudHlwZSA9IFx1MDAyNmJ0X2xpbms7XG4gXHRjb25uLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmJ0X2NsYXNzO1xuLVx0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gXHUwMDI2aGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldik7XG4gXG4gXHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gfVxuQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiYjNDM7XHRcdGRldiA9IGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XG4gXHRcdGlmICghZGV2KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xMyw3ICYjNDM7MTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHsKIHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LSZndDtwYXJlbnQ7CiYjNDM7CiAJa2ZyZWUoY29ubik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0gewpAQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHsKIAkucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ubgomIzQzOyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSwKJiM0MzsgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgJiMzNDtyZmNvbW0mIzM0OywgNik7CiYjNDM7fQomIzQzOwogdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tJmd0O2hkZXY7CkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKQogCiAJY29ubi0mZ3Q7ZGV2LnR5cGUgPSAmYW1wO2J0X2xpbms7CiAJY29ubi0mZ3Q7ZGV2LmNsYXNzID0gJmFtcDtidF9jbGFzczsKLQljb25uLSZndDtkZXYucGFyZW50ID0gJmFtcDtoZGV2LSZndDtkZXY7CiYjNDM7CWNvbm4tJmd0O2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZhbXA7aGRldi0mZ3Q7ZGV2KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKIH0KQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQkJZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKJiM0MzsJCWRldiA9IGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQmx1ZXRvb3RoIEhDSSBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIHRvdWNoZWQuIEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIGZvY3VzIGNvbnNpZGVyYWJseS4gTm93LCBiZWZvcmUgSSBqdW1wIHRvIGFueSBjb25jbHVzaW9ucywgSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgaW5zcGVjdCBgbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuY2AgaXRzZWxmLiBJIHdpbGwgbmVlZCB0byBjaGVjayBhbmQgdGhpbmsgYWJvdXQgdGhlIGFzc29jaWF0ZWQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNlcnRhaW4gb2YgdGhlIGltcGxpY2F0aW9ucyBhbmQgc2lkZSBlZmZlY3RzIG9mIHRoZSBjaGFuZ2VzLgoKVGltZSB0byBwdWxsIHVwIHRoZSBmaWxlLiBJIHdpbGwgdXNlIGByZWFkLWZpbGVgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXMgb24gbGluZXMgMSB0aHJvdWdoIDEwMC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBzdHJ1Y3R1cmUsIHRoZSByZWxldmFudCBpbmNsdWRlcywgYW5kIGxpa2VseSB0aGUgY3JpdGljYWwgaW5pdGlhbCBkZWNsYXJhdGlvbnMgdGhhdCB3aWxsIGZyYW1lIHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gV2l0aCB0aGF0IGNvbnRleHQgaW4gaGFuZCwgSSBjYW4gc3RhcnQgdG8gYXNzZXNzIHRoZSBpbXBhY3QgYW5kIHJlYXNvbmluZyBiZWhpbmQgdGhlIG1vZGlmaWNhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xuICAgMzpcdFxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9ibHVldG9vdGguaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3MgYnRfY2xhc3MgPSB7XG4gIDEwOlx0XHQubmFtZSA9IFwmIzM0O2JsdWV0b290aFwmIzM0OyxcbiAgMTE6XHR9O1xuICAxMjpcdFxuICAxMzpcdHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDE0Olx0e1xuICAxNTpcdFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcbiAgMTY6XHRcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cdTAwM2VwYXJlbnQ7XG4gIDE3Olx0XG4gIDE4Olx0XHRrZnJlZShjb25uKTtcbiAgMTk6XHRcdHB1dF9kZXZpY2UocGFyZW50KTtcbiAgMjA6XHR9XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xuICAyMzpcdFx0Lm5hbWUgICAgPSBcJiMzNDtsaW5rXCYjMzQ7LFxuICAyNDpcdFx0LnJlbGVhc2UgPSBidF9saW5rX3JlbGVhc2UsXG4gIDI1Olx0fTtcbiAgMjY6XHRcbiAgMjc6XHQvKlxuICAyODpcdCAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ublxuICAyOTpcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSxcbiAgMzA6XHQgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuXG4gIDMxOlx0ICovXG4gIDMyOlx0c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpXG4gIDMzOlx0e1xuICAzNDpcdFx0cmV0dXJuICFzdHJuY21wKGRldl9uYW1lKGRldiksIFwmIzM0O3JmY29tbVwmIzM0OywgNik7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gIDM4Olx0e1xuICAzOTpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVx1MDAzZWhkZXY7XG4gIDQwOlx0XG4gIDQxOlx0XHRidF9kZXZfZGJnKGhkZXYsIFwmIzM0O2Nvbm4gJXBcJiMzNDssIGNvbm4pO1xuICA0MjpcdFxuICA0MzpcdFx0Y29ubi1cdTAwM2VkZXYudHlwZSA9IFx1MDAyNmJ0X2xpbms7XG4gIDQ0Olx0XHRjb25uLVx1MDAzZWRldi5jbGFzcyA9IFx1MDAyNmJ0X2NsYXNzO1xuICA0NTpcdFx0Y29ubi1cdTAwM2VkZXYucGFyZW50ID0gZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldik7XG4gIDQ2Olx0XG4gIDQ3Olx0XHRkZXZpY2VfaW5pdGlhbGl6ZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDQ4Olx0fVxuICA0OTpcdFxuICA1MDpcdHZvaWQgaGNpX2Nvbm5fYWRkX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNTM6XHRcbiAgNTQ6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDU1Olx0XG4gIDU2Olx0XHRpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2Y29ubi1cdTAwM2VkZXYpKVxuICA1NzpcdFx0XHRyZXR1cm47XG4gIDU4Olx0XG4gIDU5Olx0XHRkZXZfc2V0X25hbWUoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIFwmIzM0OyVzOiVkXCYjMzQ7LCBoZGV2LVx1MDAzZW5hbWUsIGNvbm4tXHUwMDNlaGFuZGxlKTtcbiAgNjA6XHRcbiAgNjE6XHRcdGlmIChkZXZpY2VfYWRkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KSBcdTAwM2MgMClcbiAgNjI6XHRcdFx0YnRfZGV2X2VycihoZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdGlvbiBkZXZpY2VcJiMzNDspO1xuICA2MzpcdH1cbiAgNjQ6XHRcbiAgNjU6XHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gIDY2Olx0e1xuICA2NzpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVx1MDAzZWhkZXY7XG4gIDY4Olx0XG4gIDY5Olx0XHRidF9kZXZfZGJnKGhkZXYsIFwmIzM0O2Nvbm4gJXBcJiMzNDssIGNvbm4pO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZjb25uLVx1MDAzZWRldikpIHtcbiAgNzI6XHRcdFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXG4gIDczOlx0XHRcdCAqIHRvIGRyb3AgdGhlIHJlZmVyZW5jZSBjb3VudC5cbiAgNzQ6XHRcdFx0ICovXG4gIDc1Olx0XHRcdHB1dF9kZXZpY2UoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuICA3NjpcdFx0XHRyZXR1cm47XG4gIDc3Olx0XHR9XG4gIDc4Olx0XG4gIDc5Olx0XHQvKiBJZiB0aGVyZSBhcmUgZGV2aWNlcyB1c2luZyB0aGUgY29ubmVjdGlvbiBhcyBwYXJlbnQgcmVzZXQgaXQgdG8gTlVMTFxuICA4MDpcdFx0ICogYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZS5cbiAgODE6XHRcdCAqL1xuICA4MjpcdFx0d2hpbGUgKDEpIHtcbiAgODM6XHRcdFx0c3RydWN0IGRldmljZSAqZGV2O1xuICA4NDpcdFxuICA4NTpcdFx0XHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcdTAwMjZjb25uLVx1MDAzZWRldiwgTlVMTCwgX19tYXRjaF90dHkpO1xuICA4NjpcdFx0XHRpZiAoIWRldilcbiAgODc6XHRcdFx0XHRicmVhaztcbiAgODg6XHRcdFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xuICA4OTpcdFx0XHRwdXRfZGV2aWNlKGRldik7XG4gIDkwOlx0XHR9XG4gIDkxOlx0XG4gIDkyOlx0XHRkZXZpY2VfdW5yZWdpc3RlcihcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDkzOlx0fVxuICA5NDpcdFxuICA5NTpcdHN0YXRpYyB2b2lkIGJ0X2hvc3RfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gIDk2Olx0e1xuICA5NzpcdFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSB0b19oY2lfZGV2KGRldik7XG4gIDk4Olx0XG4gIDk5Olx0XHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XG4gMTAwOlx0XHRcdGhjaV9yZWxlYXNlX2RldihoZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCbHVldG9vdGggYW5kIGhjaV9zeXNmcy5jIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBuZXQvYmx1ZXRvb3RoYCBhbmQgc3BlY2lmaWNhbGx5IGhvdyBgaGNpX3N5c2ZzLmNgIGlzIGhhbmRsZWQuIE15IGZpcnN0IG1vdmUgaXMgYWx3YXlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMg4oCTIHRoZXkmIzM5O3JlIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkIG9wdGlvbnMsIHNvIEkmIzM5O2xsIGdvIGRpZ2dpbmcgaW4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoYXQgY29kZSBpcyBjb21waWxlZC4KClRoZW4sIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJ4oCZbGwgbmVlZCB0byBzZWUgaG93IHRoZSBvYmplY3QgZmlsZSBpdHNlbGYgaXMgYnVpbHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBidWlsZCBzeXN0ZW0gaXMgdXNpbmcgZm9yIGBoY2lfc3lzZnMub2AsIHNvIEkgd2lsbCB1c2UgYGdyZXBgIGluIGBuZXQvYmx1ZXRvb3RoL01ha2VmaWxlYCB0byBsb2NhdGUgd2hlcmUgYGhjaV9zeXNmcy5vYCBpcyByZWZlcmVuY2VkLiBIb3BlZnVsbHkgdGhhdCB3aWxsIGdpdmUgbWUgZW5vdWdoIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlIGJ1aWxkIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX3N5c2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoL01ha2VmaWxlPTE0PWJsdWV0b290aC15IDo9IGFmX2JsdWV0b290aC5vIGhjaV9jb3JlLm8gaGNpX2Nvbm4ubyBoY2lfZXZlbnQubyBtZ210Lm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGU6MTU6XHRoY2lfc29jay5vIGhjaV9zeXNmcy5vIGwyY2FwX2NvcmUubyBsMmNhcF9zb2NrLm8gc21wLm8gbGliLm8gXFxcbm5ldC9ibHVldG9vdGgvTWFrZWZpbGUtMTYtXHRlY2RoX2hlbHBlci5vIG1nbXRfdXRpbC5vIG1nbXRfY29uZmlnLm8gaGNpX2NvZGVjLm8gZWlyLm8gaGNpX3N5bmMubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyODEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kIHJlZ2FyZGluZyBCbHVldG9vdGggY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gR2l2ZW4gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgbmV0L2JsdWV0b290aC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIHdpdGhpbiB0aGUgYmx1ZXRvb3RoIG1vZHVsZSAtIGxpa2VseSBzdGFydGluZyB3aXRoIGEgZ3JlcCBmb3IgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgbGlrZSBgQlRgLCBgQlRfUkZDT01NYCwgYW5kIHBlcmhhcHMgb3RoZXJzIHNwZWNpZmljIHRvIHRoZSBwcm90b2NvbHMgb3IgZmVhdHVyZXMgSSBoYXZlIGluIG1pbmQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUga2VybmVsIGlzIHN0cnVjdHVyZWQgZm9yIGhhbmRsaW5nIEJsdWV0b290aC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZnJhbWV3b3JrIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMgb2YgbXkgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvS2NvbmZpZy01LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjY6bWVudWNvbmZpZyBCVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtCbHVldG9vdGggc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDEtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNDMtXHRib29sIFwmIzM0O0JsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcJiMzNDtuZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZ1wmIzM0O1xubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjU4OmNvbmZpZyBCVF9MRVxubmV0L2JsdWV0b290aC9LY29uZmlnLTU5LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTG93IEVuZXJneSAoTEUpIGZlYXR1cmVzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTY1LVxubmV0L2JsdWV0b290aC9LY29uZmlnOjY2OmNvbmZpZyBCVF9MRV9MMkNBUF9FQ1JFRFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVx0Ym9vbCBcJiMzNDtCbHVldG9vdGggTDJDQVAgRW5oYW5jZWQgQ3JlZGl0IEZsb3cgQ29udHJvbFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03Ni1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxubmV0L2JsdWV0b290aC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7Qmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo4Mzpjb25maWcgQlRfTEVEU1xubmV0L2JsdWV0b290aC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtFbmFibGUgTEVEIHRyaWdnZXJzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTkxLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjkyOmNvbmZpZyBCVF9NU0ZURVhUXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXHRib29sIFwmIzM0O0VuYWJsZSBNaWNyb3NvZnQgZXh0ZW5zaW9uc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05OC1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMDY6Y29uZmlnIEJUX0RFQlVHRlNcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDctXHRib29sIFwmIzM0O0V4cG9ydCBCbHVldG9vdGggaW50ZXJuYWxzIGluIGRlYnVnZnNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTEzLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjExNDpjb25maWcgQlRfU0VMRlRFU1Rcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXHRib29sIFwmIzM0O0JsdWV0b290aCBzZWxmIHRlc3Rpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMjYtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTI4LVx0Ym9vbCBcJiMzNDtFQ0RIIHRlc3QgY2FzZXNcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxubmV0L2JsdWV0b290aC9LY29uZmlnOjEzNDpjb25maWcgQlRfU0VMRlRFU1RfU01QXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTM1LVx0Ym9vbCBcJiMzNDtTTVAgdGVzdCBjYXNlc1wmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xNDAtXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTQxOmNvbmZpZyBCVF9GRUFUVVJFX0RFQlVHXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVx0Ym9vbCBcJiMzNDtFbmFibGUgcnVudGltZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBzdGF0ZW1lbnRzXCYjMzQ7XG4tLVxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjI6Y29uZmlnIEJUX0JORVBcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtCTkVQIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xMy1cbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjE0OmNvbmZpZyBCVF9CTkVQX01DX0ZJTFRFUlxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWctMTUtXHRib29sIFwmIzM0O011bHRpY2FzdCBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnLTE5LVxubmV0L2JsdWV0b290aC9ibmVwL0tjb25maWc6MjA6Y29uZmlnIEJUX0JORVBfUFJPVE9fRklMVEVSXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7UHJvdG9jb2wgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYmx1ZXRvb3RoL2hpZHAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWc6Mjpjb25maWcgQlRfSElEUFxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0hJRFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWc6Mjpjb25maWcgQlRfUkZDT01NXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtSRkNPTU0gcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMTItXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnOjEzOmNvbmZpZyBCVF9SRkNPTU1fVFRZXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTE0LVx0Ym9vbCBcJiMzNDtSRkNPTU0gVFRZIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTk3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbHVldG9vdGggUGF0Y2g6IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJIHNlZToKCjEuICBgYnRfbGlua19yZWxlYXNlYCBub3cgY2FsbGluZyBgcHV0X2RldmljZShwYXJlbnQpYCBvbiBgZGV2LSZndDtwYXJlbnRgIHdoZW4gdGhlIGBidF9saW5rYCBpcyByZWxlYXNlZC4gVGhpcyBpcyBhIGNydWNpYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gcmVzb3VyY2UgaGFuZGxpbmcuCjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgaW5pdGlhbGl6ZXMgYGNvbm4tJmd0O2Rldi5wYXJlbnRgIHdpdGggYGdldF9kZXZpY2UoJmFtcDtoZGV2LSZndDtkZXYpYC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RhbmRhcmQgcHJhY3RpY2UsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGhlcmUg4oCTIGEgbWlzc2VkIGBwdXRfZGV2aWNlYCBjb3VsZCBsZWFkIHRvIHNlcmlvdXMgbWVtb3J5IGxlYWtzIG9yIGRhbmdsaW5nIHBvaW50ZXJzLgozLiAgVGhlIGFkZGl0aW9uIG9mIHRoZSBgX19tYXRjaF90dHlgIGhlbHBlciBzcGVjaWZpY2FsbHkgZm9yIGByZmNvbW1gIG1hdGNoaW5nIGlzIGludGVyZXN0aW5nLiBUaGlzIGhpbnRzIGF0IG1vcmUgdGFyZ2V0ZWQgZGV2aWNlIGlkZW50aWZpY2F0aW9uLgo0LiAgRmluYWxseSwgYGhjaV9jb25uX2RlbF9zeXNmc2Agbm93IHVzZXMgYGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSlgIGluc3RlYWQgb2YgYGRldmljZV9maW5kX2FueV9jaGlsZGAuIFRoaXMgY2hhbmdlIGlzIHNwZWNpZmljIHRvIHRoZSBSRkNPTU0gZHJpdmVyLCBhbmQgaXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiBob3cgY2hpbGRyZW4gYXJlIGZvdW5kIHRvIG1ha2UgdGhlIHByb2Nlc3MgbW9yZSBlbGVnYW50LgoKVGhlIG5leHQgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBhYm91dCByZWFjaGFiaWxpdHkuICoqQ291bGQgdGhlc2UgbmV3IGNvZGUgcGF0aHMgYmUgdHJpZ2dlcmVkIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyoqIEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHdoZXRoZXIgU3l6a2FsbGVyIGFuZCBvdGhlciBmdXp6ZXJzIGNhbiByZWxpYWJseSBleGVyY2lzZSB0aGVtLiBHaXZlbiB0aGUgZGVzY3JpcHRpb24sIHRoZSBhbnN3ZXIgc2VlbXMgdG8gYmUgYSByZXNvdW5kaW5nIHllcyEgU3l6a2FsbGVyIGV4dGVuc2l2ZWx5IHRlc3RzIEJsdWV0b290aCwgaW5jbHVkaW5nIEhDSSBzb2NrZXRzLCBWSENJLCBSRkNPTU0sIGFuZCBMMkNBUC4gQ29ubmVjdGlvbnMgYXJlIHJvdXRpbmVseSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgdmlhIFZIQ0kgYW5kIFJGQ09NTS4gSWYgdGhpcyBjb2RlIGlzIGNvbm5lY3RlZCB0byBIQ0kgY29ubmVjdGlvbnMgb3ZlciBSRkNPTU0gYW5kIG90aGVyIGNoYW5uZWxzLCB0aGVuIHRoaXMgY29kZSBpcyBoaWdobHkgbGlrZWx5IHRvIGJlIHRyaWdnZXJlZCBpbiB0ZXN0aW5nLgoKTm93LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNhbGwgZ3JhcGhzIGZvciB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uOiBgaGNpX2Nvbm5faW5pdF9zeXNmc2AsIGBoY2lfY29ubl9hZGRfc3lzZnNgLCBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCwgYW5kIGBidF9saW5rX3JlbGVhc2VgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHVzYWdlIGxvY2F0aW9ucyBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGNpX2Nvbm5fKGluaXR8YWRkfGRlbClfc3lzZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvYmx1ZXRvb3RoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMzc9c3RhdGljIHZvaWQgaGNpX2Nvbm5fY2xlYW51cChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4tLVxubmV0L2JsdWV0b290aC9oY2lfY29ubi5jLTE2OS1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxNzA6XHRoY2lfY29ubl9kZWxfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTcxLVxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMDAxPXN0YXRpYyBzdHJ1Y3QgaGNpX2Nvbm4gKl9faGNpX2Nvbm5fYWRkKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgdHlwZSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTE1Mi1cbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxMTUzOlx0aGNpX2Nvbm5faW5pdF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xMTU0LVx0cmV0dXJuIGNvbm47XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz0zMTUwPXN0YXRpYyB2b2lkIGhjaV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMyNDEtXHRcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzozMjQyOlx0XHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTMyNDMtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz01MDM4PXN0YXRpYyB2b2lkIGhjaV9zeW5jX2Nvbm5fY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNC1cdFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxMDU6XHRcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNi1cdFx0YnJlYWs7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz01NzUxPXN0YXRpYyB2b2lkIGxlX2Nvbm5fY29tcGxldGVfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkxLVx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjU4OTI6XHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTU4OTMtXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz02OTY4PXN0YXRpYyB2b2lkIGhjaV9sZV9jaXNfZXN0YWJsaXNoZWRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNzA1MS1cdFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcwNTI6XHRcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNzA1My1cdFx0aGNpX2lzb19zZXR1cF9wYXRoKGNvbm4pO1xuLS1cbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NzE0Nj1zdGF0aWMgdm9pZCBoY2lfbGVfY3JlYXRlX2JpZ19jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MTk3LVx0XHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NzE5ODpcdFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MTk5LVx0XHRoY2lfaXNvX3NldHVwX3BhdGgoY29ubik7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz03MjE3PXN0YXRpYyB2b2lkIGhjaV9sZV9iaWdfc3luY19lc3RhYmxpc2hlZF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXG4tLVxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03Mjc4LVx0XHRcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGJpcyk7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcyNzk6XHRcdFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGJpcyk7XG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcyODAtXHRcdFx0aGNpX2lzb19zZXR1cF9wYXRoKGJpcyk7XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYz0zMj1zdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbi0tXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLTM2LVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzozNzp2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy0zOC17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy00OS1cbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmM6NTA6dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy01MS17XG4tLVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02NC1cbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmM6NjU6dm9pZCBoY2lfY29ubl9kZWxfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NDIKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbHVldG9vdGggUkZDT01NIFRUWSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBCbHVldG9vdGgsIHNwZWNpZmljYWxseSBSRkNPTU0gVFRZIGRldmljZSBoYW5kbGluZy4gIFNvLCBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlRgLCBgQ09ORklHX0JUX1JGQ09NTWAsIGFuZCBgQ09ORklHX0JUX1JGQ09NTV9UVFlgLiAgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbW1lbnQgYW5kIHRoZSBmdW5jdGlvbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGBoY2lfc3lzZnMuY2AuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBjcnVjaWFsOiBgYnRfbGlua19yZWxlYXNlYCwgYF9fbWF0Y2hfdHR5YCwgYGhjaV9jb25uX2luaXRfc3lzZnNgLCBhbmQgYGhjaV9jb25uX2RlbF9zeXNmc2AuIFRob3NlIGFyZSB0aGUgbmV3IG9yIG1vZGlmaWVkIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiAgTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IG9uZXM6IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2RlbF9zeXNmc2AsIGFuZCBgYnRfbGlua19yZWxlYXNlYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGlzIGBfX21hdGNoX3R0eWAgd2hpY2ggc2VlbXMgdG8gYmUgdXNlZCB0byBwZXJmb3JtIHNvbWUgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBvbiBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSAoYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCkuCgpUaGUgYmlnIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LCBpdCBpcy4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiAgV2UmIzM5O3JlIG1vZGlmeWluZyBob3cgcmVmY291bnRpbmcgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIEJsdWV0b290aCBkZXZpY2UgaGllcmFyY2h5LCBzcGVjaWZpY2FsbHkgYXJvdW5kIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiBjb25uZWN0aW9ucywgYW5kIGRldmljZSBmaWx0ZXJpbmcgd2hlbiBtb3ZpbmcgVFRZIGRldmljZXMgYmVmb3JlIEhDSSBjb25uZWN0aW9uIGRldmljZSB0ZWFyZG93bi4gVGhhdCBzY3JlYW1zIHBvdGVudGlhbCBmb3IgcHJvYmxlbXMuICBJbmNvcnJlY3QgcmVmY291bnRpbmcgaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgdXNlLWFmdGVyLWZyZWUgYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgdGhvc2UgYW5ub3lpbmcgc3lzZnMgd2FybmluZ3MuIEdpdmVuIFN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBleGVyY2lzaW5nIEJsdWV0b290aCBjb25uZWN0aW9uIGNyZWF0aW9uL3RlYXJkb3duIGFuZCByZmNvbW0gdHR5IGRldmljZXMsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuCgpTbywgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBjb25maWd1cmF0aW9ucyBvbmUgbGFzdCB0aW1lOiBCVCwgQlRfUkZDT01NLCBCVF9SRkNPTU1fVFRZLiBDaGVjay4gQW5kIHRoZSBpbnN0cnVjdGlvbnMsIG9mIGNvdXJzZToKLSBFbmFibGVDb25maWdzOiBbJiMzNDtCVCYjMzQ7LCAmIzM0O0JUX1JGQ09NTSYjMzQ7LCAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0O10KLSBGb2N1c1N5bWJvbHM6IFsmIzM0O2hjaV9jb25uX2luaXRfc3lzZnMmIzM0OywgJiMzNDtoY2lfY29ubl9kZWxfc3lzZnMmIzM0OywgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywgJiMzNDtfX21hdGNoX3R0eSYjMzQ7XQotIFdvcnRoRnV6emluZzogdHJ1ZQotIFJlYXNvbmluZzogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB0aGUgZnV6emluZyB2ZXJkaWN0LgoKRmluYWxseSwgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2A6IEVuYWJsZUNvbmZpZ3MgKGEgbGlzdCBvZiBzdHJpbmdzLCBubyBDT05GSUdfIHByZWZpeCksIEZvY3VzU3ltYm9scyAoYSBsaXN0IG9mIHN0cmluZ3MpLCBSZWFzb25pbmcgKGEgc3RyaW5nLCB0byBqdXN0aWZ5IG15IGRlY2lzaW9uKSwgYW5kIFdvcnRoRnV6emluZyAoYSBib29sZWFuKS4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlQmIzM0OywKICAgICYjMzQ7QlRfUkZDT01NJiMzNDssCiAgICAmIzM0O0JUX1JGQ09NTV9UVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoY2lfY29ubl9pbml0X3N5c2ZzJiMzNDssCiAgICAmIzM0O2hjaV9jb25uX2RlbF9zeXNmcyYjMzQ7LAogICAgJiMzNDtidF9saW5rX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7X19tYXRjaF90dHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZjb3VudGluZyBhbmQgc3lzZnMgY2hpbGQgZGV2aWNlIHJlcGFyZW50aW5nIGluIEJsdWV0b290aCBIQ0kgKG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMpLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgYGNvbm4tXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxuXG5UaGVzZSBjaGFuZ2VzIHBlcnRhaW4gc3RyaWN0bHkgdG8gb2JqZWN0IGxpZmV0aW1lcywgZGV2aWNlIGhpZXJhcmNoeSwgYW5kIHJlZmVyZW5jZSBjb3VudGluZy4gUG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkvcmVmY291bnQgbGVha3MsIHdoaWNoIGFyZSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5ldyBzdGFjay9oZWFwIGJ1ZmZlcnMsIG9yIGRhdGEgY29waWVzIHRvIHVzZXJzcGFjZSBpbnZvbHZlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC0xMyw3ICYjNDM7MTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHsKIHN0YXRpYyB2b2lkIGJ0X2xpbmtfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTsKJiM0MzsJc3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LSZndDtwYXJlbnQ7CiYjNDM7CiAJa2ZyZWUoY29ubik7CiYjNDM7CXB1dF9kZXZpY2UocGFyZW50KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0gewpAQCAtMjEsNiAmIzQzOzI0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHsKIAkucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSwKIH07CiAKJiM0MzsvKgomIzQzOyAqIFRoZSByZmNvbW0gdHR5IGRldmljZSB3aWxsIHBvc3NpYmx5IHJldGFpbiBldmVuIHdoZW4gY29ubgomIzQzOyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2VzbiYjMzk7dCBzdXBwb3J0IG1vdmUgem9tYmllIGRldmljZSwKJiM0MzsgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBfX21hdGNoX3R0eShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgJiMzNDtyZmNvbW0mIzM0OywgNik7CiYjNDM7fQomIzQzOwogdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tJmd0O2hkZXY7CkBAIC0yOSw3ICYjNDM7NDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKQogCiAJY29ubi0mZ3Q7ZGV2LnR5cGUgPSAmYW1wO2J0X2xpbms7CiAJY29ubi0mZ3Q7ZGV2LmNsYXNzID0gJmFtcDtidF9jbGFzczsKLQljb25uLSZndDtkZXYucGFyZW50ID0gJmFtcDtoZGV2LSZndDtkZXY7CiYjNDM7CWNvbm4tJmd0O2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZhbXA7aGRldi0mZ3Q7ZGV2KTsKIAogCWRldmljZV9pbml0aWFsaXplKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKIH0KQEAgLTY5LDcgJiM0Mzs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQkJZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2KTsKJiM0MzsJCWRldiA9IGRldmljZV9maW5kX2NoaWxkKCZhbXA7Y29ubi0mZ3Q7ZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7CiAJCWlmICghZGV2KQogCQkJYnJlYWs7CiAJCWRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipFeGFtaW5pbmcgdGhlIEJsdWV0b290aCBIQ0kgU3lzZnMgUGF0Y2gqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIGEgdGhvcm91Z2ggaW5zcGVjdGlvbi4gSSBzZWUgdGhpcyBwYXRjaCB0YXJnZXRzIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIHRoZSBIQ0kgKEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UpIHN5c2ZzIGludGVyZmFjZSBsaXZlcyDigJMgdGhlIHdheSB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggQmx1ZXRvb3RoIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCByaWdodD8gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzcGVjaWZpYyBwYXRjaCBpcyBjaGFuZ2luZyB3aXRoaW4gdGhhdCBjb250ZXh0LiBJJiMzOTtsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEzOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qIEJsdWV0b290aCBIQ0kgZHJpdmVyIG1vZGVsIHN1cHBvcnQuICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgIDU6XHRcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2JsdWV0b290aC9oY2lfY29yZS5oXHUwMDNlXG4gICA4Olx0XG4gICA5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiAgMTA6XHRcdC5uYW1lID0gXCYjMzQ7Ymx1ZXRvb3RoXCYjMzQ7LFxuICAxMTpcdH07XG4gIDEyOlx0XG4gIDEzOlx0c3RhdGljIHZvaWQgYnRfbGlua19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiAgMTQ6XHR7XG4gIDE1Olx0XHRzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSB0b19oY2lfY29ubihkZXYpO1xuICAxNjpcdFx0c3RydWN0IGRldmljZSAqcGFyZW50ID0gZGV2LVx1MDAzZXBhcmVudDtcbiAgMTc6XHRcbiAgMTg6XHRcdGtmcmVlKGNvbm4pO1xuICAxOTpcdFx0cHV0X2RldmljZShwYXJlbnQpO1xuICAyMDpcdH1cbiAgMjE6XHRcbiAgMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gIDIzOlx0XHQubmFtZSAgICA9IFwmIzM0O2xpbmtcJiMzNDssXG4gIDI0Olx0XHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdC8qXG4gIDI4Olx0ICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4gIDI5Olx0ICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJiMzOTt0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxuICAzMDpcdCAqIHNvIHdlIHNob3VsZCBtb3ZlIHRoZSBkZXZpY2UgYmVmb3JlIGNvbm4gZGV2aWNlIGlzIGRlc3Ryb3llZC5cbiAgMzE6XHQgKi9cbiAgMzI6XHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcbiAgMzM6XHR7XG4gIDM0Olx0XHRyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgXCYjMzQ7cmZjb21tXCYjMzQ7LCA2KTtcbiAgMzU6XHR9XG4gIDM2Olx0XG4gIDM3Olx0dm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgMzg6XHR7XG4gIDM5Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNDA6XHRcbiAgNDE6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDQyOlx0XG4gIDQzOlx0XHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiAgNDQ6XHRcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4gIDQ1Olx0XHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFx1MDAyNmhkZXYtXHUwMDNlZGV2KTtcbiAgNDY6XHRcbiAgNDc6XHRcdGRldmljZV9pbml0aWFsaXplKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiAgNDg6XHR9XG4gIDQ5Olx0XG4gIDUwOlx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxuICA1MTpcdHtcbiAgNTI6XHRcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi1cdTAwM2VoZGV2O1xuICA1MzpcdFxuICA1NDpcdFx0YnRfZGV2X2RiZyhoZGV2LCBcJiMzNDtjb25uICVwXCYjMzQ7LCBjb25uKTtcbiAgNTU6XHRcbiAgNTY6XHRcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcdTAwMjZjb25uLVx1MDAzZWRldikpXG4gIDU3Olx0XHRcdHJldHVybjtcbiAgNTg6XHRcbiAgNTk6XHRcdGRldl9zZXRfbmFtZShcdTAwMjZjb25uLVx1MDAzZWRldiwgXCYjMzQ7JXM6JWRcJiMzNDssIGhkZXYtXHUwMDNlbmFtZSwgY29ubi1cdTAwM2VoYW5kbGUpO1xuICA2MDpcdFxuICA2MTpcdFx0aWYgKGRldmljZV9hZGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYpIFx1MDAzYyAwKVxuICA2MjpcdFx0XHRidF9kZXZfZXJyKGhkZXYsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVwmIzM0Oyk7XG4gIDYzOlx0fVxuICA2NDpcdFxuICA2NTpcdHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiAgNjY6XHR7XG4gIDY3Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbiAgNjg6XHRcbiAgNjk6XHRcdGJ0X2Rldl9kYmcoaGRldiwgXCYjMzQ7Y29ubiAlcFwmIzM0OywgY29ubik7XG4gIDcwOlx0XG4gIDcxOlx0XHRpZiAoIWRldmljZV9pc19yZWdpc3RlcmVkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KSkge1xuICA3MjpcdFx0XHQvKiBJZiBkZXZpY2VfYWRkKCkgaGFzICpub3QqIHN1Y2NlZWRlZCwgdXNlICpvbmx5KiBwdXRfZGV2aWNlKClcbiAgNzM6XHRcdFx0ICogdG8gZHJvcCB0aGUgcmVmZXJlbmNlIGNvdW50LlxuICA3NDpcdFx0XHQgKi9cbiAgNzU6XHRcdFx0cHV0X2RldmljZShcdTAwMjZjb25uLVx1MDAzZWRldik7XG4gIDc2Olx0XHRcdHJldHVybjtcbiAgNzc6XHRcdH1cbiAgNzg6XHRcbiAgNzk6XHRcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXG4gIDgwOlx0XHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxuICA4MTpcdFx0ICovXG4gIDgyOlx0XHR3aGlsZSAoMSkge1xuICA4MzpcdFx0XHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gIDg0Olx0XG4gIDg1Olx0XHRcdGRldiA9IGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XG4gIDg2Olx0XHRcdGlmICghZGV2KVxuICA4NzpcdFx0XHRcdGJyZWFrO1xuICA4ODpcdFx0XHRkZXZpY2VfbW92ZShkZXYsIE5VTEwsIERQTV9PUkRFUl9ERVZfTEFTVCk7XG4gIDg5Olx0XHRcdHB1dF9kZXZpY2UoZGV2KTtcbiAgOTA6XHRcdH1cbiAgOTE6XHRcbiAgOTI6XHRcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbiAgOTM6XHR9XG4gIDk0Olx0XG4gIDk1Olx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHRvX2hjaV9kZXYoZGV2KTtcbiAgOTg6XHRcbiAgOTk6XHRcdGlmIChoY2lfZGV2X3Rlc3RfZmxhZyhoZGV2LCBIQ0lfVU5SRUdJU1RFUikpIHtcbiAxMDA6XHRcdFx0aGNpX3JlbGVhc2VfZGV2KGhkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc4CgkJCQkJCQlvdXRwdXQ6IDIwNAoJCQkJCQkJdGhvdWdodHM6IDU5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBSZWFzb25pbmcgZm9yIEJsdWV0b290aCBTeXNmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGZvY3VzZWQgb24gQmx1ZXRvb3RoIGRldmljZSBsaWZlY3ljbGUgYW5kIHN5c2ZzIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBoY2lfY29ubmAgc3lzZnMgZGV2aWNlIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHJmY29tbSB0dHkgY2hpbGQgZGV2aWNlcy4gSSBzZWUgdGhlIG1haW4gY2hhbmdlcyBhcmUgYXJvdW5kIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgd2l0aGluIHRoZSBkZXZpY2UgaGllcmFyY2h5LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIG9ic2VydmluZyB0aGUgZm9sbG93aW5nOgoKMS4gIEluIGBidF9saW5rX3JlbGVhc2VgLCBpdCBzZWVtcyB0aGV5JiMzOTtyZSBmaXhpbmcgYW4gaXNzdWUgd2l0aCBkcm9wcGluZyB0aGUgcmVmY291bnQgb2YgYHBhcmVudGAgd2hlbiBmcmVlaW5nIGBjb25uYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYHB1dF9kZXZpY2VgIGNhbGwuCjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgYXBwZWFycyB0byBiZSBjb3JyZWN0bHkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgZGV2aWNlIChgaGRldi0mZ3Q7ZGV2YCkgYW5kIGFzc2lnbmluZyBpdCB0byBgY29ubi0mZ3Q7ZGV2LnBhcmVudGAgdXNpbmcgYGdldF9kZXZpY2VgLgozLiAgVGhlIHVzZSBvZiBgZGV2aWNlX2ZpbmRfY2hpbGRgIHdpdGggYF9fbWF0Y2hfdHR5YCBpbiBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCBpbmRpY2F0ZXMgYSB0YXJnZXRlZCBhcHByb2FjaCB0byBtb3ZpbmcgKm9ubHkqIHRoZSByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMgZHVyaW5nIGNsZWFudXAsIGluc3RlYWQgb2YgYSBicm9hZGVyIHNlYXJjaC4KCk5vdywgSSYjMzk7bSBnb2luZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6IEFyZSB0aGVyZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBBcmUgdGhleSBpbnRyb2R1Y2luZyBhbnkgcG90ZW50aWFsIGluZm8gbGVha3M/CgpBZnRlciBhIHF1aWNrIGNvZGUgd2Fsay10aHJvdWdoOgoKKiAgIFRoZSByZWZjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCB1c2luZyBgZ2V0X2RldmljZWAsIGBwdXRfZGV2aWNlYCwgYW5kIGBrZnJlZWAgYXBwZWFyIHN0YW5kYXJkIGFuZCBzYWZlLgoqICAgYF9fbWF0Y2hfdHR5YCB1c2VzIHN0cmluZyBjb21wYXJpc29uIGFuZCBgZGV2aWNlX2ZpbmRfY2hpbGRgIGRvZXMgYSBmdW5jdGlvbiBsb29rdXAuCiogICBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgaXNzdWVzIGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdXNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHB1cmVseSByZWZpbmluZyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBkZXZpY2UgaGllcmFyY2h5L3JlcGFyZW50aW5nIHdpdGhpbiB0aGUgQmx1ZXRvb3RoIHN5c2ZzIGxpZmVjeWNsZS4KCkFueSBidWdzIHRoYXQgbWlnaHQgc3VyZmFjZSBmcm9tIHRoaXMgY2hhbmdlIHdvdWxkIGJlIHJlZmVyZW5jZSBjb3VudCBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzIHJlbGF0ZWQgdG8gc3lzZnMgaGllcmFyY2h5IHByb2JsZW1zLiBUaGVzZSB3b3VsZCBsaWtlbHkgYmUgY2F1Z2h0IGJ5IEtBU0FOLCByZWZjb3VudCB0cmFja2luZyB0b29scywgYW5kIGxvY2tkZXAuIFRoZXJlJiMzOTtzIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCwgSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRoZSBwYXRjaCBzZWVtcyB0byBmaXQgdGhlIGNyaXRlcmlhOiBpdCBwcmltYXJpbHkgcmlza3MgaXNzdWVzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKGxlc3MgbGlrZWx5IGluIHRoaXMgY2FzZSksIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgZGV0ZWN0b3JzLiBBbHNvLCB0aGVyZSBhcmUgbm8gY29uY2VybnMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm8tbGVha3MsIGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTM6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXG5cblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzowNC4yNDUxMzA3MjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU3NDkyNDAxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCVFwiLFxuICAgIFwiQlRfUkZDT01NXCIsXG4gICAgXCJCVF9SRkNPTU1fVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaGNpX2Nvbm5faW5pdF9zeXNmc1wiLFxuICAgIFwiaGNpX2Nvbm5fZGVsX3N5c2ZzXCIsXG4gICAgXCJidF9saW5rX3JlbGVhc2VcIixcbiAgICBcIl9fbWF0Y2hfdHR5XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmY291bnRpbmcgYW5kIHN5c2ZzIGNoaWxkIGRldmljZSByZXBhcmVudGluZyBpbiBCbHVldG9vdGggSENJIChuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBjb25uLVxcdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBoaWVyYXJjaHksIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5L3JlZmNvdW50IGxlYWtzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgc3RhY2svaGVhcCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UgaW52b2x2ZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBkdXJpbmcgQmx1ZXRvb3RoIEhDSSBjb25uZWN0aW9uIHN5c2ZzIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBpbiBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBoZWF2aWx5IGV4ZXJjaXNlZCB2aWEgQmx1ZXRvb3RoIEhDSS9SRkNPTU0gaW50ZXJmYWNlcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGRldGVjdCBwb3RlbnRpYWwgcmVmZXJlbmNlIGNvdW50IGltYmFsYW5jZXMsIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgb3Igc3lzZnMgaGllcmFyY2h5IGluY29uc2lzdGVuY2llcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6MDQuMjQ1MTQxNzkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxMzQzODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGNkMWNhZGVhNjllMmE0ZDM0OGY3Mjk1ZDc2Njc0YWIwMWNkMGExOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXFxuaW5kZXggODk1N2NlN2MyMWI3Ni4uYzIwNjVhYmY3NTNlMCAxMDA2NDRcXG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXFxuKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuY1xcbkBAIC0xMyw3ICsxMywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNsYXNzIGJ0X2NsYXNzID0ge1xcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbitcXG4gXFx0a2ZyZWUoY29ubik7XFxuK1xcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XFxuIFxcdC5yZWxlYXNlID0gYnRfbGlua19yZWxlYXNlLFxcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXFxuKyAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbisgKiBzbyB3ZSBzaG91bGQgbW92ZSB0aGUgZGV2aWNlIGJlZm9yZSBjb25uIGRldmljZSBpcyBkZXN0cm95ZWQuXFxuKyAqL1xcbitzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRyZXR1cm4gIXN0cm5jbXAoZGV2X25hbWUoZGV2KSwgXFxcInJmY29tbVxcXCIsIDYpO1xcbit9XFxuK1xcbiB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiB7XFxuIFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi1cXHUwMDNlaGRldjtcXG5AQCAtMjksNyArNDIsNyBAQCB2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiBcXG4gXFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gXFx0Y29ubi1cXHUwMDNlZGV2LmNsYXNzID0gXFx1MDAyNmJ0X2NsYXNzO1xcbi1cXHRjb25uLVxcdTAwM2VkZXYucGFyZW50ID0gXFx1MDAyNmhkZXYtXFx1MDAzZWRldjtcXG4rXFx0Y29ubi1cXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXFx1MDAyNmhkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gfVxcbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcXG4gXFx0d2hpbGUgKDEpIHtcXG4gXFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG4tXFx0XFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuIFxcdFxcdGlmICghZGV2KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzowNS44MTcxMDc1ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI4ODU4MzQwMTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJUXCIsXG4gICAgXCJCVF9SRkNPTU1cIixcbiAgICBcIkJUX1JGQ09NTV9UVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoY2lfY29ubl9pbml0X3N5c2ZzXCIsXG4gICAgXCJoY2lfY29ubl9kZWxfc3lzZnNcIixcbiAgICBcImJ0X2xpbmtfcmVsZWFzZVwiLFxuICAgIFwiX19tYXRjaF90dHlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjaGlsZCBkZXZpY2UgZmlsdGVyaW5nIGR1cmluZyBCbHVldG9vdGggSENJIGNvbm5lY3Rpb24gc3lzZnMgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIGluIG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGhlYXZpbHkgZXhlcmNpc2VkIHZpYSBCbHVldG9vdGggSENJL1JGQ09NTSBpbnRlcmZhY2VzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZGV0ZWN0IHBvdGVudGlhbCByZWZlcmVuY2UgY291bnQgaW1iYWxhbmNlcywgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBvciBzeXNmcyBoaWVyYXJjaHkgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyArMTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXHUwMDNlcGFyZW50O1xuK1xuIFx0a2ZyZWUoY29ubik7XG4rXHRwdXRfZGV2aWNlKHBhcmVudCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiB9O1xuIFxuKy8qXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4rICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJ3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4rICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcInJmY29tbVwiLCA2KTtcbit9XG4rXG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICs0Miw3IEBAIHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gXG4gXHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiBcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4tXHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZoZGV2LVx1MDAzZWRldjtcbitcdGNvbm4tXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXHUwMDI2aGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuIH1cbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbitcdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIE5VTEwsIF9fbWF0Y2hfdHR5KTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjA1LjgxNzEwOTE4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3MDEwODE2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCbHVldG9vdGggSENJIFN5c2ZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSB3aGF0J3MgYmVpbmcgdG91Y2hlZC4gQWgsIGl0J3MgbW9kaWZ5aW5nIGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYC4gR29vZCwgdGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIE5vdywgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMsIEknbGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGNhcmVmdWxseSBpbnNwZWN0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBpdHNlbGYuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIGFuZCB0aGluayBhYm91dCB0aGUgYXNzb2NpYXRlZCBLY29uZmlnIG9wdGlvbnMgdG8gYmUgY2VydGFpbiBvZiB0aGUgaW1wbGljYXRpb25zIGFuZCBzaWRlIGVmZmVjdHMgb2YgdGhlIGNoYW5nZXMuXG5cblRpbWUgdG8gcHVsbCB1cCB0aGUgZmlsZS4gSSB3aWxsIHVzZSBgcmVhZC1maWxlYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIGxpbmVzIDEgdGhyb3VnaCAxMDAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgc3RydWN0dXJlLCB0aGUgcmVsZXZhbnQgaW5jbHVkZXMsIGFuZCBsaWtlbHkgdGhlIGNyaXRpY2FsIGluaXRpYWwgZGVjbGFyYXRpb25zIHRoYXQgd2lsbCBmcmFtZSB0aGUgY2hhbmdlcyBpbiB0aGUgcGF0Y2guIFdpdGggdGhhdCBjb250ZXh0IGluIGhhbmQsIEkgY2FuIHN0YXJ0IHRvIGFzc2VzcyB0aGUgaW1wYWN0IGFuZCByZWFzb25pbmcgYmVoaW5kIHRoZSBtb2RpZmljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjEwLjUxODE5Njc4NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcXG4gIDEwOlxcdFxcdC5uYW1lID0gXFxcImJsdWV0b290aFxcXCIsXFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiAgMTQ6XFx0e1xcbiAgMTU6XFx0XFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRrZnJlZShjb25uKTtcXG4gIDE5OlxcdFxcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbiAgMjM6XFx0XFx0Lm5hbWUgICAgPSBcXFwibGlua1xcXCIsXFxuICAyNDpcXHRcXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBUaGUgcmZjb21tIHR0eSBkZXZpY2Ugd2lsbCBwb3NzaWJseSByZXRhaW4gZXZlbiB3aGVuIGNvbm5cXG4gIDI5OlxcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbiAgMzA6XFx0ICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcXFwicmZjb21tXFxcIiwgNik7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gIDQ0OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZidF9jbGFzcztcXG4gIDQ1OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFxcdTAwMjZoZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVxcdTAwM2VoZGV2O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRidF9kZXZfZGJnKGhkZXYsIFxcXCJjb25uICVwXFxcIiwgY29ubik7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSlcXG4gIDU3OlxcdFxcdFxcdHJldHVybjtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYsIFxcXCIlczolZFxcXCIsIGhkZXYtXFx1MDAzZW5hbWUsIGNvbm4tXFx1MDAzZWhhbmRsZSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChkZXZpY2VfYWRkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpIFxcdTAwM2MgMClcXG4gIDYyOlxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVxcXCIpO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSkge1xcbiAgNzI6XFx0XFx0XFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXFxuICA3MzpcXHRcXHRcXHQgKiB0byBkcm9wIHRoZSByZWZlcmVuY2UgY291bnQuXFxuICA3NDpcXHRcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmNvbm4tXFx1MDAzZWRldik7XFxuICA3NjpcXHRcXHRcXHRyZXR1cm47XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXFxuICA4MDpcXHRcXHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHR3aGlsZSAoMSkge1xcbiAgODM6XFx0XFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuICA4NjpcXHRcXHRcXHRpZiAoIWRldilcXG4gIDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgODg6XFx0XFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcbiAgODk6XFx0XFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdG9faGNpX2RldihkZXYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XFxuIDEwMDpcXHRcXHRcXHRoY2lfcmVsZWFzZV9kZXYoaGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjEwLjUxODM0MzE4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxNjk1NDkzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBCbHVldG9vdGggYW5kIGhjaV9zeXNmcy5jIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYG5ldC9ibHVldG9vdGhgIGFuZCBzcGVjaWZpY2FsbHkgaG93IGBoY2lfc3lzZnMuY2AgaXMgaGFuZGxlZC4gTXkgZmlyc3QgbW92ZSBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhleSdyZSB0aGUgc291cmNlIG9mIHRydXRoIGZvciBidWlsZCBvcHRpb25zLCBzbyBJJ2xsIGdvIGRpZ2dpbmcgaW4gYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3B0aW9ucyBtaWdodCBiZSByZWxldmFudC4gVGhhdCB3aWxsIHRlbGwgbWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoYXQgY29kZSBpcyBjb21waWxlZC5cblxuVGhlbiwgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEnigJlsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG9iamVjdCBmaWxlIGl0c2VsZiBpcyBidWlsdC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYnVpbGQgc3lzdGVtIGlzIHVzaW5nIGZvciBgaGNpX3N5c2ZzLm9gLCBzbyBJIHdpbGwgdXNlIGBncmVwYCBpbiBgbmV0L2JsdWV0b290aC9NYWtlZmlsZWAgdG8gbG9jYXRlIHdoZXJlIGBoY2lfc3lzZnMub2AgaXMgcmVmZXJlbmNlZC4gSG9wZWZ1bGx5IHRoYXQgd2lsbCBnaXZlIG1lIGVub3VnaCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzoxNC42ODc4OTQ3NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNTQ3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGNpX3N5c2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ibHVldG9vdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JsdWV0b290aC9NYWtlZmlsZT0xND1ibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIFxcXFxcXG5uZXQvYmx1ZXRvb3RoL01ha2VmaWxlOjE1OlxcdGhjaV9zb2NrLm8gaGNpX3N5c2ZzLm8gbDJjYXBfY29yZS5vIGwyY2FwX3NvY2subyBzbXAubyBsaWIubyBcXFxcXFxubmV0L2JsdWV0b290aC9NYWtlZmlsZS0xNi1cXHRlY2RoX2hlbHBlci5vIG1nbXRfdXRpbC5vIG1nbXRfY29uZmlnLm8gaGNpX2NvZGVjLm8gZWlyLm8gaGNpX3N5bmMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjE0LjczOTA1Njk3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzAzMTc2MjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ2hlY2tpbmcgQmx1ZXRvb3RoIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBnZXQgYSBsYXkgb2YgdGhlIGxhbmQgcmVnYXJkaW5nIEJsdWV0b290aCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBHaXZlbiB3aGF0IEknbSBsb29raW5nIGF0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYG5ldC9ibHVldG9vdGgvS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIHdpdGhpbiB0aGUgYmx1ZXRvb3RoIG1vZHVsZSAtIGxpa2VseSBzdGFydGluZyB3aXRoIGEgZ3JlcCBmb3IgdGhlIG9idmlvdXMgc3VzcGVjdHMuIEkgZXhwZWN0IHRvIGZpbmQgZmxhZ3MgbGlrZSBgQlRgLCBgQlRfUkZDT01NYCwgYW5kIHBlcmhhcHMgb3RoZXJzIHNwZWNpZmljIHRvIHRoZSBwcm90b2NvbHMgb3IgZmVhdHVyZXMgSSBoYXZlIGluIG1pbmQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGUga2VybmVsIGlzIHN0cnVjdHVyZWQgZm9yIGhhbmRsaW5nIEJsdWV0b290aC4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZnJhbWV3b3JrIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMgb2YgbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI4MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjIxLjc3MDgyMTc5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA4NDc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JsdWV0b290aFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmx1ZXRvb3RoL0tjb25maWctNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjptZW51Y29uZmlnIEJUXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkJsdWV0b290aCBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy00MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NDI6Y29uZmlnIEJUX0JSRURSXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTQzLVxcdGJvb2wgXFxcIkJsdWV0b290aCBDbGFzc2ljIChCUi9FRFIpIGZlYXR1cmVzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnPTU2PXNvdXJjZSBcXFwibmV0L2JsdWV0b290aC9oaWRwL0tjb25maWdcXFwiXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTU3LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo1ODpjb25maWcgQlRfTEVcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctNTktXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIExvdyBFbmVyZ3kgKExFKSBmZWF0dXJlc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy02NS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6NjY6Y29uZmlnIEJUX0xFX0wyQ0FQX0VDUkVEXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkJsdWV0b290aCBMMkNBUCBFbmhhbmNlZCBDcmVkaXQgRmxvdyBDb250cm9sXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTc2LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo3Nzpjb25maWcgQlRfNkxPV1BBTlxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiQmx1ZXRvb3RoIDZMb1dQQU4gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy04Mi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6ODM6Y29uZmlnIEJUX0xFRFNcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy05MS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6OTI6Y29uZmlnIEJUX01TRlRFWFRcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctOTMtXFx0Ym9vbCBcXFwiRW5hYmxlIE1pY3Jvc29mdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTk4LVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzo5OTpjb25maWcgQlRfQU9TUEVYVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiRW5hYmxlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBleHRlbnNpb25zXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTA2OmNvbmZpZyBCVF9ERUJVR0ZTXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEwNy1cXHRib29sIFxcXCJFeHBvcnQgQmx1ZXRvb3RoIGludGVybmFscyBpbiBkZWJ1Z2ZzXFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTExMy1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTE0OmNvbmZpZyBCVF9TRUxGVEVTVFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiQmx1ZXRvb3RoIHNlbGYgdGVzdGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyNi1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWc6MTI3OmNvbmZpZyBCVF9TRUxGVEVTVF9FQ0RIXFxubmV0L2JsdWV0b290aC9LY29uZmlnLTEyOC1cXHRib29sIFxcXCJFQ0RIIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTMzLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxMzQ6Y29uZmlnIEJUX1NFTEZURVNUX1NNUFxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiU01QIHRlc3QgY2FzZXNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQwLVxcbm5ldC9ibHVldG9vdGgvS2NvbmZpZzoxNDE6Y29uZmlnIEJUX0ZFQVRVUkVfREVCVUdcXG5uZXQvYmx1ZXRvb3RoL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIkVuYWJsZSBydW50aW1lIG9wdGlvbiBmb3IgZGVidWdnaW5nIHN0YXRlbWVudHNcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9ibHVldG9vdGgvYm5lcC9LY29uZmlnOjI6Y29uZmlnIEJUX0JORVBcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJCTkVQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xMy1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZzoxNDpjb25maWcgQlRfQk5FUF9NQ19GSUxURVJcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJNdWx0aWNhc3QgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0xOS1cXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZzoyMDpjb25maWcgQlRfQk5FUF9QUk9UT19GSUxURVJcXG5uZXQvYmx1ZXRvb3RoL2JuZXAvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJQcm90b2NvbCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L2JsdWV0b290aC9oaWRwL0tjb25maWc6Mjpjb25maWcgQlRfSElEUFxcbm5ldC9ibHVldG9vdGgvaGlkcC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkhJRFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnOjI6Y29uZmlnIEJUX1JGQ09NTVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUkZDT01NIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTEyLVxcbm5ldC9ibHVldG9vdGgvcmZjb21tL0tjb25maWc6MTM6Y29uZmlnIEJUX1JGQ09NTV9UVFlcXG5uZXQvYmx1ZXRvb3RoL3JmY29tbS9LY29uZmlnLTE0LVxcdGJvb2wgXFxcIlJGQ09NTSBUVFkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6MjEuODIwOTA5NTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Mzc3OTExODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgcGFydGljdWxhcmx5IGluIGEgdmlydHVhbGl6ZWQgY29udGV4dC4gSSBzZWU6XG5cbjEuICBgYnRfbGlua19yZWxlYXNlYCBub3cgY2FsbGluZyBgcHV0X2RldmljZShwYXJlbnQpYCBvbiBgZGV2LVx1MDAzZXBhcmVudGAgd2hlbiB0aGUgYGJ0X2xpbmtgIGlzIHJlbGVhc2VkLiBUaGlzIGlzIGEgY3J1Y2lhbCBjaGFuZ2UgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiByZXNvdXJjZSBoYW5kbGluZy5cbjIuICBgaGNpX2Nvbm5faW5pdF9zeXNmc2AgaW5pdGlhbGl6ZXMgYGNvbm4tXHUwMDNlZGV2LnBhcmVudGAgd2l0aCBgZ2V0X2RldmljZShcdTAwMjZoZGV2LVx1MDAzZWRldilgLiBUaGlzIHNlZW1zIGxpa2UgYSBzdGFuZGFyZCBwcmFjdGljZSwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBoZXJlIOKAkyBhIG1pc3NlZCBgcHV0X2RldmljZWAgY291bGQgbGVhZCB0byBzZXJpb3VzIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycy5cbjMuICBUaGUgYWRkaXRpb24gb2YgdGhlIGBfX21hdGNoX3R0eWAgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgYHJmY29tbWAgbWF0Y2hpbmcgaXMgaW50ZXJlc3RpbmcuIFRoaXMgaGludHMgYXQgbW9yZSB0YXJnZXRlZCBkZXZpY2UgaWRlbnRpZmljYXRpb24uXG40LiAgRmluYWxseSwgYGhjaV9jb25uX2RlbF9zeXNmc2Agbm93IHVzZXMgYGRldmljZV9maW5kX2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSlgIGluc3RlYWQgb2YgYGRldmljZV9maW5kX2FueV9jaGlsZGAuIFRoaXMgY2hhbmdlIGlzIHNwZWNpZmljIHRvIHRoZSBSRkNPTU0gZHJpdmVyLCBhbmQgaXQgc3VnZ2VzdHMgYSByZWZhY3RvcmluZyBvZiBob3cgY2hpbGRyZW4gYXJlIGZvdW5kIHRvIG1ha2UgdGhlIHByb2Nlc3MgbW9yZSBlbGVnYW50LlxuXG5UaGUgbmV4dCBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIGFib3V0IHJlYWNoYWJpbGl0eS4gKipDb3VsZCB0aGVzZSBuZXcgY29kZSBwYXRocyBiZSB0cmlnZ2VyZWQgaW4gdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/KiogSSdtIHRoaW5raW5nIHNwZWNpZmljYWxseSBhYm91dCB3aGV0aGVyIFN5emthbGxlciBhbmQgb3RoZXIgZnV6emVycyBjYW4gcmVsaWFibHkgZXhlcmNpc2UgdGhlbS4gR2l2ZW4gdGhlIGRlc2NyaXB0aW9uLCB0aGUgYW5zd2VyIHNlZW1zIHRvIGJlIGEgcmVzb3VuZGluZyB5ZXMhIFN5emthbGxlciBleHRlbnNpdmVseSB0ZXN0cyBCbHVldG9vdGgsIGluY2x1ZGluZyBIQ0kgc29ja2V0cywgVkhDSSwgUkZDT01NLCBhbmQgTDJDQVAuIENvbm5lY3Rpb25zIGFyZSByb3V0aW5lbHkgY3JlYXRlZCBhbmQgZGVzdHJveWVkIHZpYSBWSENJIGFuZCBSRkNPTU0uIElmIHRoaXMgY29kZSBpcyBjb25uZWN0ZWQgdG8gSENJIGNvbm5lY3Rpb25zIG92ZXIgUkZDT01NIGFuZCBvdGhlciBjaGFubmVscywgdGhlbiB0aGlzIGNvZGUgaXMgaGlnaGx5IGxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gdGVzdGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY2FsbCBncmFwaHMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gcXVlc3Rpb246IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2FkZF9zeXNmc2AsIGBoY2lfY29ubl9kZWxfc3lzZnNgLCBhbmQgYGJ0X2xpbmtfcmVsZWFzZWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGFsbCB0aGUgdXNhZ2UgbG9jYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTk3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjI2LjE5ODgyMzk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgyNjgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoY2lfY29ubl8oaW5pdHxhZGR8ZGVsKV9zeXNmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmx1ZXRvb3RoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYz0xMzc9c3RhdGljIHZvaWQgaGNpX2Nvbm5fY2xlYW51cChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTY5LVxcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYzoxNzA6XFx0aGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xNzEtXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmM9MTAwMT1zdGF0aWMgc3RydWN0IGhjaV9jb25uICpfX2hjaV9jb25uX2FkZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMtMTE1Mi1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmM6MTE1MzpcXHRoY2lfY29ubl9pbml0X3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYy0xMTU0LVxcdHJldHVybiBjb25uO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz0zMTUwPXN0YXRpYyB2b2lkIGhjaV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzI0MS1cXHRcXHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjMyNDI6XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtMzI0My1cXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTAzOD1zdGF0aWMgdm9pZCBoY2lfc3luY19jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdm9pZCAqZGF0YSxcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNC1cXHRcXHRoY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjUxMDU6XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMtNTEwNi1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NTc1MT1zdGF0aWMgdm9pZCBsZV9jb25uX2NvbXBsZXRlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkxLVxcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NTg5MjpcXHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy01ODkzLVxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz02OTY4PXN0YXRpYyB2b2lkIGhjaV9sZV9jaXNfZXN0YWJsaXNoZWRfZXZ0KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB2b2lkICpkYXRhLFxcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MDUxLVxcdFxcdGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pO1xcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM6NzA1MjpcXHRcXHRoY2lfY29ubl9hZGRfc3lzZnMoY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MDUzLVxcdFxcdGhjaV9pc29fc2V0dXBfcGF0aChjb25uKTtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmM9NzE0Nj1zdGF0aWMgdm9pZCBoY2lfbGVfY3JlYXRlX2JpZ19jb21wbGV0ZV9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcxOTctXFx0XFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYzo3MTk4OlxcdFxcdGhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcxOTktXFx0XFx0aGNpX2lzb19zZXR1cF9wYXRoKGNvbm4pO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYz03MjE3PXN0YXRpYyB2b2lkIGhjaV9sZV9iaWdfc3luY19lc3RhYmxpc2hlZF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHZvaWQgKmRhdGEsXFxuLS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jLTcyNzgtXFx0XFx0XFx0aGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oYmlzKTtcXG5uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jOjcyNzk6XFx0XFx0XFx0aGNpX2Nvbm5fYWRkX3N5c2ZzKGJpcyk7XFxubmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYy03MjgwLVxcdFxcdFxcdGhjaV9pc29fc2V0dXBfcGF0aChiaXMpO1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYz0zMj1zdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtMzYtXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzozNzp2b2lkIGhjaV9jb25uX2luaXRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtMzgte1xcbi0tXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy00OS1cXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jOjUwOnZvaWQgaGNpX2Nvbm5fYWRkX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcXG5uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jLTUxLXtcXG4tLVxcbm5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMtNjQtXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYzo2NTp2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxubmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy02Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjI2LjI1MzY1NDQ5OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MzM5OTk2OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbHVldG9vdGggUkZDT01NIFRUWSBDb25maWd1cmF0aW9uIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBCbHVldG9vdGgsIHNwZWNpZmljYWxseSBSRkNPTU0gVFRZIGRldmljZSBoYW5kbGluZy4gIFNvLCBJIG5lZWQgdG8gZW5hYmxlIGBDT05GSUdfQlRgLCBgQ09ORklHX0JUX1JGQ09NTWAsIGFuZCBgQ09ORklHX0JUX1JGQ09NTV9UVFlgLiAgUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbW1lbnQgYW5kIHRoZSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdC5cblxuTm93LCBsZXQncyBsb29rIGF0IGBoY2lfc3lzZnMuY2AuIFRoZSBjaGFuZ2VzIHRoZXJlIGFyZSBjcnVjaWFsOiBgYnRfbGlua19yZWxlYXNlYCwgYF9fbWF0Y2hfdHR5YCwgYGhjaV9jb25uX2luaXRfc3lzZnNgLCBhbmQgYGhjaV9jb25uX2RlbF9zeXNmc2AuIFRob3NlIGFyZSB0aGUgbmV3IG9yIG1vZGlmaWVkIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiAgTGV0IG1lIGRvdWJsZS1jaGVjay4uLiBZZXMsIHRob3NlIGFyZSB0aGUga2V5IG9uZXM6IGBoY2lfY29ubl9pbml0X3N5c2ZzYCwgYGhjaV9jb25uX2RlbF9zeXNmc2AsIGFuZCBgYnRfbGlua19yZWxlYXNlYC4gSSBhbHNvIHNlZSB0aGF0IHRoZXJlIGlzIGBfX21hdGNoX3R0eWAgd2hpY2ggc2VlbXMgdG8gYmUgdXNlZCB0byBwZXJmb3JtIHNvbWUgY2hpbGQgZGV2aWNlIGZpbHRlcmluZyBvbiBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSAoYGdldF9kZXZpY2VgL2BwdXRfZGV2aWNlYCkuXG5cblRoZSBiaWcgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHksIGl0IGlzLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuICBXZSdyZSBtb2RpZnlpbmcgaG93IHJlZmNvdW50aW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBCbHVldG9vdGggZGV2aWNlIGhpZXJhcmNoeSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gb2YgY29ubmVjdGlvbnMsIGFuZCBkZXZpY2UgZmlsdGVyaW5nIHdoZW4gbW92aW5nIFRUWSBkZXZpY2VzIGJlZm9yZSBIQ0kgY29ubmVjdGlvbiBkZXZpY2UgdGVhcmRvd24uIFRoYXQgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHByb2JsZW1zLiAgSW5jb3JyZWN0IHJlZmNvdW50aW5nIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIHRob3NlIGFubm95aW5nIHN5c2ZzIHdhcm5pbmdzLiBHaXZlbiBTeXprYWxsZXIncyBmb2N1cyBvbiBleGVyY2lzaW5nIEJsdWV0b290aCBjb25uZWN0aW9uIGNyZWF0aW9uL3RlYXJkb3duIGFuZCByZmNvbW0gdHR5IGRldmljZXMsIHRoaXMgaXMgYSBwcmltZSB0YXJnZXQuXG5cblNvLCBsZXQncyB2ZXJpZnkgdGhvc2UgY29uZmlndXJhdGlvbnMgb25lIGxhc3QgdGltZTogQlQsIEJUX1JGQ09NTSwgQlRfUkZDT01NX1RUWS4gQ2hlY2suIEFuZCB0aGUgaW5zdHJ1Y3Rpb25zLCBvZiBjb3Vyc2U6XG4tIEVuYWJsZUNvbmZpZ3M6IFtcIkJUXCIsIFwiQlRfUkZDT01NXCIsIFwiQlRfUkZDT01NX1RUWVwiXVxuLSBGb2N1c1N5bWJvbHM6IFtcImhjaV9jb25uX2luaXRfc3lzZnNcIiwgXCJoY2lfY29ubl9kZWxfc3lzZnNcIiwgXCJidF9saW5rX3JlbGVhc2VcIiwgXCJfX21hdGNoX3R0eVwiXVxuLSBXb3J0aEZ1enppbmc6IHRydWVcbi0gUmVhc29uaW5nOiBDb25jaXNlIGV4cGxhbmF0aW9uIG9mIHRoZSBmdXp6aW5nIHZlcmRpY3QuXG5cbkZpbmFsbHksIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgOiBFbmFibGVDb25maWdzIChhIGxpc3Qgb2Ygc3RyaW5ncywgbm8gQ09ORklHXyBwcmVmaXgpLCBGb2N1c1N5bWJvbHMgKGEgbGlzdCBvZiBzdHJpbmdzKSwgUmVhc29uaW5nIChhIHN0cmluZywgdG8ganVzdGlmeSBteSBkZWNpc2lvbiksIGFuZCBXb3J0aEZ1enppbmcgKGEgYm9vbGVhbikuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTQyLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzozNC41OTM2NTM1ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc5MTI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX1JGQ09NTVwiLFxuICAgIFwiQlRfUkZDT01NX1RUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9jb25uX2luaXRfc3lzZnNcIixcbiAgICBcImhjaV9jb25uX2RlbF9zeXNmc1wiLFxuICAgIFwiYnRfbGlua19yZWxlYXNlXCIsXG4gICAgXCJfX21hdGNoX3R0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNoaWxkIGRldmljZSBmaWx0ZXJpbmcgZHVyaW5nIEJsdWV0b290aCBIQ0kgY29ubmVjdGlvbiBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gaW4gbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgaGVhdmlseSBleGVyY2lzZWQgdmlhIEJsdWV0b290aCBIQ0kvUkZDT01NIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIG9yIHN5c2ZzIGhpZXJhcmNoeSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlRcIixcbiAgICBcIkJUX1JGQ09NTVwiLFxuICAgIFwiQlRfUkZDT01NX1RUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhjaV9jb25uX2luaXRfc3lzZnNcIixcbiAgICBcImhjaV9jb25uX2RlbF9zeXNmc1wiLFxuICAgIFwiYnRfbGlua19yZWxlYXNlXCIsXG4gICAgXCJfX21hdGNoX3R0eVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGNoaWxkIGRldmljZSBmaWx0ZXJpbmcgZHVyaW5nIEJsdWV0b290aCBIQ0kgY29ubmVjdGlvbiBzeXNmcyBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gaW4gbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgaGVhdmlseSBleGVyY2lzZWQgdmlhIEJsdWV0b290aCBIQ0kvUkZDT01NIGludGVyZmFjZXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBkZXRlY3QgcG90ZW50aWFsIHJlZmVyZW5jZSBjb3VudCBpbWJhbGFuY2VzLCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIG9yIHN5c2ZzIGhpZXJhcmNoeSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjM0LjY3NTQ1MTQ0NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxNDQ1OTMwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMzoyNzozNC42NzU4Njc4MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMjE0NDE3MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRjZDFjYWRlYTY5ZTJhNGQzNDhmNzI5NWQ3NjY3NGFiMDFjZDBhMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEzOjI3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNcbmluZGV4IDg5NTdjZTdjMjFiNzYuLmMyMDY1YWJmNzUzZTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG4rKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXG5AQCAtMTMsNyArMTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcbiBzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBoY2lfY29ubiAqY29ubiA9IHRvX2hjaV9jb25uKGRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBkZXYtXHUwMDNlcGFyZW50O1xuK1xuIFx0a2ZyZWUoY29ubik7XG4rXHRwdXRfZGV2aWNlKHBhcmVudCk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgYnRfbGluayA9IHtcbkBAIC0yMSw2ICsyNCwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJ0X2xpbmsgPSB7XG4gXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcbiB9O1xuIFxuKy8qXG4rICogVGhlIHJmY29tbSB0dHkgZGV2aWNlIHdpbGwgcG9zc2libHkgcmV0YWluIGV2ZW4gd2hlbiBjb25uXG4rICogaXMgZG93biwgYW5kIHN5c2ZzIGRvZXNuJ3Qgc3VwcG9ydCBtb3ZlIHpvbWJpZSBkZXZpY2UsXG4rICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxuKyAqL1xuK3N0YXRpYyBpbnQgX19tYXRjaF90dHkoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCB2b2lkICpkYXRhKVxuK3tcbitcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcInJmY29tbVwiLCA2KTtcbit9XG4rXG4gdm9pZCBoY2lfY29ubl9pbml0X3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiB7XG4gXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXHUwMDNlaGRldjtcbkBAIC0yOSw3ICs0Miw3IEBAIHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXG4gXG4gXHRjb25uLVx1MDAzZWRldi50eXBlID0gXHUwMDI2YnRfbGluaztcbiBcdGNvbm4tXHUwMDNlZGV2LmNsYXNzID0gXHUwMDI2YnRfY2xhc3M7XG4tXHRjb25uLVx1MDAzZWRldi5wYXJlbnQgPSBcdTAwMjZoZGV2LVx1MDAzZWRldjtcbitcdGNvbm4tXHUwMDNlZGV2LnBhcmVudCA9IGdldF9kZXZpY2UoXHUwMDI2aGRldi1cdTAwM2VkZXYpO1xuIFxuIFx0ZGV2aWNlX2luaXRpYWxpemUoXHUwMDI2Y29ubi1cdTAwM2VkZXYpO1xuIH1cbkBAIC02OSw3ICs4Miw3IEBAIHZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubilcbiBcdHdoaWxlICgxKSB7XG4gXHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcbi1cdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfYW55X2NoaWxkKFx1MDAyNmNvbm4tXHUwMDNlZGV2KTtcbitcdFx0ZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQoXHUwMDI2Y29ubi1cdTAwM2VkZXYsIE5VTEwsIF9fbWF0Y2hfdHR5KTtcbiBcdFx0aWYgKCFkZXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRldmljZV9tb3ZlKGRldiwgTlVMTCwgRFBNX09SREVSX0RFVl9MQVNUKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjM0LjY3NTg2OTkzNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzUwNzIzMTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipFeGFtaW5pbmcgdGhlIEJsdWV0b290aCBIQ0kgU3lzZnMgUGF0Y2gqKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3Qgc3RlcCBpcyBhbHdheXMgYSB0aG9yb3VnaCBpbnNwZWN0aW9uLiBJIHNlZSB0aGlzIHBhdGNoIHRhcmdldHMgYG5ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmNgLiBUaGF0IGZpbGUgaXMgd2hlcmUgdGhlIEhDSSAoSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSkgc3lzZnMgaW50ZXJmYWNlIGxpdmVzIOKAkyB0aGUgd2F5IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCBCbHVldG9vdGggaGFyZHdhcmUgY29uZmlndXJhdGlvbnMsIHJpZ2h0PyBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3BlY2lmaWMgcGF0Y2ggaXMgY2hhbmdpbmcgd2l0aGluIHRoYXQgY29udGV4dC4gSSdsbCByZWFjaCBmb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IGBuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jYCBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjQwLjQyNjU5NTMxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQvKiBCbHVldG9vdGggSENJIGRyaXZlciBtb2RlbCBzdXBwb3J0LiAqL1xcbiAgIDM6XFx0XFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBjbGFzcyBidF9jbGFzcyA9IHtcXG4gIDEwOlxcdFxcdC5uYW1lID0gXFxcImJsdWV0b290aFxcXCIsXFxuICAxMTpcXHR9O1xcbiAgMTI6XFx0XFxuICAxMzpcXHRzdGF0aWMgdm9pZCBidF9saW5rX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbiAgMTQ6XFx0e1xcbiAgMTU6XFx0XFx0c3RydWN0IGhjaV9jb25uICpjb25uID0gdG9faGNpX2Nvbm4oZGV2KTtcXG4gIDE2OlxcdFxcdHN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi1cXHUwMDNlcGFyZW50O1xcbiAgMTc6XFx0XFxuICAxODpcXHRcXHRrZnJlZShjb25uKTtcXG4gIDE5OlxcdFxcdHB1dF9kZXZpY2UocGFyZW50KTtcXG4gIDIwOlxcdH1cXG4gIDIxOlxcdFxcbiAgMjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSBidF9saW5rID0ge1xcbiAgMjM6XFx0XFx0Lm5hbWUgICAgPSBcXFwibGlua1xcXCIsXFxuICAyNDpcXHRcXHQucmVsZWFzZSA9IGJ0X2xpbmtfcmVsZWFzZSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qXFxuICAyODpcXHQgKiBUaGUgcmZjb21tIHR0eSBkZXZpY2Ugd2lsbCBwb3NzaWJseSByZXRhaW4gZXZlbiB3aGVuIGNvbm5cXG4gIDI5OlxcdCAqIGlzIGRvd24sIGFuZCBzeXNmcyBkb2Vzbid0IHN1cHBvcnQgbW92ZSB6b21iaWUgZGV2aWNlLFxcbiAgMzA6XFx0ICogc28gd2Ugc2hvdWxkIG1vdmUgdGhlIGRldmljZSBiZWZvcmUgY29ubiBkZXZpY2UgaXMgZGVzdHJveWVkLlxcbiAgMzE6XFx0ICovXFxuICAzMjpcXHRzdGF0aWMgaW50IF9fbWF0Y2hfdHR5KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqZGF0YSlcXG4gIDMzOlxcdHtcXG4gIDM0OlxcdFxcdHJldHVybiAhc3RybmNtcChkZXZfbmFtZShkZXYpLCBcXFwicmZjb21tXFxcIiwgNik7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHZvaWQgaGNpX2Nvbm5faW5pdF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0Y29ubi1cXHUwMDNlZGV2LnR5cGUgPSBcXHUwMDI2YnRfbGluaztcXG4gIDQ0OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5jbGFzcyA9IFxcdTAwMjZidF9jbGFzcztcXG4gIDQ1OlxcdFxcdGNvbm4tXFx1MDAzZWRldi5wYXJlbnQgPSBnZXRfZGV2aWNlKFxcdTAwMjZoZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDY6XFx0XFxuICA0NzpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKVxcbiAgNTE6XFx0e1xcbiAgNTI6XFx0XFx0c3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLVxcdTAwM2VoZGV2O1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRidF9kZXZfZGJnKGhkZXYsIFxcXCJjb25uICVwXFxcIiwgY29ubik7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSlcXG4gIDU3OlxcdFxcdFxcdHJldHVybjtcXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYsIFxcXCIlczolZFxcXCIsIGhkZXYtXFx1MDAzZW5hbWUsIGNvbm4tXFx1MDAzZWhhbmRsZSk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdGlmIChkZXZpY2VfYWRkKFxcdTAwMjZjb25uLVxcdTAwM2VkZXYpIFxcdTAwM2MgMClcXG4gIDYyOlxcdFxcdFxcdGJ0X2Rldl9lcnIoaGRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0aW9uIGRldmljZVxcXCIpO1xcbiAgNjM6XFx0fVxcbiAgNjQ6XFx0XFxuICA2NTpcXHR2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tXFx1MDAzZWhkZXY7XFxuICA2ODpcXHRcXG4gIDY5OlxcdFxcdGJ0X2Rldl9kYmcoaGRldiwgXFxcImNvbm4gJXBcXFwiLCBjb25uKTtcXG4gIDcwOlxcdFxcbiAgNzE6XFx0XFx0aWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KSkge1xcbiAgNzI6XFx0XFx0XFx0LyogSWYgZGV2aWNlX2FkZCgpIGhhcyAqbm90KiBzdWNjZWVkZWQsIHVzZSAqb25seSogcHV0X2RldmljZSgpXFxuICA3MzpcXHRcXHRcXHQgKiB0byBkcm9wIHRoZSByZWZlcmVuY2UgY291bnQuXFxuICA3NDpcXHRcXHRcXHQgKi9cXG4gIDc1OlxcdFxcdFxcdHB1dF9kZXZpY2UoXFx1MDAyNmNvbm4tXFx1MDAzZWRldik7XFxuICA3NjpcXHRcXHRcXHRyZXR1cm47XFxuICA3NzpcXHRcXHR9XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdC8qIElmIHRoZXJlIGFyZSBkZXZpY2VzIHVzaW5nIHRoZSBjb25uZWN0aW9uIGFzIHBhcmVudCByZXNldCBpdCB0byBOVUxMXFxuICA4MDpcXHRcXHQgKiBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgZGV2aWNlLlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHR3aGlsZSAoMSkge1xcbiAgODM6XFx0XFx0XFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHRcXHRkZXYgPSBkZXZpY2VfZmluZF9jaGlsZChcXHUwMDI2Y29ubi1cXHUwMDNlZGV2LCBOVUxMLCBfX21hdGNoX3R0eSk7XFxuICA4NjpcXHRcXHRcXHRpZiAoIWRldilcXG4gIDg3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgODg6XFx0XFx0XFx0ZGV2aWNlX21vdmUoZGV2LCBOVUxMLCBEUE1fT1JERVJfREVWX0xBU1QpO1xcbiAgODk6XFx0XFx0XFx0cHV0X2RldmljZShkZXYpO1xcbiAgOTA6XFx0XFx0fVxcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29ubi1cXHUwMDNlZGV2KTtcXG4gIDkzOlxcdH1cXG4gIDk0OlxcdFxcbiAgOTU6XFx0c3RhdGljIHZvaWQgYnRfaG9zdF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gIDk2OlxcdHtcXG4gIDk3OlxcdFxcdHN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gdG9faGNpX2RldihkZXYpO1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRpZiAoaGNpX2Rldl90ZXN0X2ZsYWcoaGRldiwgSENJX1VOUkVHSVNURVIpKSB7XFxuIDEwMDpcXHRcXHRcXHRoY2lfcmVsZWFzZV9kZXYoaGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEzOjI3OjQwLjQyNjY3MTU4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjM5MzMyMzU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBSZWFzb25pbmcgZm9yIEJsdWV0b290aCBTeXNmcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBmb2N1c2VkIG9uIEJsdWV0b290aCBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBzeXNmcyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBgaGNpX2Nvbm5gIHN5c2ZzIGRldmljZSBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMuIEkgc2VlIHRoZSBtYWluIGNoYW5nZXMgYXJlIGFyb3VuZCByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIHdpdGhpbiB0aGUgZGV2aWNlIGhpZXJhcmNoeS5cblxuU3BlY2lmaWNhbGx5LCBJJ20gb2JzZXJ2aW5nIHRoZSBmb2xsb3dpbmc6XG5cbjEuICBJbiBgYnRfbGlua19yZWxlYXNlYCwgaXQgc2VlbXMgdGhleSdyZSBmaXhpbmcgYW4gaXNzdWUgd2l0aCBkcm9wcGluZyB0aGUgcmVmY291bnQgb2YgYHBhcmVudGAgd2hlbiBmcmVlaW5nIGBjb25uYC4gVGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgYHB1dF9kZXZpY2VgIGNhbGwuXG4yLiAgYGhjaV9jb25uX2luaXRfc3lzZnNgIGFwcGVhcnMgdG8gYmUgY29ycmVjdGx5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGRldmljZSAoYGhkZXYtXHUwMDNlZGV2YCkgYW5kIGFzc2lnbmluZyBpdCB0byBgY29ubi1cdTAwM2VkZXYucGFyZW50YCB1c2luZyBgZ2V0X2RldmljZWAuXG4zLiAgVGhlIHVzZSBvZiBgZGV2aWNlX2ZpbmRfY2hpbGRgIHdpdGggYF9fbWF0Y2hfdHR5YCBpbiBgaGNpX2Nvbm5fZGVsX3N5c2ZzYCBpbmRpY2F0ZXMgYSB0YXJnZXRlZCBhcHByb2FjaCB0byBtb3ZpbmcgKm9ubHkqIHRoZSByZmNvbW0gdHR5IGNoaWxkIGRldmljZXMgZHVyaW5nIGNsZWFudXAsIGluc3RlYWQgb2YgYSBicm9hZGVyIHNlYXJjaC5cblxuTm93LCBJJ20gZ29pbmcgdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OiBBcmUgdGhlcmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gQXJlIHRoZXkgaW50cm9kdWNpbmcgYW55IHBvdGVudGlhbCBpbmZvIGxlYWtzP1xuXG5BZnRlciBhIHF1aWNrIGNvZGUgd2Fsay10aHJvdWdoOlxuXG4qICAgVGhlIHJlZmNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IHVzaW5nIGBnZXRfZGV2aWNlYCwgYHB1dF9kZXZpY2VgLCBhbmQgYGtmcmVlYCBhcHBlYXIgc3RhbmRhcmQgYW5kIHNhZmUuXG4qICAgYF9fbWF0Y2hfdHR5YCB1c2VzIHN0cmluZyBjb21wYXJpc29uIGFuZCBgZGV2aWNlX2ZpbmRfY2hpbGRgIGRvZXMgYSBmdW5jdGlvbiBsb29rdXAuXG4qICAgSSBkb24ndCBzZWUgYW55IG9idmlvdXMgaXNzdWVzIGxpa2UgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgY29uZGl0aW9uYWwgbG9naWMgdXNpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5UaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcHVyZWx5IHJlZmluaW5nIGRldmljZSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGRldmljZSBoaWVyYXJjaHkvcmVwYXJlbnRpbmcgd2l0aGluIHRoZSBCbHVldG9vdGggc3lzZnMgbGlmZWN5Y2xlLlxuXG5BbnkgYnVncyB0aGF0IG1pZ2h0IHN1cmZhY2UgZnJvbSB0aGlzIGNoYW5nZSB3b3VsZCBiZSByZWZlcmVuY2UgY291bnQgbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyByZWxhdGVkIHRvIHN5c2ZzIGhpZXJhcmNoeSBwcm9ibGVtcy4gVGhlc2Ugd291bGQgbGlrZWx5IGJlIGNhdWdodCBieSBLQVNBTiwgcmVmY291bnQgdHJhY2tpbmcgdG9vbHMsIGFuZCBsb2NrZGVwLiBUaGVyZSdzIG5vIGFwcGFyZW50IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5HaXZlbiB0aGF0LCBJJ20gY29uZmlkZW50IHdlIGNhbiBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gZml0IHRoZSBjcml0ZXJpYTogaXQgcHJpbWFyaWx5IHJpc2tzIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzIChsZXNzIGxpa2VseSBpbiB0aGlzIGNhc2UpLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGRldGVjdG9ycy4gQWxzbywgdGhlcmUgYXJlIG5vIGNvbmNlcm5zIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzgsIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTM6Mjc6NTYuODIwMDIxMzA5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgcmVmY291bnRpbmcgYW5kIHN5c2ZzIGNoaWxkIGRldmljZSByZXBhcmVudGluZyBpbiBCbHVldG9vdGggSENJIChuZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jKS4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIGBjb25uLVxcdTAwM2VkZXYucGFyZW50YCBhY3F1aXJlcyBhIHJlZmVyZW5jZSB2aWEgYGdldF9kZXZpY2UoKWAgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCByZWxlYXNlcyBpdCB2aWEgYHB1dF9kZXZpY2UoKWAgaW4gYGJ0X2xpbmtfcmVsZWFzZSgpYCwgd2hpbGUgcmVzdHJpY3RpbmcgY2hpbGQgcmVwYXJlbnRpbmcgaW4gYGhjaV9jb25uX2RlbF9zeXNmcygpYCB0byByZmNvbW0gZGV2aWNlcyBtYXRjaGluZyBgX19tYXRjaF90dHkoKWAuXFxuXFxuVGhlc2UgY2hhbmdlcyBwZXJ0YWluIHN0cmljdGx5IHRvIG9iamVjdCBsaWZldGltZXMsIGRldmljZSBoaWVyYXJjaHksIGFuZCByZWZlcmVuY2UgY291bnRpbmcuIFBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5L3JlZmNvdW50IGxlYWtzLCB3aGljaCBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBuZXcgc3RhY2svaGVhcCBidWZmZXJzLCBvciBkYXRhIGNvcGllcyB0byB1c2Vyc3BhY2UgaW52b2x2ZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHJlZmNvdW50aW5nIGFuZCBzeXNmcyBjaGlsZCBkZXZpY2UgcmVwYXJlbnRpbmcgaW4gQmx1ZXRvb3RoIEhDSSAobmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYykuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBgY29ubi1cXHUwMDNlZGV2LnBhcmVudGAgYWNxdWlyZXMgYSByZWZlcmVuY2UgdmlhIGBnZXRfZGV2aWNlKClgIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgcmVsZWFzZXMgaXQgdmlhIGBwdXRfZGV2aWNlKClgIGluIGBidF9saW5rX3JlbGVhc2UoKWAsIHdoaWxlIHJlc3RyaWN0aW5nIGNoaWxkIHJlcGFyZW50aW5nIGluIGBoY2lfY29ubl9kZWxfc3lzZnMoKWAgdG8gcmZjb21tIGRldmljZXMgbWF0Y2hpbmcgYF9fbWF0Y2hfdHR5KClgLlxcblxcblRoZXNlIGNoYW5nZXMgcGVydGFpbiBzdHJpY3RseSB0byBvYmplY3QgbGlmZXRpbWVzLCBkZXZpY2UgaGllcmFyY2h5LCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLiBQb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeS9yZWZjb3VudCBsZWFrcywgd2hpY2ggYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbmV3IHN0YWNrL2hlYXAgYnVmZmVycywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlcnNwYWNlIGludm9sdmVkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowk4p4h[1] Phase: Succeeded StartedAt: 2026-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 13:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 13:28:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2] Phase: Succeeded StartedAt: 2026-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 13:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:08 +0000 UTC FinishedAt: 2026-09-04 13:28:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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-workflowk4p4h/series-workflowk4p4h-convert-artifact-2535860447/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:18 +0000 UTC FinishedAt: 2026-09-04 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:18 +0000 UTC FinishedAt: 2026-09-04 13:44:45 +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:*52ff8720-5c94-40a3-b9ab-218475f49f23,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-workflowk4p4h/series-workflowk4p4h-convert-artifact-2535860447/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": "4276c1a9-210b-4e47-a930-818244a084f7", "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-workflowk4p4h/series-workflowk4p4h-build-action-607718885/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:28:18 +0000 UTC FinishedAt: 2026-09-04 13:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*52ff8720-5c94-40a3-b9ab-218475f49f23,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-workflowk4p4h/series-workflowk4p4h-convert-artifact-2535860447/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": "4276c1a9-210b-4e47-a930-818244a084f7", "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-workflowk4p4h/series-workflowk4p4h-build-action-607718885/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:45 +0000 UTC FinishedAt: 2026-09-04 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:45 +0000 UTC FinishedAt: 2026-09-04 13:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:45 +0000 UTC FinishedAt: 2026-09-04 13:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:45 +0000 UTC FinishedAt: 2026-09-04 13:44:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-workflowk4p4h/series-workflowk4p4h-convert-artifact-1935578734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:55 +0000 UTC FinishedAt: 2026-09-04 13:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:44:55 +0000 UTC FinishedAt: 2026-09-04 13:46:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4276c1a9-210b-4e47-a930-818244a084f7,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-workflowk4p4h/series-workflowk4p4h-build-action-607718885/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-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:46:49 +0000 UTC FinishedAt: 2026-09-04 13:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:46:49 +0000 UTC FinishedAt: 2026-09-04 13:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:46:49 +0000 UTC FinishedAt: 2026-09-04 14:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:46:49 +0000 UTC FinishedAt: 2026-09-04 14:03:11 +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:*52ff8720-5c94-40a3-b9ab-218475f49f23,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-workflowk4p4h/series-workflowk4p4h-convert-artifact-1935578734/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": "f3f3436f-9109-44ae-8509-2d378b0917a2", "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-workflowk4p4h/series-workflowk4p4h-build-action-1770547074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 13:46:49 +0000 UTC FinishedAt: 2026-09-04 14:03:01 +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:*52ff8720-5c94-40a3-b9ab-218475f49f23,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-workflowk4p4h/series-workflowk4p4h-convert-artifact-1935578734/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": "f3f3436f-9109-44ae-8509-2d378b0917a2", "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-workflowk4p4h/series-workflowk4p4h-build-action-1770547074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:03:11 +0000 UTC FinishedAt: 2026-09-04 14:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:03:11 +0000 UTC FinishedAt: 2026-09-04 14:03:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:03:11 +0000 UTC FinishedAt: 2026-09-04 14:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:03:11 +0000 UTC FinishedAt: 2026-09-04 14:04:59 +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:*f3f3436f-9109-44ae-8509-2d378b0917a2,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-workflowk4p4h/series-workflowk4p4h-build-action-1770547074/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-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"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:*4276c1a9-210b-4e47-a930-818244a084f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3f3436f-9109-44ae-8509-2d378b0917a2,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-workflowk4p4h/series-workflowk4p4h-build-action-607718885/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-workflowk4p4h/series-workflowk4p4h-build-action-1770547074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 14:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 14:05:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"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-workflowk4p4h/series-workflowk4p4h-convert-artifact-106289683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 14:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 14:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:08 +0000 UTC FinishedAt: 2026-09-04 14:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:18 +0000 UTC FinishedAt: 2026-09-04 17:06:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4p4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hci_conn_init_sysfs","hci_conn_del_sysfs","bt_link_release","__match_tty"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["BT","BT_RFCOMM","BT_RFCOMM_TTY"],"series_id":"1d9309f6-c32f-4a74-9df8-593b0f6b7e19","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-09-04 14:05:18 +0000 UTC FinishedAt: 2026-09-04 17:06:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4276c1a9-210b-4e47-a930-818244a084f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f3f3436f-9109-44ae-8509-2d378b0917a2,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-workflowk4p4h/series-workflowk4p4h-build-action-607718885/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-workflowk4p4h/series-workflowk4p4h-build-action-1770547074/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-workflowk4p4h/series-workflowk4p4h-convert-artifact-106289683/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,}