Name: series-workflowqq6bx Phase: Running StartedAt: 2026-08-02 11:39:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[0] Phase: Succeeded StartedAt: 2026-08-02 11:39:46 +0000 UTC FinishedAt: 2026-08-02 11:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 11:39:46 +0000 UTC FinishedAt: 2026-08-02 11:42:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "c8271558-bca8-4a20-8fa0-cba86ec9d1fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_fill_ifinfo", "if_nlmsg_size", "rtnl_getlink", "rtnl_dump_ifinfo", "rtmsg_ifinfo_build_skb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtpZl9ubG1zZ19zaXplJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDssCiAgICAmIzM0O3J0bXNnX2lmaW5mb19idWlsZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGEwNzAwNzVjZjliOGFlODY0NjQ2MzRhY2VjYWJlYzlkOTJhMDkxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbmluZGV4IDY4YzI2YTcwYmI2NDkuLmI4MGMyYWMzYWMzMTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXG5AQCAtOTI4LDYgJiM0Mzs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiB2ZmluZm8tbGlzdFxuICAgICAgICAgdHlwZTogbmVzdFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzXG4mIzQzOyAgICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgICBQZXItVkYgZGV0YWlscy4gVGhlIGxpc3QgaG9sZHMgYXQgbW9zdCAyNTYgVkZzLCBvciAxMjggd2hlblxuJiM0MzsgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdFxuJiM0MzsgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcbiYjNDM7ICAgICAgICAgIHRydW5jYXRlZCBsaXN0OyBudW0tdmYgc3RpbGwgY2FycmllcyB0aGUgcmVhbCBjb3VudC5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGF0czY0XG4gICAgICAgICB0eXBlOiBiaW5hcnlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAzMWM2NWE1NDVhMTA3Li44MWM1YTYxMDRkZWExIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTE3NCwxMiAmIzQzOzExNzQsMjcgQEAgc3RhdGljIHZvaWQgY29weV9ydG5sX2xpbmtfc3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0cyAqYSxcbiBcdGEtXHUwMDNlcnhfbm9oYW5kbGVyID0gYi1cdTAwM2VyeF9ub2hhbmRsZXI7XG4gfVxuIFxuJiM0MzsvKiBDYXAgdGhlIG51bWJlciBvZiBWRnMgdGhhdCBJRkxBX1ZGSU5GT19MSVNUIGRlc2NyaWJlcy4gVGhlIG5lc3QgaXMgb25lXG4mIzQzOyAqIG5ldGxpbmsgYXR0cmlidXRlLCBzbyBldmVyeXRoaW5nIGluc2lkZSBpdCBoYXMgdG8gZml0IGluIHRoZSB1MTYgbmxhX2xlbi5cbiYjNDM7ICogVGhlIGNhcCBpcyBhIGZpeGVkIG51bWJlciByYXRoZXIgdGhhbiB3aGF0ZXZlciBoYXBwZW5zIHRvIGZpdCwgc28gdGhhdCB0aGVcbiYjNDM7ICogbGltaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJmYWNlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSByZXF1ZXN0ZWRcbiYjNDM7ICogYXR0cmlidXRlIHNldCBhbmQgdGhlIGhvc3QmIzM5O3MgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gVGhlIGxhcmdlc3QgcGVyLVZGXG4mIzQzOyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxuJiM0MzsgKiBzdGF0aXN0aWNzLCBzbyBib3RoIHZhbHVlcyBrZWVwIHRoZSBuZXN0IHdlbGwgaW5zaWRlIFUxNl9NQVguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW4obnVtX3ZmcyxcbiYjNDM7XHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEFsbCBWRiBpbmZvICovXG4gc3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcbiB7XG4gXHRpZiAoZGV2LVx1MDAzZWRldi5wYXJlbnQgXHUwMDI2XHUwMDI2IChleHRfZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9WRikpIHtcbi1cdFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbiYjNDM7XHRcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZXh0X2ZpbHRlcl9tYXNrKTtcbiBcdFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcbiBcdFx0c2l6ZSAmIzQzOz0gbnVtX3ZmcyAqXG4gXHRcdFx0KG5sYV90b3RhbF9zaXplKDApICYjNDM7XG5AQCAtMTcxNyw2ICYjNDM7MTczMiwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghdmZpbmZvKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuJiM0MztcdC8qIElGTEFfTlVNX1ZGIGFib3ZlIHN0YXlzIHRoZSBkZXZpY2UmIzM5O3MgVkYgY291bnQ7IHRoZSBsaXN0IGl0c2VsZiBpc1xuJiM0MztcdCAqIGNhcHBlZCBzbyB0aGF0IGl0cyBsZW5ndGggY2Fubm90IG92ZXJmbG93IG5sYV9sZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChudW1fdmZzLCBleHRfZmlsdGVyX21hc2spO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydG5sX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2lmX25sbXNnX3NpemUmIzM0OywKICAgICYjMzQ7cnRubF9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfZHVtcF9pZmluZm8mIzM0OywKICAgICYjMzQ7cnRtc2dfaWZpbmZvX2J1aWxkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBydG5ldGxpbmsgbG9naWMgdG8gY2FwIHRoZSBudW1iZXIgb2YgVkZzIHJldHVybmVkIGluIElGTEFfVkZJTkZPX0xJU1QgdG8gcHJldmVudCBuZXRsaW5rIG1lc3NhZ2Ugb3ZlcmZsb3cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBSVE1fR0VUTElOSyByZXF1ZXN0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgbWVzc2FnZSBzaXplIGNhbGN1bGF0aW9uIGFuZCBmaWxsaW5nIGZ1bmN0aW9ucy4gQ09ORklHX05FVERFVlNJTSBhbmQgQ09ORklHX1BDSV9JT1YgYXJlIG5lZWRlZCB0byB0ZXN0IGRldmljZXMgd2l0aCBWRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTA3MDA3NWNmOWI4YWU4NjQ2NDYzNGFjZWNhYmVjOWQ5MmEwOTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxMTo0MToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sCmluZGV4IDY4YzI2YTcwYmI2NDkuLmI4MGMyYWMzYWMzMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbApAQCAtOTI4LDYgJiM0Mzs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IHZmaW5mby1saXN0CiAgICAgICAgIHR5cGU6IG5lc3QKICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgUGVyLVZGIGRldGFpbHMuIFRoZSBsaXN0IGhvbGRzIGF0IG1vc3QgMjU2IFZGcywgb3IgMTI4IHdoZW4KJiM0MzsgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdAomIzQzOyAgICAgICAgICBpbiBhIHUxNiBsZW5ndGguIEEgZGV2aWNlIHdpdGggbW9yZSBWRnMgdGhhbiB0aGF0IHJlcG9ydHMgYQomIzQzOyAgICAgICAgICB0cnVuY2F0ZWQgbGlzdDsgbnVtLXZmIHN0aWxsIGNhcnJpZXMgdGhlIHJlYWwgY291bnQuCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHN0YXRzNjQKICAgICAgICAgdHlwZTogYmluYXJ5CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTc0LDEyICYjNDM7MTE3NCwyNyBAQCBzdGF0aWMgdm9pZCBjb3B5X3J0bmxfbGlua19zdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzICphLAogCWEtJmd0O3J4X25vaGFuZGxlciA9IGItJmd0O3J4X25vaGFuZGxlcjsKIH0KIAomIzQzOy8qIENhcCB0aGUgbnVtYmVyIG9mIFZGcyB0aGF0IElGTEFfVkZJTkZPX0xJU1QgZGVzY3JpYmVzLiBUaGUgbmVzdCBpcyBvbmUKJiM0MzsgKiBuZXRsaW5rIGF0dHJpYnV0ZSwgc28gZXZlcnl0aGluZyBpbnNpZGUgaXQgaGFzIHRvIGZpdCBpbiB0aGUgdTE2IG5sYV9sZW4uCiYjNDM7ICogVGhlIGNhcCBpcyBhIGZpeGVkIG51bWJlciByYXRoZXIgdGhhbiB3aGF0ZXZlciBoYXBwZW5zIHRvIGZpdCwgc28gdGhhdCB0aGUKJiM0MzsgKiBsaW1pdCBpcyBhIHByb3BlcnR5IG9mIHRoZSBpbnRlcmZhY2UgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIHJlcXVlc3RlZAomIzQzOyAqIGF0dHJpYnV0ZSBzZXQgYW5kIHRoZSBob3N0JiMzOTtzIGFsaWdubWVudCByZXF1aXJlbWVudHMuIFRoZSBsYXJnZXN0IHBlci1WRgomIzQzOyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dAomIzQzOyAqIHN0YXRpc3RpY3MsIHNvIGJvdGggdmFsdWVzIGtlZXAgdGhlIG5lc3Qgd2VsbCBpbnNpZGUgVTE2X01BWC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW4obnVtX3ZmcywKJiM0MzsJCSAgIGV4dF9maWx0ZXJfbWFzayAmYW1wOyBSVEVYVF9GSUxURVJfU0tJUF9TVEFUUyA/IDI1NiA6IDEyOCk7CiYjNDM7fQomIzQzOwogLyogQWxsIFZGIGluZm8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKQogewogCWlmIChkZXYtJmd0O2Rldi5wYXJlbnQgJmFtcDsmYW1wOyAoZXh0X2ZpbHRlcl9tYXNrICZhbXA7IFJURVhUX0ZJTFRFUl9WRikpIHsKLQkJaW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi0mZ3Q7ZGV2LnBhcmVudCk7CiYjNDM7CQlpbnQgbnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChkZXZfbnVtX3ZmKGRldi0mZ3Q7ZGV2LnBhcmVudCksCiYjNDM7CQkJCQkgICAgICBleHRfZmlsdGVyX21hc2spOwogCQlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApOwogCQlzaXplICYjNDM7PSBudW1fdmZzICoKIAkJCShubGFfdG90YWxfc2l6ZSgwKSAmIzQzOwpAQCAtMTcxNyw2ICYjNDM7MTczMiwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXZmaW5mbykKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAomIzQzOwkvKiBJRkxBX05VTV9WRiBhYm92ZSBzdGF5cyB0aGUgZGV2aWNlJiMzOTtzIFZGIGNvdW50OyB0aGUgbGlzdCBpdHNlbGYgaXMKJiM0MzsJICogY2FwcGVkIHNvIHRoYXQgaXRzIGxlbmd0aCBjYW5ub3Qgb3ZlcmZsb3cgbmxhX2xlbi4KJiM0MzsJICovCiYjNDM7CW51bV92ZnMgPSBydG5sX3ZmaW5mb19jYXAobnVtX3ZmcywgZXh0X2ZpbHRlcl9tYXNrKTsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHsKIAkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVE5MIFZGSU5GTyBMaXN0IENhcCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYW5kIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcnRubF92ZmluZm9fY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLCBzcGVjaWZpY2FsbHkgYnkgbGltaXRpbmcgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSByZXR1cm5lZCB3aXRoaW4gdGhlIGBJRkxBX1ZGSU5GT19MSVNUYC4gVGhleSYjMzk7cmUgY2FwcGluZyB0aGUgc2l6ZSwgcHJvYmFibHkgYmVjYXVzZSBgbmxhX2xlbmAgaXMgYSBgdTE2YCBhbmQgY2FuIGJlIG92ZXJmbG93ZWQuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBpbXBhY3RlZDogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX3ZmaW5mb19zaXplYCwgYW5kLCBvZiBjb3Vyc2UsIGBydG5sX3ZmaW5mb19jYXBgLiBSaWdodCwgc28gYHJ0bmxfZmlsbF92ZmAgaXMgY2FsbGVkIGJ5IGBydG5sX2ZpbGxfaWZpbmZvYCwgYW5kIGBydG5sX3ZmaW5mb19zaXplYCBmZWVkcyBpbnRvIGBpZl9ubG1zZ19zaXplYC4gVGhpcyBtZWFucyB0aGF0IGBydG5sX2ZpbGxfdmZgIGVzc2VudGlhbGx5IGZpbGxzIHRoZSBWRiBkYXRhIGFuZCBkZXRlcm1pbmVzIHRoZSBzaXplLiBNYWtlcyBzZW5zZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgbW9kaWZpY2F0aW9uIGluIHJ0bmV0bGluaywgc28gbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGZ1enotd29ydGh5LiBUaGVyZSYjMzk7cyBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBoZXJlLCBhcyBpdCYjMzk7cyBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHNlbnQgb3ZlciB0aGUgd2lyZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBhcmVhcyB0byBmb2N1cyBvbiBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLiBgcnRubF9maWxsX3ZmYCBpcyBgbm9pbmxpbmVfZm9yX3N0YWNrYCBhbmQgc3RhdGljIC0gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBldGMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aG9zZS4KClRpbWUgdG8gZXhhbWluZSBgcnRubF9maWxsX3ZmYCBpdHNlbGYgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgY2FwIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTE1NDM9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE1Njc6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2OC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcxMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3MTQ6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzE1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTc0MTpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDItXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMTEwPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyMjUtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMjI2Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyMjctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgZGVsaXZlcmVkIGFzIHRob3VnaCBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZSB0aG91Z2h0czoKCioqRm9jdXNpbmcgb24gTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGNvZGUuIGBydG5sX2ZpbGxfaWZpbmZvYCBmZWVscyBsaWtlIGEgc29saWQgZm9jYWwgcG9pbnQuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGVseSBjZW50cmFsIHRvIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVyZmFjZSBkZXRhaWxzLCBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGRhdGEgc3RydWN0dXJlcy4gTm93LCBJJiMzOTttIHRyeWluZyB0byBleHBhbmQgbXkgcGVyc3BlY3RpdmUgYSBiaXQuIEkgd29uZGVyIGlmIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBleHBsb3JlIGBydG5sX3ZmaW5mb19zaXplYCBhcyB3ZWxsLCBhcyBJIGtub3cgdGhhdCBjb25jZXJucyB2aXJ0dWFsIGZ1bmN0aW9uIHNpemluZy4gVGhpcyBjb3VsZCBwcm92aWRlIGFub3RoZXIgcGVyc3BlY3RpdmUgdG8gbXkgaW5pdGlhbCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX3ZmaW5mb19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE4NT1zdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMTkxLS8qIEFsbCBWRiBpbmZvICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMTkyOnN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExOTMtXHRcdFx0XHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3Ny1cdFx0XHQgICAgICAgIFx1MDAyNiBSVEVYVF9GSUxURVJfVkYgPyA0IDogMCkgLyogSUZMQV9OVU1fVkYgKi9cbm5ldC9jb3JlL3J0bmV0bGluay5jOjEzNzg6XHQgICAgICAgJiM0MzsgcnRubF92ZmluZm9fc2l6ZShkZXYsIGV4dF9maWx0ZXJfbWFzaykgLyogSUZMQV9WRklORk9fTElTVCAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3OS1cdCAgICAgICAmIzQzOyBydG5sX3BvcnRfc2l6ZShkZXYsIGV4dF9maWx0ZXJfbWFzaykgLyogSUZMQV9WRl9QT1JUUyAmIzQzOyBJRkxBX1BPUlRfU0VMRiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5hdmlnYXRpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBgaWZfbmxtc2dfc2l6ZWAg4oCTIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmb2N1cyBvbiwgYXMgSSBrbm93LiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2ssIGVzc2VudGlhbGx5LiBJdCYjMzk7cyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNpemUgb2YgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIGludGVyZmFjZSBkYXRhLiBOb3csIHdoZXJlIGRvIEkgYWN0dWFsbHkgYmVnaW4gdG8gKmdldCogdGhhdCBkYXRhPyBJJiMzOTtkIGxvb2sgdG8gYHJ0bmxfZ2V0bGlua2AgYW5kIGBydG5sX2R1bXBfaWZpbmZvYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gYHJ0bmxfZ2V0bGlua2AgcHJvYmFibHkgZmV0Y2hlcyB0aGUgc3BlY2lmaWMgbGluayBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0LCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaG9zZSB0d28gYXJlIGRlZmluaXRlbHkgbXkgaW5pdGlhbCBhbmNob3JzIGluIHRoaXMgc3BhY2UuIEkgY2FuIHVzZSB0aG9zZSB0byBzdGFydCBxdWVyeWluZyBhbmQgbG9va2luZyBhdCB0aGUgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX25sbXNnX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xMzIxPXN0YXRpYyBzaXplX3QgcnRubF9kZXZfcGFyZW50X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzM1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMzNjpzdGF0aWMgbm9pbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMzctXHRcdFx0XHQgICAgIHUzMiBleHRfZmlsdGVyX21hc2spXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDI3Nj1zdGF0aWMgaW50IHJ0bmxfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ2LVx0ZXJyID0gLUVOT0JVRlM7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzQ3Olx0bnNrYiA9IG5sbXNnX25ld19sYXJnZShpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ4LVx0aWYgKG5za2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDM2NS1cdFx0XHR9XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzY2Olx0XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzY3LVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NDgyPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdTMyIHJ0bmxfY2FsY2l0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUxNC1cdFx0bWluX2lmaW5mb19kdW1wX3NpemUgPSBtYXgobWluX2lmaW5mb19kdW1wX3NpemUsXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTE1Olx0XHRcdFx0XHQgICBpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTE2LVx0fVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODA6XHRza2IgPSBubG1zZ19uZXcoaWZfbmxtc2dfc2l6ZShkZXYsIDApLCBmbGFncyk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTgxLVx0aWYgKHNrYiA9PSBOVUxMKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTItXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTkzOlx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gaWZfbmxtc2dfc2l6ZSgpICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTk0LVx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb3V0ZSBOZXRsaW5rIEludGVyZmFjZSBmb3IgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gICh3aGljaCBJIGtub3cgZ29lcyB0aHJvdWdoIGBydG5sX2NhbGNpdGApLCBhbmQgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgLiBUaGVzZSBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCwgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWaXJ0dWFsIEZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGNlbnRyYWwgdG8gdGhlIHJ0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZC4gU3RpbGwsIGl0IHJlbGF0ZXMgdG8gVkZzIHNwZWNpZmljYWxseSwgc28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2suCgpOb3csIGJlY2F1c2UgVkZzIGFyZSByZWxhdGVkIHRvIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLCBJIHNob3VsZCBjb25zaWRlciByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfUENJX0lPVmAuIEkgc2hvdWxkIGV4YW1pbmUgdGhhdCwgYW5kIHRoZW4gY2hlY2sgYGRldl9udW1fdmZgIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBpbmRpY2F0b3Igb2YgVkYgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcdHJldHVybiBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU0LVx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcdC5udW1fdmYgPSB2aXJ0aW9fZGV2X251bV92ZixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5Mj1zdGF0aWMgaW5saW5lIGludCBydG5sX3ZmaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5NS1cdGlmIChkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE5NjpcdFx0aW50IG51bV92ZnMgPSBydG5sX3ZmaW5mb19jYXAoZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMTk3LVx0XHRcdFx0XHQgICAgICBleHRfZmlsdGVyX21hc2spO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEyNDE9c3RhdGljIHNpemVfdCBydG5sX3BvcnRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNTgtXHRcdHJldHVybiAwO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTI1OTpcdGlmIChkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNjAtXHRcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSAmIzQzOyB2Zl9wb3J0c19zaXplICYjNDM7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMjYxOlx0XHRcdHZmX3BvcnRfc2l6ZSAqIGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTI2Mi1cdGVsc2Vcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDExPXN0YXRpYyBpbnQgcnRubF92Zl9wb3J0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQyMS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE0MjI6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpOyB2ZiYjNDM7JiM0MzspIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MjMtXHRcdHZmX3BvcnQgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX1ZGX1BPUlQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTE0Njc9c3RhdGljIGludCBydG5sX3BvcnRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0NzktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNDgwOlx0aWYgKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNDgxLVx0XHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTE3MTQ9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcyMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3MjQ6XHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzI1LVx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBkZXZfbnVtX3ZmYC4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHRoZSBjb3JlIGtlcm5lbCBoZWFkZXIgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIHRoaW5nLCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAgaXMgYSBzdHJvbmcgY2FuZGlkYXRlLiBUaGlzIGZpbGUgaG91c2VzIGNvcmUgZGV2aWNlIG1vZGVsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLCBzbyBpdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhIGZpZWxkIHRoYXQgcmVsYXRlcyB0byB2aXJ0dWFsIGZ1bmN0aW9ucyB3aXRoaW4gYSBkZXZpY2Ugc3RydWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdGhlcmUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9udW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRGV2aWNlIFN0cnVjdHVyZSoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGV2aWNlIG1vZGVsIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNvcmUgc3RydWN0dXJlLCBgc3RydWN0IGRldmljZWAsIGFuZCB0aGUgc3Vycm91bmRpbmcgZGVmaW5pdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCBhcm91bmQgbGluZSAxMjgwLiBJIGtub3cgdGhpcyBmaWxlIGlzIG1hc3NpdmUsIGJ1dCBsaW5lIDEyODAgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIGtleSBtZW1iZXJzIHJlbGF0ZWQgdG8gdGhlaXIgbGlmZWN5Y2xlLCBhdHRyaWJ1dGVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoIGRyaXZlcnMgYW5kIGJ1c2VzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG9yZ2FuaXplcyB0aGVzZSBkZXZpY2Ugb2JqZWN0cy4gSSBhbnRpY2lwYXRlIGhhdmluZyB0byB0cmFjZSB0aHJvdWdoIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBtYWNyb3MgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbmNlcHRzIGhlcmUsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIHNvbGlkIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kZXZpY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIWRldilcbjEyNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMjc3Olx0XHRyZXR1cm4gZGV2LVx1MDAzZW9mX25vZGU7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuMTI4MTpcdHtcbjEyODI6XHRcdGlmIChkZXYtXHUwMDNlYnVzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bV92ZilcbjEyODM6XHRcdFx0cmV0dXJuIGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldik7XG4xMjg0Olx0XHRyZXR1cm4gMDtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0LypcbjEyODg6XHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcbjEyODk6XHQgKi9cbjEyOTA6XHRzdHJ1Y3QgZGV2aWNlICpfX3Jvb3RfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBtb2R1bGUgKm93bmVyKTtcbjEyOTE6XHRcbjEyOTI6XHQvKiBUaGlzIGlzIGEgbWFjcm8gdG8gYXZvaWQgaW5jbHVkZSBwcm9ibGVtcyB3aXRoIFRISVNfTU9EVUxFICovXG4xMjkzOlx0I2RlZmluZSByb290X2RldmljZV9yZWdpc3RlcihuYW1lKSBcXFxuMTI5NDpcdFx0X19yb290X2RldmljZV9yZWdpc3RlcihuYW1lLCBUSElTX01PRFVMRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZpcnR1YWwgRnVuY3Rpb25zIEFjcm9zcyBEaWZmZXJlbnQgQnVzZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlIGhhbmRsZSBWaXJ0dWFsIEZ1bmN0aW9ucyAoYFZGYCkgYWNyb3NzIGRpZmZlcmVudCBkZXZpY2UgZHJpdmVycy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgdGhhdCBgZGV2X251bV92ZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIFZGcyBhIGRldmljZSBzdXBwb3J0cy4gSXQmIzM5O3MgY2FsbGluZyBgZGV2LSZndDtidXMtJmd0O251bV92ZihkZXYpYCwgd2hpY2ggdGVsbHMgbWUgdGhlIHNwZWNpZmljIGJ1cyB0eXBlIGlzIGNydWNpYWwuIEZvciBQQ0kgZGV2aWNlcywgbXkgZ3Vlc3MgaXMgdGhhdCB0aGlzIGlzIGhhbmRsZWQgYnkgYHBjaV9udW1fdmZgLiBCdXQgdGhlbiBJIGhhdmUgdG8gdGhpbmssIGFyZSB3ZSAqb25seSogZGVhbGluZyB3aXRoIFBDSSBoZXJlPwoKSG9sZCBvbi4gSXNuJiMzOTt0IGB2aXJ0aW9fYnVzYCBhbHNvIGNhcGFibGUgb2YgVkZzPyBSaWdodCwgdGhlcmUmIzM5O3MgYHZpcnRpb19kZXZfbnVtX3ZmYC4gU28gdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIGBDT05GSUdfUENJX0lPVmAgc29sZWx5IGZvciBlbmFibGluZyBQQ0kgVkZzLCBvciBkb2VzIHRoZSB2aXJ0aW8gaW1wbGVtZW50YXRpb24gaGF2ZSBpdHMgb3duIGRpc3RpbmN0IG5lZWRzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgY29uZmlybWluZyBob3cgYHBjaV9udW1fdmZgIGlzIGltcGxlbWVudGVkLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmM9NDY9c3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KVxuLS1cbmRyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMtNTktXHRwZGV2ID0gcGNpX2dldF9zbG90KHpkZXYtXHUwMDNlemJ1cy1cdTAwM2VidXMsIHpkZXYtXHUwMDNlZGV2Zm4pO1xuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcdGlmIChwZGV2IFx1MDAyNlx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTYxLVx0XHRyYyA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3BjaS9pZGUuYz0yMzk9c3RydWN0IHBjaV9pZGUgKnBjaV9pZGVfc3RyZWFtX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL2lkZS5jLTI0Ny1cdHN0cnVjdCBwY2lfZGV2ICpycCwgKmJyO1xuZHJpdmVycy9wY2kvaWRlLmM6MjQ4Olx0aW50IG51bV92ZiwgcmlkX2VuZDtcbmRyaXZlcnMvcGNpL2lkZS5jLTI0OS1cbi0tXG5kcml2ZXJzL3BjaS9pZGUuYy0yODAtXHQvKiBmb3IgU1ItSU9WIGNhc2UsIGNvdmVyIGFsbCBWRnMgKi9cbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcdG51bV92ZiA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL3BjaS9pZGUuYzoyODI6XHRpZiAobnVtX3ZmKVxuZHJpdmVycy9wY2kvaWRlLmM6MjgzOlx0XHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4NDpcdFx0XHRcdCAgICBwY2lfaW92X3ZpcnRmbl9kZXZmbihwZGV2LCBudW1fdmYgLSAxKSk7XG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXHRlbHNlXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy00NDUtXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jOjQ0NjpcdHUxNiBudW1fdmZzO1xuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ0OS1cdGRldmljZV9sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcdG51bV92ZnMgPSBwZGV2LVx1MDAzZXNyaW92LVx1MDAzZW51bV9WRnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NTEtXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Mi1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy00NTYtLypcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFx1MDAzZSAwOyBudW1iZXIgb2YgVkZzIHRvIGVuYWJsZVxuZHJpdmVycy9wY2kvaW92LmM6NDU4OiAqIG51bV92ZnMgPSAwOyBkaXNhYmxlIGFsbCBWRnNcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTQ2Mz1zdGF0aWMgc3NpemVfdCBzcmlvdl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ2OC1cdGludCByZXQgPSAwO1xuZHJpdmVycy9wY2kvaW92LmM6NDY5Olx0dTE2IG51bV92ZnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NzAtXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XHRpZiAoa3N0cnRvdTE2KGJ1ZiwgMCwgXHUwMDI2bnVtX3ZmcykgXHUwMDNjIDApXG5kcml2ZXJzL3BjaS9pb3YuYy00NzItXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9wY2kvaW92LmMtNDczLVxuZHJpdmVycy9wY2kvaW92LmM6NDc0Olx0aWYgKG51bV92ZnMgXHUwMDNlIHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldikpXG5kcml2ZXJzL3BjaS9pb3YuYy00NzUtXHRcdHJldHVybiAtRVJBTkdFO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ3OTpcdGlmIChudW1fdmZzID09IHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGcylcbmRyaXZlcnMvcGNpL2lvdi5jLTQ4MC1cdFx0Z290byBleGl0O1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ5NjpcdGlmIChudW1fdmZzID09IDApIHtcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cdFx0LyogZGlzYWJsZSBWRnMgKi9cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy01MDYtXHRcdHBjaV93YXJuKHBkZXYsIFwmIzM0OyVkIFZGcyBhbHJlYWR5IGVuYWJsZWQuIERpc2FibGUgYmVmb3JlIGVuYWJsaW5nICVkIFZGc1xcblwmIzM0OyxcbmRyaXZlcnMvcGNpL2lvdi5jOjUwNzpcdFx0XHQgcGRldi1cdTAwM2Vzcmlvdi1cdTAwM2VudW1fVkZzLCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTUwOC1cdFx0cmV0ID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cdHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbmRyaXZlcnMvcGNpL2lvdi5jOjUxMzpcdHJldCA9IHBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZXNyaW92X2NvbmZpZ3VyZShwZGV2LCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cdHBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjUxODpcdGlmIChyZXQgIT0gbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cdFx0cGNpX3dhcm4ocGRldiwgXCYjMzQ7JWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxuXCYjMzQ7LFxuZHJpdmVycy9wY2kvaW92LmM6NTIwOlx0XHRcdCBudW1fdmZzLCByZXQpO1xuZHJpdmVycy9wY2kvaW92LmMtNTIxLVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTYxMz1jb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNyaW92X3BmX2Rldl9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjYxODppbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTYxOS17XG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NjIzPWludCBfX3dlYWsgcGNpYmlvc19zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjYyODpzdGF0aWMgaW50IHNyaW92X2FkZF92ZnMoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IG51bV92ZnMpXG5kcml2ZXJzL3BjaS9pb3YuYy02Mjkte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYzNS1cbmRyaXZlcnMvcGNpL2lvdi5jOjYzNjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXHRcdHJjID0gcGNpX2lvdl9hZGRfdmlydGZuKGRldiwgaSk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmM9MTE5MD1FWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9zcmlvdik7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTM6ICogcGNpX251bV92ZiAtIHJldHVybiBudW1iZXIgb2YgVkZzIGFzc29jaWF0ZWQgd2l0aCBhIFBGIGRldmljZV9yZWxlYXNlX2RyaXZlclxuZHJpdmVycy9wY2kvaW92LmMtMTE5NC0gKiBAZGV2OiB0aGUgUENJIGRldmljZVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTExOTctICovXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTk4OmludCBwY2lfbnVtX3ZmKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMjA0LX1cbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XG5kcml2ZXJzL3BjaS9pb3YuYy0xMjA2LVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjAtLyoqXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjItICogQGRldjogdGhlIFBDSSBkZXZpY2VcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjMtICogQHJlc25vOiB0aGUgcmVzb3VyY2UgbnVtYmVyXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzY1LSAqXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY2OiAqIEdldCB0aGUgc2l6ZXMgb2YgYSBWRiByZXNpemFibGUgQkFSIHRoYXQgY2FuIGFjY29tbW9kYXRlIEBudW1fdmZzIHdpdGhpblxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzcxLSAqL1xuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzczLXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxuZHJpdmVycy9wY2kvaW92LmM6MTM3NzpcdGlmICghbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXHRcdHJldHVybiAwO1xuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cbmRyaXZlcnMvcGNpL2lvdi5jOjEzODA6XHRkb19kaXYodmZfbGVuLCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXHRzaXplcyA9IChyb3VuZHVwX3Bvd19vZl90d28odmZfbGVuICYjNDM7IDEpIC0gMSkgXHUwMDNlXHUwMDNlIGlsb2cyKFNaXzFNKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTYyNT12b2lkIHBjaV91ZXZlbnRfZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHBjaV9lcnNfcmVzdWx0IGVycl90eXBlKVxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjE2NTY6c3RhdGljIGludCBwY2lfYnVzX251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTY1Ny17XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcdHJldHVybiBwY2lfbnVtX3ZmKHRvX3BjaV9kZXYoZGV2KSk7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTY1OS19XG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE3MjY9Y29uc3Qgc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cdC5wbVx0XHQ9IFBDSV9QTV9PUFNfUFRSLFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjE3Mzk6XHQubnVtX3ZmXHRcdD0gcGNpX2J1c19udW1fdmYsXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc0MC1cdC5kbWFfY29uZmlndXJlXHQ9IHBjaV9kbWFfY29uZmlndXJlLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcbi0tXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNjk2LVx0ZGV2aWNlX2xvY2soZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jOjE2OTc6XHRpZiAoZGV2LVx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNjk4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy9wY2kvdHNtLmM9Nzk9c3RhdGljIHZvaWQgcGNpX3RzbV93YWxrX2ZucyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3BjaS90c20uYy05NS1cdFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXG5kcml2ZXJzL3BjaS90c20uYzo5NjpcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHBjaV9udW1fdmYocGYpOyBqJiM0MzsmIzQzOykge1xuZHJpdmVycy9wY2kvdHNtLmMtOTctXHRcdFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jPTExOD1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zX3JldmVyc2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9wY2kvdHNtLmMtMTM1LVx0XHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cbmRyaXZlcnMvcGNpL3RzbS5jOjEzNjpcdFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcdTAwM2U9IDA7IGotLSkge1xuZHJpdmVycy9wY2kvdHNtLmMtMTM3LVx0XHRcdHN0cnVjdCBwY2lfZGV2ICp2ZiBfX2ZyZWUocGNpX2Rldl9wdXQpID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGNpX251bV92ZmAgVmFyaWFibGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgcGNpX251bV92ZmAgdmFyaWFibGUgaXMgZGVmaW5lZC4gVGhlIGhpbnQgcG9pbnRzIHRvIGBkcml2ZXJzL3BjaS9pb3YuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gSS9PIFZpcnR1YWxpemF0aW9uLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIEkgd2FudCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QQ0lfSU9WYCBpcyBldmVuIGVuYWJsZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHBvaW50IHRvIGNoZWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb24gc3Vycm91bmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeW1ib2wuCgpUbyBkbyB0aGF0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZS4gTXkgZ28tdG8gbG9jYXRpb24gaXMgYWx3YXlzIGBpbmNsdWRlL2xpbnV4L3BjaS5oYC4gVGltZSB0byBzZWUgaWYgaXQmIzM5O3MgdGhlcmUgYW5kIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBgcGNpX251bV92ZmAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfUENJX0lPVmAgb3IgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njg9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MjU2OTppbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MC1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTI2MTk9c3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIwOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIxLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gaWYgYENPTkZJR19QQ0lfSU9WYCBpc24mIzM5O3QgZW5hYmxlZCwgYHBjaV9udW1fdmZgIHdpbGwgcmV0dXJuIHplcm8sIGFzIGV4cGVjdGVkLiBCdXQgYGRldl9udW1fdmZgIGlzIHRoZSBnZW5lcmljIG9uZSwgcmlnaHQ/IEl0IGNhbGxzIHRoZSBgbnVtX3ZmYCBmdW5jdGlvbiBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYnVzLiBJbiB0aGUgUENJIGNhc2UsIHRoYXQmIzM5O3MgYHBjaV9idXNfbnVtX3ZmYCwgd2hpY2ggdWx0aW1hdGVseSBjYWxscyBgcGNpX251bV92ZmAuIFNvLCBiYWNrIHRvIHRoZSBzdGFydGluZyBwb2ludDogbm8gYENPTkZJR19QQ0lfSU9WYCwgbm8gVkZzIGZvciBQQ0kgZGV2aWNlcywgYW5kIGBkZXZfbnVtX3ZmYCByZXR1cm5zIHplcm8uIFRoYXQgbWVhbnMgYHJ0bmxfdmZpbmZvX2NhcGAgd2lsbCByZXR1cm4gemVybywgYW5kIGBydG5sX2ZpbGxfdmZgIHdvbiYjMzk7dCBkbyBhbnl0aGluZy4gRXNzZW50aWFsbHksIHdlICpuZWVkKiBgQ09ORklHX1BDSV9JT1ZgIHRvIGJlIGVuYWJsZWQgdG8gaGF2ZSBhbnkgVmlydHVhbCBGdW5jdGlvbnMuCgpCdXQgd2FpdCwgd2hhdCBhYm91dCBWaXJ0SU8/IExldCBtZSBjb25zaWRlciBgdmlydGlvX2Rldl9udW1fdmZgLiBJdCBjYWxscyBgZGV2X251bV92ZmAgb24gdGhlIHBhcmVudCBkZXZpY2UuIElmIHRoZSBwYXJlbnQgZGV2aWNlIGlzIGEgUENJIGRldmljZS4uLiB0aGVuIHdlJiMzOTtyZSBiYWNrIGluIHRoZSBQQ0kgY29udGV4dCwgYW5kIGl0IGNhbGxzIGBwY2lfbnVtX3ZmYC4gU28gZXZlbiB0aHJvdWdoIFZpcnRJTywgYENPTkZJR19QQ0lfSU9WYCBpcyB0aGUga2V5LiBJdCByZWFsbHkgaXMgdGhlIHByaW1hcnkgY29uZmlnIGZvciB0aGUgd2hvbGUgVkYgZWNvc3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIG9uZS4gYENPTkZJR19QQ0lfSU9WYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIGZvciB0ZXN0aW5nIFZGcy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGRyaXZlcnMgdGhhdCBzdXBwb3J0IFNSLUlPViBhbmQgYXJlIHN1cHBvcnRlZCBpbiBRRU1VIHRoYXQgSSBjYW4gdGVzdD8gSSBrbm93IFFFTVUgc3VwcG9ydHMgYGlnYmAsIGBlMTAwMGVgLCBhbmQgYG52bWVgLiBSaWdodCwgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBTbywgZG8gSSBuZWVkIGBDT05GSUdfSUdCYD8gU3l6a2FsbGVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGBuZXRkZXZzaW1gLCBgdmV0aGAsIGFuZCBgZHVtbXlgLiBEb2VzIGFueSBvZiB0aGVtIHN1cHBvcnQgVkZzPyBMZXQgbWUgY2hlY2sgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYG5ldGRldnNpbWAgc3VwcG9ydHMgVkZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcmlvdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjYxOlx0X19BVFRSKHNyaW92X251bXZmcywgMDY2NCwgbnNpbV9idXNfZGV2X251bXZmc19zaG93LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVx0ICAgICAgIG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU1ItSU9WIG9uIE5ldGRldnNpbTogRGlnZ2luZyBJbioqCgpSaWdodCwgc28gYG5ldGRldnNpbWAgaGFzIHRoYXQgYHNyaW92X251bXZmc2AgcGFyYW1ldGVyLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzaW11bGF0ZWQgYnVzIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24sIGluY2x1ZGluZyBTUi1JT1YgbWFuYWdlbWVudCwgdG8gcmVzaWRlLiBJIGJldCBJJiMzOTtsbCBmaW5kIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIFZGIGNyZWF0aW9uL2RlbGV0aW9uIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgUEYgaGFuZGxlcyBpdHMgVkZzLiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgaG93IHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQgaGFuZGxlcyBTUi1JT1YsIGFzIG9wcG9zZWQgdG8gYSByZWFsIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgbm90IGJlIGEgZnVsbCwgb25lLXRvLW9uZSBtYXBwaW5nIHdpdGggaGFyZHdhcmUgU1ItSU9WLCBidXQgSSYjMzk7bSBlYWdlciB0byBmaW5kIG91dC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgaG9va3MgdGhleSB1c2UgYW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz0zMT1uc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM0LVx0c3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2ID0gdG9fbnNpbV9idXNfZGV2KGRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6MzU6XHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNi1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6Mzg6XHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2bnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00NC1cdGlmIChkZXZfZ2V0X2RydmRhdGEoZGV2KSlcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NTpcdFx0cmV0ID0gbnNpbV9kcnZfY29uZmlndXJlX3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ2LVx0ZGV2aWNlX3VubG9jayhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz01Mj1uc2ltX2J1c19kZXZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo1NzpcdHJldHVybiBzcHJpbnRmKGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01OC19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQyMz1zdGF0aWMgdm9pZCBuc2ltX2J1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MjktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDMwOnN0YXRpYyBpbnQgbnNpbV9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0MzQ6XHRyZXR1cm4gbnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDM1LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbnNpbV9idXMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0Mi1cdC5yZW1vdmVcdFx0PSBuc2ltX2J1c19yZW1vdmUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDQzOlx0Lm51bV92Zlx0XHQ9IG5zaW1fbnVtX3ZmLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0NC19O1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02MD11bnNpZ25lZCBpbnQgbnNpbV9kZXZfZ2V0X3ZmcyhzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NTpcdHJldHVybiBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02Ni19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTY4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6Njk6bnNpbV9idXNfZGV2X3NldF92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MC17XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzEtXHRydG5sX2xvY2soKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo3MjpcdG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03My1cdHJ0bmxfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4NjE9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NjI6XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg2My17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjgtXHRkZXZsX2xvY2soZGV2bGluayk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2OTpcdGlmIChuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcyA9PSBudW1fdmZzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzAtXHRcdGdvdG8gZXhpdF91bmxvY2s7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3MTpcdGlmIChuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcyBcdTAwMjZcdTAwMjYgbnVtX3Zmcykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzItXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3NC1cdH1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODc1Olx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VtYXhfdmZzIFx1MDAzYyBudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Ni1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3OS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODgwOlx0bnNpbV9idXNfZGV2X3NldF92ZnMobnNpbV9idXNfZGV2LCBudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgxLVx0aWYgKG5zaW1fZXN3X21vZGVfaXNfc3dpdGNoZGV2KG5zaW1fZGV2KSkge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODI6XHRcdGlmIChudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4My1cdFx0XHRyZXQgPSBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKG5zaW1fZGV2LCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9Mzk5PWludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MDA6XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQwMS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODMtXHR1bnNpZ25lZCBpbnQgbWF4X3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODQ6XHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODUtXHRib29sIGluaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBTdXBwb3J0KioKCk9rYXksIHNvIGBuZXRkZXZzaW1gIHN1cHBvcnRzIFZpcnR1YWwgRnVuY3Rpb25zISBUaGF0JiMzOTtzIGV4Y2VsbGVudCBuZXdzLiBUaGUgcHJlc2VuY2Ugb2YgYG5zaW1fbnVtX3ZmYCByZWdpc3RlcmVkIHdpdGhpbiBgbnNpbV9idXNgIGNvbmZpcm1zIGl0LiBUaGlzIG1lYW5zIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBgZGV2X251bV92ZmAgZm9yIG15IGBuZXRkZXZzaW1gIGRldmljZXMsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgcHJvY2VzcyBjb25zaWRlcmFibHkuIExldmVyYWdpbmcgYG5ldGRldnNpbWAgaXMgYSBjbGVhciB3aW4gaGVyZSwgc28gYENPTkZJR19ORVRERVZTSU1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4KCkxldCBtZSBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfUENJX0lPVmAgd291bGRuJiMzOTt0IGh1cnQgZWl0aGVyLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwganVzdCBpbiBjYXNlLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBUaGF0IGBydG5sX3ZmaW5mb19jYXBgIGZ1bmN0aW9uIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIHNpbXBsZSBjYXAuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGBydG5sX3ZmaW5mb19zaXplYCBhbmQgYHJ0bmxfZmlsbF92ZmAuIFdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBgcnRubF9maWxsX2lmaW5mb2AgYW5kIGBpZl9ubG1zZ19zaXplYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBIYW5nIG9uLCBpc24mIzM5O3QgYHJ0bmxfZmlsbF9pZmluZm9gIHN0YXRpYz8gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0uIENhbiBJIHN0aWxsIGFjY2VzcyB0aGUgVkYgaW5mb3JtYXRpb24gdGhyb3VnaCBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGxhc3Qgb25lLCBgcnRubF9kdW1wX2lmaW5mb2AsIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZHVtcF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yNTAwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX2lmaW5mb19yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU0My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1NDQ6c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDUte1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ0ODI9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB1MzIgcnRubF9jYWxjaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NDkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDQ5MjpcdC8qIFNhbWUga2VybmVsXHUwMDNjLVx1MDAzZXVzZXJzcGFjZSBpbnRlcmZhY2UgaGFjayBhcyBpbiBydG5sX2R1bXBfaWZpbmZvLiAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5My1cdGhkcmxlbiA9IG5sbXNnX2xlbihubGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgP1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMzktXHR7Lm1zZ3R5cGUgPSBSVE1fR0VUTElOSywgLmRvaXQgPSBydG5sX2dldGxpbmssXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MjQwOlx0IC5kdW1waXQgPSBydG5sX2R1bXBfaWZpbmZvLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzI0MS1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9TUExJVF9OTE1fRE9ORSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTIyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipBbmFseXppbmcgUlRNX0dFVExJTksgYW5kIFJlbGF0ZWQgTmV0bGluayBPcGVyYXRpb25zKioKClJpZ2h0LCBzbywgZGl2aW5nIGludG8gdGhpcyBOZXRsaW5rIHN0dWZmLCBJJiMzOTttIHByZXR0eSBzdXJlIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aG9zZSBgUlRNX0dFVExJTktgIHJlcXVlc3RzLiBUaGF0JiMzOTtzIG15IGZpcnN0IGdvLXRvLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHJldHJpZXZpbmcgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgIHNlZW1zIGZhbWlsaWFyIGluIHRoZSBjb250ZXh0IG9mIGBSVE1fTkVXTElOS2Agb3IgYFJUTV9ERUxMSU5LYCBldmVudHMuIEl0IG1ha2VzIHNlbnNlLCBhcyBhIGJ1aWxkZXIgZm9yIHRoZSBTS0IgdGhhdCB3b3VsZCBlbmNhcHN1bGF0ZSB0aGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGhvdyBpdCBjcmFmdHMgdGhvc2UgbWVzc2FnZXMsIHBhcnRpY3VsYXJseSB0aGUgZGF0YSBmaWVsZHMgaXQgaW5jbHVkZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB1cGRhdGluZyBpbnRlcmZhY2Ugc3RhdGVzLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRtc2dfaWZpbmZvX2J1aWxkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjI9c3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDU2OTpzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NzAtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjEyPXN0YXRpYyB2b2lkIHJ0bXNnX2lmaW5mb19ldmVudChpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjIxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDYyMjpcdHNrYiA9IHJ0bXNnX2lmaW5mb19idWlsZF9za2IodHlwZSwgZGV2LCBjaGFuZ2UsIGV2ZW50LCBmbGFncywgbmV3X25zaWQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjIzLVx0XHRcdFx0ICAgICBuZXdfaWZpbmRleCwgcG9ydGlkLCBubGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gSXQgbG9va3MgbGlrZSBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAgaXMgYSBwcm9taXNpbmcgZnVuY3Rpb24gdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBBIHF1aWNrIHJldmlldyBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDogdGhlIHN5c3RlbSBpbmRpY2F0ZXMgaXQmIzM5O3MgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGlzIGdvb2QgbmV3cy4gTXkgZm9jdXMgc3ltYm9scyBhcmUgc2V0IGFzOgoKKiAgIGBydG5sX2dldGxpbmtgCiogICBgcnRubF9kdW1wX2lmaW5mb2AKKiAgIGBydG1zZ19pZmluZm9fYnVpbGRfc2tiYAoqICAgYGlmX25sbXNnX3NpemVgCiogICBgcnRubF9maWxsX2lmaW5mb2AKCkhhbmcgb24gYSBzZWNvbmQuLi4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggY291bGQgbWVhbiBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCBpdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0IHNlZW1zIHRvIGJlIGEgZmFpcmx5IHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIG1hbmFnaW5nIHRvIGlubGluZSBpdCBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhc3NlbWJseSBsb29rcyBsaWtlIHRvIGVuc3VyZSBJIGhhdmUgdGhlIHByb3BlciB2aWV3IG9mIHRoZSBmdW5jdGlvbi4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yMDg4PXN0YXRpYyBpbnQgcnRubF9maWxsX2RwbGxfcGluKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEwOS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIxMTA6c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMTExLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE5LVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjYyMDpcdFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MjEtXHRcdFx0XHQgICAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00Mjc2PXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzNDgtXHRpZiAobnNrYilcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDk6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzUwLVx0XHRcdFx0ICAgICAgIFJUTV9ORVdMSU5LLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU4OC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODk6XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBkZXZfbmV0KGRldiksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTkwLVx0XHRcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgcnRubF9maWxsX2lmaW5mb2AgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIG1hcmtlZCBgbm9pbmxpbmVgLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLiBUaGV5JiMzOTtyZSBnb29kIGZvY3VzIHN5bWJvbHMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBgQ09ORklHX05FVERFVlNJTWAgbG9va3MgbGlrZSBhIGtleSBvbmUuIEkgc2F3IHJlZmVyZW5jZXMgdG8gYG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmVgIGFuZCBgbnNpbV9udW1fdmZgIHdoaWNoIGFyZSBzb2xpZCBpbmRpY2F0b3JzIGl0JiMzOTtzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgdmlydHVhbCBmdW5jdGlvbnMuIEJleW9uZCB0aGF0LCBgQ09ORklHX05FVGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbi4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGVzc2VudGlhbCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBDT05GSUdfUENJX0lPVmAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgcnRubF92ZmluZm9fY2FwYCBsb2dpYzoKCmBgYGMKc3RhdGljIGludCBydG5sX3ZmaW5mb19jYXAoaW50IG51bV92ZnMsIHUzMiBleHRfZmlsdGVyX21hc2spCnsKCXJldHVybiBtaW4obnVtX3ZmcywKCQkgICBleHRfZmlsdGVyX21hc2sgJmFtcDsgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpOwp9CmBgYAoKWWVwLCBzaW1wbGUgbG9naWMuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGJ1dCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdyBpc3N1ZSB3aGVuIGRldmljZXMgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBWRnMg4oCTIG1vcmUgdGhhbiAxMjggb3IgMjU2LCBkZXBlbmRpbmcgb24gZmlsdGVyaW5nLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgbmV0d29yayBzdGFjay4gSXQmIzM5O3MgYSBzb2xpZCwgcHJhY3RpY2FsIGNoYW5nZS4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyBteSBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBydG5sX2ZpbGxfaWZpbmZvYCwgYGlmX25sbXNnX3NpemVgLCBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTkVUREVWU0lNYCwgYFBDSV9JT1ZgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIHJ0bmV0bGluayBsb2dpYyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2YgVkZzIHJldHVybmVkIGluIGBJRkxBX1ZGSU5GT19MSVNUYCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBmaXggaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGEgc21hbGwsIHlldCBzaWduaWZpY2FudCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBpc3N1ZXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGRldmljZXMgd2l0aCBWRnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoZSBjYXAgYW5kIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhlIGNvbmZpZ3MgZW5hYmxlIHVzIHRvIHRlc3QgdGhlIGRldmljZSB3aXRoIFZGcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtpZl9ubG1zZ19zaXplJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDssCiAgICAmIzM0O3J0bXNnX2lmaW5mb19idWlsZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7aWZfbmxtc2dfc2l6ZSYjMzQ7LAogICAgJiMzNDtydG5sX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtydG1zZ19pZmluZm9fYnVpbGRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjAyOTQzOTMzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzUzNjU3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MTkuMDI5NDQ0MzE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU0OTEwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YTA3MDA3NWNmOWI4YWU4NjQ2NDYzNGFjZWNhYmVjOWQ5MmEwOTE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcXG5pbmRleCA2OGMyNmE3MGJiNjQ5Li5iODBjMmFjM2FjMzExIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXFxuQEAgLTkyOCw2ICs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogdmZpbmZvLWxpc3RcXG4gICAgICAgICB0eXBlOiBuZXN0XFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzXFxuKyAgICAgICAgZG9jOiB8XFxuKyAgICAgICAgICBQZXItVkYgZGV0YWlscy4gVGhlIGxpc3QgaG9sZHMgYXQgbW9zdCAyNTYgVkZzLCBvciAxMjggd2hlblxcbisgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdFxcbisgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcXG4rICAgICAgICAgIHRydW5jYXRlZCBsaXN0OyBudW0tdmYgc3RpbGwgY2FycmllcyB0aGUgcmVhbCBjb3VudC5cXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHN0YXRzNjRcXG4gICAgICAgICB0eXBlOiBiaW5hcnlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0xMTc0LDEyICsxMTc0LDI3IEBAIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsXFxuIFxcdGEtXFx1MDAzZXJ4X25vaGFuZGxlciA9IGItXFx1MDAzZXJ4X25vaGFuZGxlcjtcXG4gfVxcbiBcXG4rLyogQ2FwIHRoZSBudW1iZXIgb2YgVkZzIHRoYXQgSUZMQV9WRklORk9fTElTVCBkZXNjcmliZXMuIFRoZSBuZXN0IGlzIG9uZVxcbisgKiBuZXRsaW5rIGF0dHJpYnV0ZSwgc28gZXZlcnl0aGluZyBpbnNpZGUgaXQgaGFzIHRvIGZpdCBpbiB0aGUgdTE2IG5sYV9sZW4uXFxuKyAqIFRoZSBjYXAgaXMgYSBmaXhlZCBudW1iZXIgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgaGFwcGVucyB0byBmaXQsIHNvIHRoYXQgdGhlXFxuKyAqIGxpbWl0IGlzIGEgcHJvcGVydHkgb2YgdGhlIGludGVyZmFjZSBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgcmVxdWVzdGVkXFxuKyAqIGF0dHJpYnV0ZSBzZXQgYW5kIHRoZSBob3N0J3MgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gVGhlIGxhcmdlc3QgcGVyLVZGXFxuKyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxcbisgKiBzdGF0aXN0aWNzLCBzbyBib3RoIHZhbHVlcyBrZWVwIHRoZSBuZXN0IHdlbGwgaW5zaWRlIFUxNl9NQVguXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4re1xcbitcXHRyZXR1cm4gbWluKG51bV92ZnMsXFxuK1xcdFxcdCAgIGV4dF9maWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9TS0lQX1NUQVRTID8gMjU2IDogMTI4KTtcXG4rfVxcbitcXG4gLyogQWxsIFZGIGluZm8gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxcbiB7XFxuIFxcdGlmIChkZXYtXFx1MDAzZWRldi5wYXJlbnQgXFx1MDAyNlxcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9WRikpIHtcXG4tXFx0XFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdFxcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXh0X2ZpbHRlcl9tYXNrKTtcXG4gXFx0XFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4gXFx0XFx0c2l6ZSArPSBudW1fdmZzICpcXG4gXFx0XFx0XFx0KG5sYV90b3RhbF9zaXplKDApICtcXG5AQCAtMTcxNyw2ICsxNzMyLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIXZmaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuK1xcdC8qIElGTEFfTlVNX1ZGIGFib3ZlIHN0YXlzIHRoZSBkZXZpY2UncyBWRiBjb3VudDsgdGhlIGxpc3QgaXRzZWxmIGlzXFxuK1xcdCAqIGNhcHBlZCBzbyB0aGF0IGl0cyBsZW5ndGggY2Fubm90IG92ZXJmbG93IG5sYV9sZW4uXFxuK1xcdCAqL1xcbitcXHRudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKG51bV92ZnMsIGV4dF9maWx0ZXJfbWFzayk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuIFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuIFxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjQ0NTQ3Mjk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzOTM3NjE0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGEwNzAwNzVjZjliOGFlODY0NjQ2MzRhY2VjYWJlYzlkOTJhMDkxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbFxuaW5kZXggNjhjMjZhNzBiYjY0OS4uYjgwYzJhYzNhYzMxMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbkBAIC05MjgsNiArOTI4LDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogdmZpbmZvLWxpc3RcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiB2ZmluZm8tbGlzdC1hdHRyc1xuKyAgICAgICAgZG9jOiB8XG4rICAgICAgICAgIFBlci1WRiBkZXRhaWxzLiBUaGUgbGlzdCBob2xkcyBhdCBtb3N0IDI1NiBWRnMsIG9yIDEyOCB3aGVuXG4rICAgICAgICAgIHN0YXRpc3RpY3MgYXJlIGluY2x1ZGVkLCBiZWNhdXNlIGl0IGlzIG9uZSBhdHRyaWJ1dGUgYW5kIGhhcyB0byBmaXRcbisgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcbisgICAgICAgICAgdHJ1bmNhdGVkIGxpc3Q7IG51bS12ZiBzdGlsbCBjYXJyaWVzIHRoZSByZWFsIGNvdW50LlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHN0YXRzNjRcbiAgICAgICAgIHR5cGU6IGJpbmFyeVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0xMTc0LDEyICsxMTc0LDI3IEBAIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsXG4gXHRhLVx1MDAzZXJ4X25vaGFuZGxlciA9IGItXHUwMDNlcnhfbm9oYW5kbGVyO1xuIH1cbiBcbisvKiBDYXAgdGhlIG51bWJlciBvZiBWRnMgdGhhdCBJRkxBX1ZGSU5GT19MSVNUIGRlc2NyaWJlcy4gVGhlIG5lc3QgaXMgb25lXG4rICogbmV0bGluayBhdHRyaWJ1dGUsIHNvIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IGhhcyB0byBmaXQgaW4gdGhlIHUxNiBubGFfbGVuLlxuKyAqIFRoZSBjYXAgaXMgYSBmaXhlZCBudW1iZXIgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgaGFwcGVucyB0byBmaXQsIHNvIHRoYXQgdGhlXG4rICogbGltaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJmYWNlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSByZXF1ZXN0ZWRcbisgKiBhdHRyaWJ1dGUgc2V0IGFuZCB0aGUgaG9zdCdzIGFsaWdubWVudCByZXF1aXJlbWVudHMuIFRoZSBsYXJnZXN0IHBlci1WRlxuKyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxuKyAqIHN0YXRpc3RpY3MsIHNvIGJvdGggdmFsdWVzIGtlZXAgdGhlIG5lc3Qgd2VsbCBpbnNpZGUgVTE2X01BWC5cbisgKi9cbitzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbit7XG4rXHRyZXR1cm4gbWluKG51bV92ZnMsXG4rXHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xuK31cbitcbiAvKiBBbGwgVkYgaW5mbyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHUzMiBleHRfZmlsdGVyX21hc2spXG4ge1xuIFx0aWYgKGRldi1cdTAwM2VkZXYucGFyZW50IFx1MDAyNlx1MDAyNiAoZXh0X2ZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpKSB7XG4tXHRcdGludCBudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG4rXHRcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpLFxuK1x0XHRcdFx0XHQgICAgICBleHRfZmlsdGVyX21hc2spO1xuIFx0XHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xuIFx0XHRzaXplICs9IG51bV92ZnMgKlxuIFx0XHRcdChubGFfdG90YWxfc2l6ZSgwKSArXG5AQCAtMTcxNyw2ICsxNzMyLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCF2ZmluZm8pXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4rXHQvKiBJRkxBX05VTV9WRiBhYm92ZSBzdGF5cyB0aGUgZGV2aWNlJ3MgVkYgY291bnQ7IHRoZSBsaXN0IGl0c2VsZiBpc1xuK1x0ICogY2FwcGVkIHNvIHRoYXQgaXRzIGxlbmd0aCBjYW5ub3Qgb3ZlcmZsb3cgbmxhX2xlbi5cbitcdCAqL1xuK1x0bnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChudW1fdmZzLCBleHRfZmlsdGVyX21hc2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjQ0NTQ3NDA0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTk2NDQyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVE5MIFZGSU5GTyBMaXN0IENhcCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBydG5sX3ZmaW5mb19jYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cywgc3BlY2lmaWNhbGx5IGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgcmV0dXJuZWQgd2l0aGluIHRoZSBgSUZMQV9WRklORk9fTElTVGAuIFRoZXkncmUgY2FwcGluZyB0aGUgc2l6ZSwgcHJvYmFibHkgYmVjYXVzZSBgbmxhX2xlbmAgaXMgYSBgdTE2YCBhbmQgY2FuIGJlIG92ZXJmbG93ZWQuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgaW1wYWN0ZWQ6IGBydG5sX2ZpbGxfdmZgLCBgcnRubF92ZmluZm9fc2l6ZWAsIGFuZCwgb2YgY291cnNlLCBgcnRubF92ZmluZm9fY2FwYC4gUmlnaHQsIHNvIGBydG5sX2ZpbGxfdmZgIGlzIGNhbGxlZCBieSBgcnRubF9maWxsX2lmaW5mb2AsIGFuZCBgcnRubF92ZmluZm9fc2l6ZWAgZmVlZHMgaW50byBgaWZfbmxtc2dfc2l6ZWAuIFRoaXMgbWVhbnMgdGhhdCBgcnRubF9maWxsX3ZmYCBlc3NlbnRpYWxseSBmaWxscyB0aGUgVkYgZGF0YSBhbmQgZGV0ZXJtaW5lcyB0aGUgc2l6ZS4gTWFrZXMgc2Vuc2UuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgbW9kaWZpY2F0aW9uIGluIHJ0bmV0bGluaywgc28gbXkgZ3V0IHRlbGxzIG1lIGl0J3MgZnV6ei13b3J0aHkuIFRoZXJlJ3MgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaGVyZSwgYXMgaXQncyBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHNlbnQgb3ZlciB0aGUgd2lyZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgYXJlYXMgdG8gZm9jdXMgb24gZm9yIGEgZnV6emluZyBjYW1wYWlnbi4gYHJ0bmxfZmlsbF92ZmAgaXMgYG5vaW5saW5lX2Zvcl9zdGFja2AgYW5kIHN0YXRpYyAtIHRoYXQncyBpbnRlcmVzdGluZy4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBldGMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRob3NlLlxuXG5UaW1lIHRvIGV4YW1pbmUgYHJ0bmxfZmlsbF92ZmAgaXRzZWxmIHdpdGhpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBMZXQncyBzZWUgaG93IHRoaXMgY2FwIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjYuNjA1MTI2MTY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODExNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xNTQzPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTY3OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNTY4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcxMy1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNzE0OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MTUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV92ZnM7IGkrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3NDE6XFx0XFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzQyLVxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMTEwPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjIyNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMjI2OlxcdGlmIChydG5sX2ZpbGxfdmYoc2tiLCBkZXYsIGV4dF9maWx0ZXJfbWFzaykpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjIyNy1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjYuNjUxOTQzNjE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0ODY1MTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgdGhvdWdoIEknbSB0aGUgb25lIGhhdmluZyB0aGUgdGhvdWdodHM6XG5cbioqRm9jdXNpbmcgb24gTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbiBjb2RlLiBgcnRubF9maWxsX2lmaW5mb2AgZmVlbHMgbGlrZSBhIHNvbGlkIGZvY2FsIHBvaW50LiBUaGF0IGZ1bmN0aW9uJ3MgZGVmaW5pdGVseSBjZW50cmFsIHRvIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZXJmYWNlIGRldGFpbHMsIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgZGF0YSBzdHJ1Y3R1cmVzLiBOb3csIEknbSB0cnlpbmcgdG8gZXhwYW5kIG15IHBlcnNwZWN0aXZlIGEgYml0LiBJIHdvbmRlciBpZiBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gZXhwbG9yZSBgcnRubF92ZmluZm9fc2l6ZWAgYXMgd2VsbCwgYXMgSSBrbm93IHRoYXQgY29uY2VybnMgdmlydHVhbCBmdW5jdGlvbiBzaXppbmcuIFRoaXMgY291bGQgcHJvdmlkZSBhbm90aGVyIHBlcnNwZWN0aXZlIHRvIG15IGluaXRpYWwgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MToyOS40MDA1OTc4MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NjkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF92ZmluZm9fc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xMTg1PXN0YXRpYyBpbnQgcnRubF92ZmluZm9fY2FwKGludCBudW1fdmZzLCB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5MS0vKiBBbGwgVkYgaW5mbyAqL1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjExOTI6c3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExOTMtXFx0XFx0XFx0XFx0ICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc3LVxcdFxcdFxcdCAgICAgICAgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYgPyA0IDogMCkgLyogSUZMQV9OVU1fVkYgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzc4OlxcdCAgICAgICArIHJ0bmxfdmZpbmZvX3NpemUoZGV2LCBleHRfZmlsdGVyX21hc2spIC8qIElGTEFfVkZJTkZPX0xJU1QgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc5LVxcdCAgICAgICArIHJ0bmxfcG9ydF9zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSAvKiBJRkxBX1ZGX1BPUlRTICsgSUZMQV9QT1JUX1NFTEYgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjkuNDQzMzcxNTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDM4MjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBuYXZpZ2F0aW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbi4gYGlmX25sbXNnX3NpemVgIOKAkyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmb2N1cyBvbiwgYXMgSSBrbm93LiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgZXNzZW50aWFsbHkuIEl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzaXplIG9mIE5ldGxpbmsgbWVzc2FnZXMgcmVsYXRlZCB0byBpbnRlcmZhY2UgZGF0YS4gTm93LCB3aGVyZSBkbyBJIGFjdHVhbGx5IGJlZ2luIHRvICpnZXQqIHRoYXQgZGF0YT8gSSdkIGxvb2sgdG8gYHJ0bmxfZ2V0bGlua2AgYW5kIGBydG5sX2R1bXBfaWZpbmZvYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gYHJ0bmxfZ2V0bGlua2AgcHJvYmFibHkgZmV0Y2hlcyB0aGUgc3BlY2lmaWMgbGluayBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0LCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gbG9va2luZyBmb3IuIFRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBteSBpbml0aWFsIGFuY2hvcnMgaW4gdGhpcyBzcGFjZS4gSSBjYW4gdXNlIHRob3NlIHRvIHN0YXJ0IHF1ZXJ5aW5nIGFuZCBsb29raW5nIGF0IHRoZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTozMi42OTc3NTY1ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5NTQ5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZfbmxtc2dfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xMzIxPXN0YXRpYyBzaXplX3QgcnRubF9kZXZfcGFyZW50X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMzUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMzNjpzdGF0aWMgbm9pbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzM3LVxcdFxcdFxcdFxcdCAgICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNzY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ2LVxcdGVyciA9IC1FTk9CVUZTO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDc6XFx0bnNrYiA9IG5sbXNnX25ld19sYXJnZShpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDM0OC1cXHRpZiAobnNrYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzNjUtXFx0XFx0XFx0fVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNjY6XFx0XFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGlmX25sbXNnX3NpemUgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzY3LVxcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ0ODI9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB1MzIgcnRubF9jYWxjaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MTQtXFx0XFx0bWluX2lmaW5mb19kdW1wX3NpemUgPSBtYXgobWluX2lmaW5mb19kdW1wX3NpemUsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDUxNTpcXHRcXHRcXHRcXHRcXHQgICBpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUxNi1cXHR9XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTY5PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3OS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTgwOlxcdHNrYiA9IG5sbXNnX25ldyhpZl9ubG1zZ19zaXplKGRldiwgMCksIGZsYWdzKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTgxLVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTItXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTkzOlxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplKCkgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTk0LVxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjMyLjczODcxNTkyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTQ3MTc1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb3V0ZSBOZXRsaW5rIEludGVyZmFjZSBmb3IgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgdGhpcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBlbnRyeSBwb2ludHM6IGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AgKHdoaWNoIEkga25vdyBnb2VzIHRocm91Z2ggYHJ0bmxfY2FsY2l0YCksIGFuZCBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggVmlydHVhbCBGdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGNlbnRyYWwgdG8gdGhlIHJ0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgSSdtIHByZXR0eSBjZXJ0YWluIGl0J3MgYWx3YXlzIGVuYWJsZWQuIFN0aWxsLCBpdCByZWxhdGVzIHRvIFZGcyBzcGVjaWZpY2FsbHksIHNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2suXG5cbk5vdywgYmVjYXVzZSBWRnMgYXJlIHJlbGF0ZWQgdG8gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIEkgc2hvdWxkIGNvbnNpZGVyIHJlbGV2YW50IGNvbmZpZ3MuIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX1BDSV9JT1ZgLiBJIHNob3VsZCBleGFtaW5lIHRoYXQsIGFuZCB0aGVuIGNoZWNrIGBkZXZfbnVtX3ZmYCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgaW5kaWNhdG9yIG9mIFZGIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MzYuMjUzNDM2MTMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzOTg0MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9udW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQwND1zdGF0aWMgdm9pZCB2aXJ0aW9fZGV2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDM3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQzODpzdGF0aWMgaW50IHZpcnRpb19kZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDQxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcXHRyZXR1cm4gZGV2X251bV92Zih2ZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM9NDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdmlydGlvX2J1cyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1NC1cXHQuc2h1dGRvd24gPSB2aXJ0aW9fZGV2X3NodXRkb3duLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcXHQubnVtX3ZmID0gdmlydGlvX2Rldl9udW1fdmYsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU2LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oPTEyNzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9vZl9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oOjEyODA6c3RhdGljIGlubGluZSBpbnQgZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaC0xMjgxLXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTExOTI9c3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5NS1cXHRpZiAoZGV2LVxcdTAwM2VkZXYucGFyZW50IFxcdTAwMjZcXHUwMDI2IChleHRfZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE5NjpcXHRcXHRpbnQgbnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCksXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBleHRfZmlsdGVyX21hc2spO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTI0MT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjU4LVxcdFxcdHJldHVybiAwO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyNTk6XFx0aWYgKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSlcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjYwLVxcdFxcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSArIHZmX3BvcnRzX3NpemUgK1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyNjE6XFx0XFx0XFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNjItXFx0ZWxzZVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQxMT1zdGF0aWMgaW50IHJ0bmxfdmZfcG9ydHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQyMS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNDIyOlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KTsgdmYrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MjMtXFx0XFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDY3PXN0YXRpYyBpbnQgcnRubF9wb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0NzktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTQ4MDpcXHRpZiAoZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQ4MS1cXHRcXHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTcxND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MjMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTcyNDpcXHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MjUtXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTozNy45MDc0Mjg3ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMjI5NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGRldl9udW1fdmZgLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGluIG9uZSBvZiB0aGUgY29yZSBrZXJuZWwgaGVhZGVyIGZpbGVzIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiB0aGluZywgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZS4gVGhpcyBmaWxlIGhvdXNlcyBjb3JlIGRldmljZSBtb2RlbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucywgc28gaXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhIGZpZWxkIHRoYXQgcmVsYXRlcyB0byB2aXJ0dWFsIGZ1bmN0aW9ucyB3aXRoaW4gYSBkZXZpY2Ugc3RydWN0dXJlLiBJJ20gZ29pbmcgdG8gaGVhZCB0aGVyZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjQwLjQyOTcyNjI2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NjI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X251bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaC0xMjc5LVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oLTEyODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0MC40NzA0OTM5NTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDg5MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERldmljZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGV2aWNlIG1vZGVsIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIGEgY29yZSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZGV2aWNlYCwgYW5kIHRoZSBzdXJyb3VuZGluZyBkZWZpbml0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAgYXJvdW5kIGxpbmUgMTI4MC4gSSBrbm93IHRoaXMgZmlsZSBpcyBtYXNzaXZlLCBidXQgbGluZSAxMjgwIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zLiBJJ20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQga2V5IG1lbWJlcnMgcmVsYXRlZCB0byB0aGVpciBsaWZlY3ljbGUsIGF0dHJpYnV0ZXMsIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggZHJpdmVycyBhbmQgYnVzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JnYW5pemVzIHRoZXNlIGRldmljZSBvYmplY3RzLiBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIG1hY3JvcyB0byBmdWxseSBncmFzcCB0aGUgY29uY2VwdHMgaGVyZSwgYnV0IHRoaXMgc2hvdWxkIGJlIGEgc29saWQgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjQzLjU2NTM5Mjk5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfT0YpIHx8ICFkZXYpXFxuMTI3NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjc3OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0aWYgKGRldi1cXHUwMDNlYnVzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlYnVzLVxcdTAwM2VudW1fdmYpXFxuMTI4MzpcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bV92ZihkZXYpO1xcbjEyODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdC8qXFxuMTI4ODpcXHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcXG4xMjg5OlxcdCAqL1xcbjEyOTA6XFx0c3RydWN0IGRldmljZSAqX19yb290X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdC8qIFRoaXMgaXMgYSBtYWNybyB0byBhdm9pZCBpbmNsdWRlIHByb2JsZW1zIHdpdGggVEhJU19NT0RVTEUgKi9cXG4xMjkzOlxcdCNkZWZpbmUgcm9vdF9kZXZpY2VfcmVnaXN0ZXIobmFtZSkgXFxcXFxcbjEyOTQ6XFx0XFx0X19yb290X2RldmljZV9yZWdpc3RlcihuYW1lLCBUSElTX01PRFVMRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NDMuNTY1NjE1MTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzI2MTExOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWaXJ0dWFsIEZ1bmN0aW9ucyBBY3Jvc3MgRGlmZmVyZW50IEJ1c2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UgaGFuZGxlIFZpcnR1YWwgRnVuY3Rpb25zIChgVkZgKSBhY3Jvc3MgZGlmZmVyZW50IGRldmljZSBkcml2ZXJzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0aGF0IGBkZXZfbnVtX3ZmYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgVkZzIGEgZGV2aWNlIHN1cHBvcnRzLiBJdCdzIGNhbGxpbmcgYGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldilgLCB3aGljaCB0ZWxscyBtZSB0aGUgc3BlY2lmaWMgYnVzIHR5cGUgaXMgY3J1Y2lhbC4gRm9yIFBDSSBkZXZpY2VzLCBteSBndWVzcyBpcyB0aGF0IHRoaXMgaXMgaGFuZGxlZCBieSBgcGNpX251bV92ZmAuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluaywgYXJlIHdlICpvbmx5KiBkZWFsaW5nIHdpdGggUENJIGhlcmU/XG5cbkhvbGQgb24uIElzbid0IGB2aXJ0aW9fYnVzYCBhbHNvIGNhcGFibGUgb2YgVkZzPyBSaWdodCwgdGhlcmUncyBgdmlydGlvX2Rldl9udW1fdmZgLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYENPTkZJR19QQ0lfSU9WYCBzb2xlbHkgZm9yIGVuYWJsaW5nIFBDSSBWRnMsIG9yIGRvZXMgdGhlIHZpcnRpbyBpbXBsZW1lbnRhdGlvbiBoYXZlIGl0cyBvd24gZGlzdGluY3QgbmVlZHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaG93IGBwY2lfbnVtX3ZmYCBpcyBpbXBsZW1lbnRlZC4gVGhhdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0Ny41MzgyMjkxMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDMwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXFxuLS1cXG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTU5LVxcdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cXHUwMDNlemJ1cy1cXHUwMDNlYnVzLCB6ZGV2LVxcdTAwM2VkZXZmbik7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcXHRpZiAocGRldiBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy02MS1cXHRcXHRyYyA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9pZGUuYy0yNDctXFx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XFxuZHJpdmVycy9wY2kvaWRlLmM6MjQ4OlxcdGludCBudW1fdmYsIHJpZF9lbmQ7XFxuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxcbi0tXFxuZHJpdmVycy9wY2kvaWRlLmMtMjgwLVxcdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcXHRudW1fdmYgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcXHRpZiAobnVtX3ZmKVxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MzpcXHRcXHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcXG5kcml2ZXJzL3BjaS9pZGUuYzoyODQ6XFx0XFx0XFx0XFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcXG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NDY6XFx0dTE2IG51bV92ZnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVxcdGRldmljZV9sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcXHRudW1fdmZzID0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUxLVxcdGRldmljZV91bmxvY2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFxcdTAwM2UgMDsgbnVtYmVyIG9mIFZGcyB0byBlbmFibGVcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy00NjgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9wY2kvaW92LmM6NDY5OlxcdHUxNiBudW1fdmZzO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XFx0aWYgKGtzdHJ0b3UxNihidWYsIDAsIFxcdTAwMjZudW1fdmZzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9wY2kvaW92LmMtNDcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3My1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XFx0aWYgKG51bV92ZnMgXFx1MDAzZSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0Nzk6XFx0aWYgKG51bV92ZnMgPT0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0OTY6XFx0aWYgKG51bV92ZnMgPT0gMCkge1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cXHRcXHQvKiBkaXNhYmxlIFZGcyAqL1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNTA2LVxcdFxcdHBjaV93YXJuKHBkZXYsIFxcXCIlZCBWRnMgYWxyZWFkeSBlbmFibGVkLiBEaXNhYmxlIGJlZm9yZSBlbmFibGluZyAlZCBWRnNcXFxcblxcXCIsXFxuZHJpdmVycy9wY2kvaW92LmM6NTA3OlxcdFxcdFxcdCBwZGV2LVxcdTAwM2Vzcmlvdi1cXHUwMDNlbnVtX1ZGcywgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNTA4LVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuZHJpdmVycy9wY2kvaW92LmM6NTEzOlxcdHJldCA9IHBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo1MTg6XFx0aWYgKHJldCAhPSBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cXHRcXHRwY2lfd2FybihwZGV2LCBcXFwiJWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvcGNpL2lvdi5jOjUyMDpcXHRcXHRcXHQgbnVtX3ZmcywgcmV0KTtcXG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYz02MTM9Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzcmlvdl9wZl9kZXZfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2MTg6aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTYyMz1pbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2Mjg6c3RhdGljIGludCBzcmlvdl9hZGRfdmZzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy02MzUtXFxuZHJpdmVycy9wY2kvaW92LmM6NjM2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXFx0XFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTExOTA9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rpc2FibGVfc3Jpb3YpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTkzOiAqIHBjaV9udW1fdmYgLSByZXR1cm4gbnVtYmVyIG9mIFZGcyBhc3NvY2lhdGVkIHdpdGggYSBQRiBkZXZpY2VfcmVsZWFzZV9kcml2ZXJcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk3LSAqL1xcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XFxuZHJpdmVycy9wY2kvaW92LmMtMTIwNi1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzYyLSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2NS0gKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXFxuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtMTM3My17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNzc6XFx0aWYgKCFudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzgwOlxcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXFx0c2l6ZXMgPSAocm91bmR1cF9wb3dfb2ZfdHdvKHZmX2xlbiArIDEpIC0gMSkgXFx1MDAzZVxcdTAwM2UgaWxvZzIoU1pfMU0pO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE2MjU9dm9pZCBwY2lfdWV2ZW50X2VycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBwY2lfZXJzX3Jlc3VsdCBlcnJfdHlwZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU2OnN0YXRpYyBpbnQgcGNpX2J1c19udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcXHRyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cXHQucG1cXHRcXHQ9IFBDSV9QTV9PUFNfUFRSLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzM5OlxcdC5udW1fdmZcXHRcXHQ9IHBjaV9idXNfbnVtX3ZmLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVxcdC5kbWFfY29uZmlndXJlXFx0PSBwY2lfZG1hX2NvbmZpZ3VyZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXFx0ZGV2aWNlX2xvY2soZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNjk3OlxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTY5OC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtOTUtXFx0XFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXFxuZHJpdmVycy9wY2kvdHNtLmM6OTY6XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBwY2lfbnVtX3ZmKHBmKTsgaisrKSB7XFxuZHJpdmVycy9wY2kvdHNtLmMtOTctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvcGNpL3RzbS5jLTEzNS1cXHRcXHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cXG5kcml2ZXJzL3BjaS90c20uYzoxMzY6XFx0XFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5kcml2ZXJzL3BjaS90c20uYy0xMzctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0Ny41ODIyNjQ5MzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNjMyNjUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHBjaV9udW1fdmZgIFZhcmlhYmxlKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBwY2lfbnVtX3ZmYCB2YXJpYWJsZSBpcyBkZWZpbmVkLiBUaGUgaGludCBwb2ludHMgdG8gYGRyaXZlcnMvcGNpL2lvdi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCdzIGxpa2VseSByZWxhdGVkIHRvIEkvTyBWaXJ0dWFsaXphdGlvbi4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCBzcGVjaWZpYyBmaWxlLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUENJX0lPVmAgaXMgZXZlbiBlbmFibGVkLiBUaGF0IHdvdWxkIGJlIHRoZSBmaXJzdCBwb2ludCB0byBjaGVjay4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb24gc3Vycm91bmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeW1ib2wuXG5cblRvIGRvIHRoYXQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIE15IGdvLXRvIGxvY2F0aW9uIGlzIGFsd2F5cyBgaW5jbHVkZS9saW51eC9wY2kuaGAuIFRpbWUgdG8gc2VlIGlmIGl0J3MgdGhlcmUgYW5kIHdoYXQncyBjb25uZWN0ZWQgdG8gaXQuIEkgd2FudCB0byBzZWUgaG93IGBwY2lfbnVtX3ZmYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYENPTkZJR19QQ0lfSU9WYCBvciBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo1MS41MTg1OTM2NDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODkxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9udW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wY2kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njg9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjI1Njk6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuaW5jbHVkZS9saW51eC9wY2kuaC0yNTcwLWludCBwY2lfdmZzX2Fzc2lnbmVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaD0yNjE5PXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH1cXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjI2MjA6c3RhdGljIGlubGluZSBpbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIxLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NTEuNTYwNDkwMTE3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTE0Mzg1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX1BDSV9JT1ZgIGlzbid0IGVuYWJsZWQsIGBwY2lfbnVtX3ZmYCB3aWxsIHJldHVybiB6ZXJvLCBhcyBleHBlY3RlZC4gQnV0IGBkZXZfbnVtX3ZmYCBpcyB0aGUgZ2VuZXJpYyBvbmUsIHJpZ2h0PyBJdCBjYWxscyB0aGUgYG51bV92ZmAgZnVuY3Rpb24gZnJvbSB0aGUgZGV2aWNlJ3MgYnVzLiBJbiB0aGUgUENJIGNhc2UsIHRoYXQncyBgcGNpX2J1c19udW1fdmZgLCB3aGljaCB1bHRpbWF0ZWx5IGNhbGxzIGBwY2lfbnVtX3ZmYC4gU28sIGJhY2sgdG8gdGhlIHN0YXJ0aW5nIHBvaW50OiBubyBgQ09ORklHX1BDSV9JT1ZgLCBubyBWRnMgZm9yIFBDSSBkZXZpY2VzLCBhbmQgYGRldl9udW1fdmZgIHJldHVybnMgemVyby4gVGhhdCBtZWFucyBgcnRubF92ZmluZm9fY2FwYCB3aWxsIHJldHVybiB6ZXJvLCBhbmQgYHJ0bmxfZmlsbF92ZmAgd29uJ3QgZG8gYW55dGhpbmcuIEVzc2VudGlhbGx5LCB3ZSAqbmVlZCogYENPTkZJR19QQ0lfSU9WYCB0byBiZSBlbmFibGVkIHRvIGhhdmUgYW55IFZpcnR1YWwgRnVuY3Rpb25zLlxuXG5CdXQgd2FpdCwgd2hhdCBhYm91dCBWaXJ0SU8/IExldCBtZSBjb25zaWRlciBgdmlydGlvX2Rldl9udW1fdmZgLiBJdCBjYWxscyBgZGV2X251bV92ZmAgb24gdGhlIHBhcmVudCBkZXZpY2UuIElmIHRoZSBwYXJlbnQgZGV2aWNlIGlzIGEgUENJIGRldmljZS4uLiB0aGVuIHdlJ3JlIGJhY2sgaW4gdGhlIFBDSSBjb250ZXh0LCBhbmQgaXQgY2FsbHMgYHBjaV9udW1fdmZgLiBTbyBldmVuIHRocm91Z2ggVmlydElPLCBgQ09ORklHX1BDSV9JT1ZgIGlzIHRoZSBrZXkuIEl0IHJlYWxseSBpcyB0aGUgcHJpbWFyeSBjb25maWcgZm9yIHRoZSB3aG9sZSBWRiBlY29zeXN0ZW0uXG5cbk5vdywgbGV0J3MgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIG9uZS4gYENPTkZJR19QQ0lfSU9WYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIGZvciB0ZXN0aW5nIFZGcy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGRyaXZlcnMgdGhhdCBzdXBwb3J0IFNSLUlPViBhbmQgYXJlIHN1cHBvcnRlZCBpbiBRRU1VIHRoYXQgSSBjYW4gdGVzdD8gSSBrbm93IFFFTVUgc3VwcG9ydHMgYGlnYmAsIGBlMTAwMGVgLCBhbmQgYG52bWVgLiBSaWdodCwgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBTbywgZG8gSSBuZWVkIGBDT05GSUdfSUdCYD8gU3l6a2FsbGVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGBuZXRkZXZzaW1gLCBgdmV0aGAsIGFuZCBgZHVtbXlgLiBEb2VzIGFueSBvZiB0aGVtIHN1cHBvcnQgVkZzPyBMZXQgbWUgY2hlY2sgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYG5ldGRldnNpbWAgc3VwcG9ydHMgVkZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo1OC4wMTE5MzA4MTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzczMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNyaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo2MTpcXHRfX0FUVFIoc3Jpb3ZfbnVtdmZzLCAwNjY0LCBuc2ltX2J1c19kZXZfbnVtdmZzX3Nob3csXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVxcdCAgICAgICBuc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NTguMDUzMzA4MDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDI4MDQ0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqU1ItSU9WIG9uIE5ldGRldnNpbTogRGlnZ2luZyBJbioqXG5cblJpZ2h0LCBzbyBgbmV0ZGV2c2ltYCBoYXMgdGhhdCBgc3Jpb3ZfbnVtdmZzYCBwYXJhbWV0ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCdzIGltcGxlbWVudGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHNpbXVsYXRlZCBidXMgYW5kIGRldmljZSBpbnRlcmFjdGlvbiwgaW5jbHVkaW5nIFNSLUlPViBtYW5hZ2VtZW50LCB0byByZXNpZGUuIEkgYmV0IEknbGwgZmluZCB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBWRiBjcmVhdGlvbi9kZWxldGlvbiBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIFBGIGhhbmRsZXMgaXRzIFZGcy4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgaG93IHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQgaGFuZGxlcyBTUi1JT1YsIGFzIG9wcG9zZWQgdG8gYSByZWFsIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgbm90IGJlIGEgZnVsbCwgb25lLXRvLW9uZSBtYXBwaW5nIHdpdGggaGFyZHdhcmUgU1ItSU9WLCBidXQgSSdtIGVhZ2VyIHRvIGZpbmQgb3V0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IGhvb2tzIHRoZXkgdXNlIGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjAxLjM5NjExNDczMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMjI0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTMxPW5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNC1cXHRzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYgPSB0b19uc2ltX2J1c19kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6MzU6XFx0dW5zaWduZWQgaW50IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM2LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozODpcXHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMCwgXFx1MDAyNm51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0LVxcdGlmIChkZXZfZ2V0X2RydmRhdGEoZGV2KSlcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDU6XFx0XFx0cmV0ID0gbnNpbV9kcnZfY29uZmlndXJlX3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00Ni1cXHRkZXZpY2VfdW5sb2NrKGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NTI9bnNpbV9idXNfZGV2X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NTc6XFx0cmV0dXJuIHNwcmludGYoYnVmLCBcXFwiJXVcXFxcblxcXCIsIG5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00MjM9c3RhdGljIHZvaWQgbnNpbV9idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MjktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzMDpzdGF0aWMgaW50IG5zaW1fbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzNDpcXHRyZXR1cm4gbnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzUtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIG5zaW1fYnVzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0Mi1cXHQucmVtb3ZlXFx0XFx0PSBuc2ltX2J1c19yZW1vdmUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQ0MzpcXHQubnVtX3ZmXFx0XFx0PSBuc2ltX251bV92ZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQ0LX07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjA9dW5zaWduZWQgaW50IG5zaW1fZGV2X2dldF92ZnMoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NjU6XFx0cmV0dXJuIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2OTpuc2ltX2J1c19kZXZfc2V0X3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIHVuc2lnbmVkIGludCBudW1fdmZzKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MC17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcxLVxcdHJ0bmxfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo3MjpcXHRuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03My1cXHRydG5sX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4NjE9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODYyOlxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODY4LVxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2OTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzID09IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzAtXFx0XFx0Z290byBleGl0X3VubG9jaztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3MTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzIFxcdTAwMjZcXHUwMDI2IG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Mi1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3NC1cXHR9XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NzU6XFx0aWYgKG5zaW1fYnVzX2Rldi1cXHUwMDNlbWF4X3ZmcyBcXHUwMDNjIG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Ni1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODA6XFx0bnNpbV9idXNfZGV2X3NldF92ZnMobnNpbV9idXNfZGV2LCBudW1fdmZzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4MS1cXHRpZiAobnNpbV9lc3dfbW9kZV9pc19zd2l0Y2hkZXYobnNpbV9kZXYpKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODI6XFx0XFx0aWYgKG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4My1cXHRcXHRcXHRyZXQgPSBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKG5zaW1fZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zOTk9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MDA6XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4My1cXHR1bnNpZ25lZCBpbnQgbWF4X3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDg0OlxcdHVuc2lnbmVkIGludCBudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODUtXFx0Ym9vbCBpbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjowMS40MzkyNDI3MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMDAzMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBuZXRkZXZzaW1gIHN1cHBvcnRzIFZpcnR1YWwgRnVuY3Rpb25zISBUaGF0J3MgZXhjZWxsZW50IG5ld3MuIFRoZSBwcmVzZW5jZSBvZiBgbnNpbV9udW1fdmZgIHJlZ2lzdGVyZWQgd2l0aGluIGBuc2ltX2J1c2AgY29uZmlybXMgaXQuIFRoaXMgbWVhbnMgSSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIGBkZXZfbnVtX3ZmYCBmb3IgbXkgYG5ldGRldnNpbWAgZGV2aWNlcywgd2hpY2ggc2ltcGxpZmllcyB0aGUgdGVzdGluZyBwcm9jZXNzIGNvbnNpZGVyYWJseS4gTGV2ZXJhZ2luZyBgbmV0ZGV2c2ltYCBpcyBhIGNsZWFyIHdpbiBoZXJlLCBzbyBgQ09ORklHX05FVERFVlNJTWAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BDSV9JT1ZgIHdvdWxkbid0IGh1cnQgZWl0aGVyLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwganVzdCBpbiBjYXNlLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC4gVGhhdCBgcnRubF92ZmluZm9fY2FwYCBmdW5jdGlvbiBsb29rcyBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBzaW1wbGUgY2FwLiBJdCdzIHVzZWQgd2l0aGluIGBydG5sX3ZmaW5mb19zaXplYCBhbmQgYHJ0bmxfZmlsbF92ZmAuIFdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBgcnRubF9maWxsX2lmaW5mb2AgYW5kIGBpZl9ubG1zZ19zaXplYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBIYW5nIG9uLCBpc24ndCBgcnRubF9maWxsX2lmaW5mb2Agc3RhdGljPyBUaGF0IGNvdWxkIGJlIGEgcHJvYmxlbS4gQ2FuIEkgc3RpbGwgYWNjZXNzIHRoZSBWRiBpbmZvcm1hdGlvbiB0aHJvdWdoIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2A/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgbGFzdCBvbmUsIGBydG5sX2R1bXBfaWZpbmZvYCwgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDI6MDYuODY5Mjc3OTIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxMjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2R1bXBfaWZpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTI1MDA9c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfaWZpbmZvX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU0NDpzdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDUte1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQ4Mj1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHUzMiBydG5sX2NhbGNpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5MS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NDkyOlxcdC8qIFNhbWUga2VybmVsXFx1MDAzYy1cXHUwMDNldXNlcnNwYWNlIGludGVyZmFjZSBoYWNrIGFzIGluIHJ0bmxfZHVtcF9pZmluZm8uICovXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5My1cXHRoZHJsZW4gPSBubG1zZ19sZW4obmxoKSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSA/XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03MjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMzktXFx0ey5tc2d0eXBlID0gUlRNX0dFVExJTkssIC5kb2l0ID0gcnRubF9nZXRsaW5rLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyNDA6XFx0IC5kdW1waXQgPSBydG5sX2R1bXBfaWZpbmZvLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyNDEtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1NQTElUX05MTV9ET05FIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDI6MDYuOTExMTk2NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDUzODA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzbmlwcGV0cywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzcyBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGl0IG15c2VsZjpcblxuKipBbmFseXppbmcgUlRNX0dFVExJTksgYW5kIFJlbGF0ZWQgTmV0bGluayBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvLCBkaXZpbmcgaW50byB0aGlzIE5ldGxpbmsgc3R1ZmYsIEknbSBwcmV0dHkgc3VyZSBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgdGhvc2UgYFJUTV9HRVRMSU5LYCByZXF1ZXN0cy4gVGhhdCdzIG15IGZpcnN0IGdvLXRvLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHJldHJpZXZpbmcgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgIHNlZW1zIGZhbWlsaWFyIGluIHRoZSBjb250ZXh0IG9mIGBSVE1fTkVXTElOS2Agb3IgYFJUTV9ERUxMSU5LYCBldmVudHMuIEl0IG1ha2VzIHNlbnNlLCBhcyBhIGJ1aWxkZXIgZm9yIHRoZSBTS0IgdGhhdCB3b3VsZCBlbmNhcHN1bGF0ZSB0aGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAuIEknbGwgd2FudCB0byBjaGVjayBob3cgaXQgY3JhZnRzIHRob3NlIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgdGhlIGRhdGEgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcy4gSXQncyB0aGUgY2VudHJhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB1cGRhdGluZyBpbnRlcmZhY2Ugc3RhdGVzLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjEwLjcyNTczODUyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTE2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz00NTIyPXN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1Njk6c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3MC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2MTI9c3RhdGljIHZvaWQgcnRtc2dfaWZpbmZvX2V2ZW50KGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDYyMS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NjIyOlxcdHNrYiA9IHJ0bXNnX2lmaW5mb19idWlsZF9za2IodHlwZSwgZGV2LCBjaGFuZ2UsIGV2ZW50LCBmbGFncywgbmV3X25zaWQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDYyMy1cXHRcXHRcXHRcXHQgICAgIG5ld19pZmluZGV4LCBwb3J0aWQsIG5saCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjEwLjc2NzkzNzI1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ2MTYwMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbi4gSXQgbG9va3MgbGlrZSBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAgaXMgYSBwcm9taXNpbmcgZnVuY3Rpb24gdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBBIHF1aWNrIHJldmlldyBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3Q6IHRoZSBzeXN0ZW0gaW5kaWNhdGVzIGl0J3MgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGlzIGdvb2QgbmV3cy4gTXkgZm9jdXMgc3ltYm9scyBhcmUgc2V0IGFzOlxuXG4qICAgYHJ0bmxfZ2V0bGlua2BcbiogICBgcnRubF9kdW1wX2lmaW5mb2BcbiogICBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmBcbiogICBgaWZfbmxtc2dfc2l6ZWBcbiogICBgcnRubF9maWxsX2lmaW5mb2BcblxuSGFuZyBvbiBhIHNlY29uZC4uLiBgcnRubF9maWxsX2lmaW5mb2AgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtZWFuIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCBidXQgaXQncyBub3QgaW5saW5lZCwgYW5kIGl0IHNlZW1zIHRvIGJlIGEgZmFpcmx5IHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIG1hbmFnaW5nIHRvIGlubGluZSBpdCBvciBub3QuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFzc2VtYmx5IGxvb2tzIGxpa2UgdG8gZW5zdXJlIEkgaGF2ZSB0aGUgcHJvcGVyIHZpZXcgb2YgdGhlIGZ1bmN0aW9uLiBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoxNS4xMTQwOTk4NzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDA4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA4OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEwOS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTEwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTQ0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MjA6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjIxLVxcdFxcdFxcdFxcdCAgICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNzY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ4LVxcdGlmIChuc2tiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDk6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhuc2tiLCBkZXYsIG5ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzUwLVxcdFxcdFxcdFxcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTg4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODk6XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTAtXFx0XFx0XFx0ICAgICAgIHR5cGUsIHBvcnRpZCwgc2VxLCBjaGFuZ2UsIDAsIDAsIGV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoxNS4xNTgxMTc4MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1MTcxMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBydG5sX2ZpbGxfaWZpbmZvYCBpcyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBsb2NhdGlvbnMsIGFuZCBgaWZfbmxtc2dfc2l6ZWAgaXMgbWFya2VkIGBub2lubGluZWAuIFRoYXQgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBjbG9zZXIgZXhhbWluYXRpb24uIFRoZXkncmUgZ29vZCBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBgQ09ORklHX05FVERFVlNJTWAgbG9va3MgbGlrZSBhIGtleSBvbmUuIEkgc2F3IHJlZmVyZW5jZXMgdG8gYG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmVgIGFuZCBgbnNpbV9udW1fdmZgIHdoaWNoIGFyZSBzb2xpZCBpbmRpY2F0b3JzIGl0J3Mgc3VmZmljaWVudCBmb3IgdGVzdGluZyB2aXJ0dWFsIGZ1bmN0aW9ucy4gQmV5b25kIHRoYXQsIGBDT05GSUdfTkVUYCBpcyBwcmFjdGljYWxseSBhIGdpdmVuLiBBbmQgb2YgY291cnNlLCBgQ09ORklHX1BDSWAgaXMgZXNzZW50aWFsIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX1BDSV9JT1ZgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGBydG5sX3ZmaW5mb19jYXBgIGxvZ2ljOlxuXG5gYGBjXG5zdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbntcblx0cmV0dXJuIG1pbihudW1fdmZzLFxuXHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xufVxuYGBgXG5cblllcCwgc2ltcGxlIGxvZ2ljLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNtYWxsLCBidXQgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdyBpc3N1ZSB3aGVuIGRldmljZXMgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBWRnMg4oCTIG1vcmUgdGhhbiAxMjggb3IgMjU2LCBkZXBlbmRpbmcgb24gZmlsdGVyaW5nLiBJdCdzIGZ1bmN0aW9uYWwsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgc29saWQsIHByYWN0aWNhbCBjaGFuZ2UuXG5cblRoZXJlZm9yZSwgaGVyZSdzIG15IHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYHJ0bmxfZmlsbF9pZmluZm9gLCBgaWZfbmxtc2dfc2l6ZWAsIGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AsIGBydG1zZ19pZmluZm9fYnVpbGRfc2tiYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTkVUREVWU0lNYCwgYFBDSV9JT1ZgXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBtb2RpZmllcyBmdW5kYW1lbnRhbCBydG5ldGxpbmsgbG9naWMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBgSUZMQV9WRklORk9fTElTVGAgdG8gcHJldmVudCBuZXRsaW5rIG1lc3NhZ2Ugb3ZlcmZsb3cuIFRoaXMgZml4IGhhcyB0aGUgcG90ZW50aWFsIGZvciBhIHNtYWxsLCB5ZXQgc2lnbmlmaWNhbnQgbmV0bGluayBtZXNzYWdlIHNpemUgaXNzdWVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBkZXZpY2VzIHdpdGggVkZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zIHRvIHZlcmlmeSB0aGUgY2FwIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIFRoZSBjb25maWdzIGVuYWJsZSB1cyB0byB0ZXN0IHRoZSBkZXZpY2Ugd2l0aCBWRnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk2LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoyMy4zMDk4MzI0MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI1MzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9maWxsX2lmaW5mb1wiLFxuICAgIFwiaWZfbmxtc2dfc2l6ZVwiLFxuICAgIFwicnRubF9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2R1bXBfaWZpbmZvXCIsXG4gICAgXCJydG1zZ19pZmluZm9fYnVpbGRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 11:39:46 +0000 UTC FinishedAt: 2026-08-02 11:42:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "69963a0678a347d57c4ac8b16939dba216eb95ce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETDEVSIM", "PCI_IOV" ], "series_id": "c8271558-bca8-4a20-8fa0-cba86ec9d1fc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtnl_fill_ifinfo", "if_nlmsg_size", "rtnl_getlink", "rtnl_dump_ifinfo", "rtmsg_ifinfo_build_skb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtpZl9ubG1zZ19zaXplJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDssCiAgICAmIzM0O3J0bXNnX2lmaW5mb19idWlsZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGEwNzAwNzVjZjliOGFlODY0NjQ2MzRhY2VjYWJlYzlkOTJhMDkxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbmluZGV4IDY4YzI2YTcwYmI2NDkuLmI4MGMyYWMzYWMzMTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXG5AQCAtOTI4LDYgJiM0Mzs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiB2ZmluZm8tbGlzdFxuICAgICAgICAgdHlwZTogbmVzdFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzXG4mIzQzOyAgICAgICAgZG9jOiB8XG4mIzQzOyAgICAgICAgICBQZXItVkYgZGV0YWlscy4gVGhlIGxpc3QgaG9sZHMgYXQgbW9zdCAyNTYgVkZzLCBvciAxMjggd2hlblxuJiM0MzsgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdFxuJiM0MzsgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcbiYjNDM7ICAgICAgICAgIHRydW5jYXRlZCBsaXN0OyBudW0tdmYgc3RpbGwgY2FycmllcyB0aGUgcmVhbCBjb3VudC5cbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBzdGF0czY0XG4gICAgICAgICB0eXBlOiBiaW5hcnlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5pbmRleCAzMWM2NWE1NDVhMTA3Li44MWM1YTYxMDRkZWExIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jXG5AQCAtMTE3NCwxMiAmIzQzOzExNzQsMjcgQEAgc3RhdGljIHZvaWQgY29weV9ydG5sX2xpbmtfc3RhdHMoc3RydWN0IHJ0bmxfbGlua19zdGF0cyAqYSxcbiBcdGEtXHUwMDNlcnhfbm9oYW5kbGVyID0gYi1cdTAwM2VyeF9ub2hhbmRsZXI7XG4gfVxuIFxuJiM0MzsvKiBDYXAgdGhlIG51bWJlciBvZiBWRnMgdGhhdCBJRkxBX1ZGSU5GT19MSVNUIGRlc2NyaWJlcy4gVGhlIG5lc3QgaXMgb25lXG4mIzQzOyAqIG5ldGxpbmsgYXR0cmlidXRlLCBzbyBldmVyeXRoaW5nIGluc2lkZSBpdCBoYXMgdG8gZml0IGluIHRoZSB1MTYgbmxhX2xlbi5cbiYjNDM7ICogVGhlIGNhcCBpcyBhIGZpeGVkIG51bWJlciByYXRoZXIgdGhhbiB3aGF0ZXZlciBoYXBwZW5zIHRvIGZpdCwgc28gdGhhdCB0aGVcbiYjNDM7ICogbGltaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJmYWNlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSByZXF1ZXN0ZWRcbiYjNDM7ICogYXR0cmlidXRlIHNldCBhbmQgdGhlIGhvc3QmIzM5O3MgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gVGhlIGxhcmdlc3QgcGVyLVZGXG4mIzQzOyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxuJiM0MzsgKiBzdGF0aXN0aWNzLCBzbyBib3RoIHZhbHVlcyBrZWVwIHRoZSBuZXN0IHdlbGwgaW5zaWRlIFUxNl9NQVguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtaW4obnVtX3ZmcyxcbiYjNDM7XHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIEFsbCBWRiBpbmZvICovXG4gc3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcbiB7XG4gXHRpZiAoZGV2LVx1MDAzZWRldi5wYXJlbnQgXHUwMDI2XHUwMDI2IChleHRfZmlsdGVyX21hc2sgXHUwMDI2IFJURVhUX0ZJTFRFUl9WRikpIHtcbi1cdFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KTtcbiYjNDM7XHRcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgZXh0X2ZpbHRlcl9tYXNrKTtcbiBcdFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcbiBcdFx0c2l6ZSAmIzQzOz0gbnVtX3ZmcyAqXG4gXHRcdFx0KG5sYV90b3RhbF9zaXplKDApICYjNDM7XG5AQCAtMTcxNyw2ICYjNDM7MTczMiwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghdmZpbmZvKVxuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIFxuJiM0MztcdC8qIElGTEFfTlVNX1ZGIGFib3ZlIHN0YXlzIHRoZSBkZXZpY2UmIzM5O3MgVkYgY291bnQ7IHRoZSBsaXN0IGl0c2VsZiBpc1xuJiM0MztcdCAqIGNhcHBlZCBzbyB0aGF0IGl0cyBsZW5ndGggY2Fubm90IG92ZXJmbG93IG5sYV9sZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChudW1fdmZzLCBleHRfZmlsdGVyX21hc2spO1xuJiM0MztcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUREVWU0lNJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydG5sX2ZpbGxfaWZpbmZvJiMzNDssCiAgICAmIzM0O2lmX25sbXNnX3NpemUmIzM0OywKICAgICYjMzQ7cnRubF9nZXRsaW5rJiMzNDssCiAgICAmIzM0O3J0bmxfZHVtcF9pZmluZm8mIzM0OywKICAgICYjMzQ7cnRtc2dfaWZpbmZvX2J1aWxkX3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBydG5ldGxpbmsgbG9naWMgdG8gY2FwIHRoZSBudW1iZXIgb2YgVkZzIHJldHVybmVkIGluIElGTEFfVkZJTkZPX0xJU1QgdG8gcHJldmVudCBuZXRsaW5rIG1lc3NhZ2Ugb3ZlcmZsb3cuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjayB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBSVE1fR0VUTElOSyByZXF1ZXN0cy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgbWVzc2FnZSBzaXplIGNhbGN1bGF0aW9uIGFuZCBmaWxsaW5nIGZ1bmN0aW9ucy4gQ09ORklHX05FVERFVlNJTSBhbmQgQ09ORklHX1BDSV9JT1YgYXJlIG5lZWRlZCB0byB0ZXN0IGRldmljZXMgd2l0aCBWRnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0YTA3MDA3NWNmOWI4YWU4NjQ2NDYzNGFjZWNhYmVjOWQ5MmEwOTE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMiAxMTo0MToxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sCmluZGV4IDY4YzI2YTcwYmI2NDkuLmI4MGMyYWMzYWMzMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbApAQCAtOTI4LDYgJiM0Mzs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IHZmaW5mby1saXN0CiAgICAgICAgIHR5cGU6IG5lc3QKICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgUGVyLVZGIGRldGFpbHMuIFRoZSBsaXN0IGhvbGRzIGF0IG1vc3QgMjU2IFZGcywgb3IgMTI4IHdoZW4KJiM0MzsgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdAomIzQzOyAgICAgICAgICBpbiBhIHUxNiBsZW5ndGguIEEgZGV2aWNlIHdpdGggbW9yZSBWRnMgdGhhbiB0aGF0IHJlcG9ydHMgYQomIzQzOyAgICAgICAgICB0cnVuY2F0ZWQgbGlzdDsgbnVtLXZmIHN0aWxsIGNhcnJpZXMgdGhlIHJlYWwgY291bnQuCiAgICAgICAtCiAgICAgICAgIG5hbWU6IHN0YXRzNjQKICAgICAgICAgdHlwZTogYmluYXJ5CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTc0LDEyICYjNDM7MTE3NCwyNyBAQCBzdGF0aWMgdm9pZCBjb3B5X3J0bmxfbGlua19zdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzICphLAogCWEtJmd0O3J4X25vaGFuZGxlciA9IGItJmd0O3J4X25vaGFuZGxlcjsKIH0KIAomIzQzOy8qIENhcCB0aGUgbnVtYmVyIG9mIFZGcyB0aGF0IElGTEFfVkZJTkZPX0xJU1QgZGVzY3JpYmVzLiBUaGUgbmVzdCBpcyBvbmUKJiM0MzsgKiBuZXRsaW5rIGF0dHJpYnV0ZSwgc28gZXZlcnl0aGluZyBpbnNpZGUgaXQgaGFzIHRvIGZpdCBpbiB0aGUgdTE2IG5sYV9sZW4uCiYjNDM7ICogVGhlIGNhcCBpcyBhIGZpeGVkIG51bWJlciByYXRoZXIgdGhhbiB3aGF0ZXZlciBoYXBwZW5zIHRvIGZpdCwgc28gdGhhdCB0aGUKJiM0MzsgKiBsaW1pdCBpcyBhIHByb3BlcnR5IG9mIHRoZSBpbnRlcmZhY2UgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIHJlcXVlc3RlZAomIzQzOyAqIGF0dHJpYnV0ZSBzZXQgYW5kIHRoZSBob3N0JiMzOTtzIGFsaWdubWVudCByZXF1aXJlbWVudHMuIFRoZSBsYXJnZXN0IHBlci1WRgomIzQzOyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dAomIzQzOyAqIHN0YXRpc3RpY3MsIHNvIGJvdGggdmFsdWVzIGtlZXAgdGhlIG5lc3Qgd2VsbCBpbnNpZGUgVTE2X01BWC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiBtaW4obnVtX3ZmcywKJiM0MzsJCSAgIGV4dF9maWx0ZXJfbWFzayAmYW1wOyBSVEVYVF9GSUxURVJfU0tJUF9TVEFUUyA/IDI1NiA6IDEyOCk7CiYjNDM7fQomIzQzOwogLyogQWxsIFZGIGluZm8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKQogewogCWlmIChkZXYtJmd0O2Rldi5wYXJlbnQgJmFtcDsmYW1wOyAoZXh0X2ZpbHRlcl9tYXNrICZhbXA7IFJURVhUX0ZJTFRFUl9WRikpIHsKLQkJaW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi0mZ3Q7ZGV2LnBhcmVudCk7CiYjNDM7CQlpbnQgbnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChkZXZfbnVtX3ZmKGRldi0mZ3Q7ZGV2LnBhcmVudCksCiYjNDM7CQkJCQkgICAgICBleHRfZmlsdGVyX21hc2spOwogCQlzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApOwogCQlzaXplICYjNDM7PSBudW1fdmZzICoKIAkJCShubGFfdG90YWxfc2l6ZSgwKSAmIzQzOwpAQCAtMTcxNyw2ICYjNDM7MTczMiwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlpZiAoIXZmaW5mbykKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAomIzQzOwkvKiBJRkxBX05VTV9WRiBhYm92ZSBzdGF5cyB0aGUgZGV2aWNlJiMzOTtzIFZGIGNvdW50OyB0aGUgbGlzdCBpdHNlbGYgaXMKJiM0MzsJICogY2FwcGVkIHNvIHRoYXQgaXRzIGxlbmd0aCBjYW5ub3Qgb3ZlcmZsb3cgbmxhX2xlbi4KJiM0MzsJICovCiYjNDM7CW51bV92ZnMgPSBydG5sX3ZmaW5mb19jYXAobnVtX3ZmcywgZXh0X2ZpbHRlcl9tYXNrKTsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3ZmczsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHsKIAkJCW5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVE5MIFZGSU5GTyBMaXN0IENhcCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AgYW5kIGBEb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sYC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgcnRubF92ZmluZm9fY2FwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgZGVzaWduZWQgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzLCBzcGVjaWZpY2FsbHkgYnkgbGltaXRpbmcgdGhlIG51bWJlciBvZiBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkZzKSByZXR1cm5lZCB3aXRoaW4gdGhlIGBJRkxBX1ZGSU5GT19MSVNUYC4gVGhleSYjMzk7cmUgY2FwcGluZyB0aGUgc2l6ZSwgcHJvYmFibHkgYmVjYXVzZSBgbmxhX2xlbmAgaXMgYSBgdTE2YCBhbmQgY2FuIGJlIG92ZXJmbG93ZWQuCgpJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBpbXBhY3RlZDogYHJ0bmxfZmlsbF92ZmAsIGBydG5sX3ZmaW5mb19zaXplYCwgYW5kLCBvZiBjb3Vyc2UsIGBydG5sX3ZmaW5mb19jYXBgLiBSaWdodCwgc28gYHJ0bmxfZmlsbF92ZmAgaXMgY2FsbGVkIGJ5IGBydG5sX2ZpbGxfaWZpbmZvYCwgYW5kIGBydG5sX3ZmaW5mb19zaXplYCBmZWVkcyBpbnRvIGBpZl9ubG1zZ19zaXplYC4gVGhpcyBtZWFucyB0aGF0IGBydG5sX2ZpbGxfdmZgIGVzc2VudGlhbGx5IGZpbGxzIHRoZSBWRiBkYXRhIGFuZCBkZXRlcm1pbmVzIHRoZSBzaXplLiBNYWtlcyBzZW5zZS4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgbW9kaWZpY2F0aW9uIGluIHJ0bmV0bGluaywgc28gbXkgZ3V0IHRlbGxzIG1lIGl0JiMzOTtzIGZ1enotd29ydGh5LiBUaGVyZSYjMzk7cyBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZSBoZXJlLCBhcyBpdCYjMzk7cyBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHNlbnQgb3ZlciB0aGUgd2lyZS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBhcmVhcyB0byBmb2N1cyBvbiBmb3IgYSBmdXp6aW5nIGNhbXBhaWduLiBgcnRubF9maWxsX3ZmYCBpcyBgbm9pbmxpbmVfZm9yX3N0YWNrYCBhbmQgc3RhdGljIC0gdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBldGMuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aG9zZS4KClRpbWUgdG8gZXhhbWluZSBgcnRubF9maWxsX3ZmYCBpdHNlbGYgd2l0aGluIGBuZXQvY29yZS9ydG5ldGxpbmsuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgY2FwIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTE1NDM9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2Ni1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE1Njc6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2OC1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcxMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3MTQ6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzE1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDAtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fdmZzOyBpJiM0MzsmIzQzOykge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTc0MTpcdFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDItXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMTEwPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyMjUtXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMjI2Olx0aWYgKHJ0bmxfZmlsbF92Zihza2IsIGRldiwgZXh0X2ZpbHRlcl9tYXNrKSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyMjctXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhpbmtpbmcgcHJvY2VzcywgZGVsaXZlcmVkIGFzIHRob3VnaCBJJiMzOTttIHRoZSBvbmUgaGF2aW5nIHRoZSB0aG91Z2h0czoKCioqRm9jdXNpbmcgb24gTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBob25pbmcgaW4gb24gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGNvZGUuIGBydG5sX2ZpbGxfaWZpbmZvYCBmZWVscyBsaWtlIGEgc29saWQgZm9jYWwgcG9pbnQuIFRoYXQgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGVseSBjZW50cmFsIHRvIGhvdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGludGVyZmFjZSBkZXRhaWxzLCBhbmQgdGhlIHdheSBpdCBoYW5kbGVzIGRhdGEgc3RydWN0dXJlcy4gTm93LCBJJiMzOTttIHRyeWluZyB0byBleHBhbmQgbXkgcGVyc3BlY3RpdmUgYSBiaXQuIEkgd29uZGVyIGlmIGl0IHdvdWxkIGJlIHVzZWZ1bCB0byBleHBsb3JlIGBydG5sX3ZmaW5mb19zaXplYCBhcyB3ZWxsLCBhcyBJIGtub3cgdGhhdCBjb25jZXJucyB2aXJ0dWFsIGZ1bmN0aW9uIHNpemluZy4gVGhpcyBjb3VsZCBwcm92aWRlIGFub3RoZXIgcGVyc3BlY3RpdmUgdG8gbXkgaW5pdGlhbCBmb2N1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydG5sX3ZmaW5mb19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE4NT1zdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMTkxLS8qIEFsbCBWRiBpbmZvICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMTkyOnN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExOTMtXHRcdFx0XHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3Ny1cdFx0XHQgICAgICAgIFx1MDAyNiBSVEVYVF9GSUxURVJfVkYgPyA0IDogMCkgLyogSUZMQV9OVU1fVkYgKi9cbm5ldC9jb3JlL3J0bmV0bGluay5jOjEzNzg6XHQgICAgICAgJiM0MzsgcnRubF92ZmluZm9fc2l6ZShkZXYsIGV4dF9maWx0ZXJfbWFzaykgLyogSUZMQV9WRklORk9fTElTVCAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTM3OS1cdCAgICAgICAmIzQzOyBydG5sX3BvcnRfc2l6ZShkZXYsIGV4dF9maWx0ZXJfbWFzaykgLyogSUZMQV9WRl9QT1JUUyAmIzQzOyBJRkxBX1BPUlRfU0VMRiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IG5hdmlnYXRpbmcgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBgaWZfbmxtc2dfc2l6ZWAg4oCTIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmb2N1cyBvbiwgYXMgSSBrbm93LiBJdCYjMzk7cyB0aGUgYnVpbGRpbmcgYmxvY2ssIGVzc2VudGlhbGx5LiBJdCYjMzk7cyBnb2luZyB0byBiZSBlc3NlbnRpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNpemUgb2YgTmV0bGluayBtZXNzYWdlcyByZWxhdGVkIHRvIGludGVyZmFjZSBkYXRhLiBOb3csIHdoZXJlIGRvIEkgYWN0dWFsbHkgYmVnaW4gdG8gKmdldCogdGhhdCBkYXRhPyBJJiMzOTtkIGxvb2sgdG8gYHJ0bmxfZ2V0bGlua2AgYW5kIGBydG5sX2R1bXBfaWZpbmZvYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gYHJ0bmxfZ2V0bGlua2AgcHJvYmFibHkgZmV0Y2hlcyB0aGUgc3BlY2lmaWMgbGluayBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0LCBkZXBlbmRpbmcgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaG9zZSB0d28gYXJlIGRlZmluaXRlbHkgbXkgaW5pdGlhbCBhbmNob3JzIGluIHRoaXMgc3BhY2UuIEkgY2FuIHVzZSB0aG9zZSB0byBzdGFydCBxdWVyeWluZyBhbmQgbG9va2luZyBhdCB0aGUgc3RydWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmX25sbXNnX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0xMzIxPXN0YXRpYyBzaXplX3QgcnRubF9kZXZfcGFyZW50X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzM1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMzNjpzdGF0aWMgbm9pbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMzctXHRcdFx0XHQgICAgIHUzMiBleHRfZmlsdGVyX21hc2spXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDI3Nj1zdGF0aWMgaW50IHJ0bmxfZ2V0bGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ2LVx0ZXJyID0gLUVOT0JVRlM7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzQ3Olx0bnNrYiA9IG5sbXNnX25ld19sYXJnZShpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ4LVx0aWYgKG5za2IpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDM2NS1cdFx0XHR9XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0MzY2Olx0XHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzY3LVx0XHRcdFdBUk5fT05fT05DRSgxKTtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NDgyPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdTMyIHJ0bmxfY2FsY2l0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUxNC1cdFx0bWluX2lmaW5mb19kdW1wX3NpemUgPSBtYXgobWluX2lmaW5mb19kdW1wX3NpemUsXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTE1Olx0XHRcdFx0XHQgICBpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTE2LVx0fVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODA6XHRza2IgPSBubG1zZ19uZXcoaWZfbmxtc2dfc2l6ZShkZXYsIDApLCBmbGFncyk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTgxLVx0aWYgKHNrYiA9PSBOVUxMKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTItXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTkzOlx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gaWZfbmxtc2dfc2l6ZSgpICovXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTk0LVx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb3V0ZSBOZXRsaW5rIEludGVyZmFjZSBmb3IgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIGhlcmUmIzM5O3MgaG93IEkmIzM5O20gYXBwcm9hY2hpbmcgdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gICh3aGljaCBJIGtub3cgZ29lcyB0aHJvdWdoIGBydG5sX2NhbGNpdGApLCBhbmQgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgLiBUaGVzZSBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBob3cgaW50ZXJmYWNlIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCwgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBWaXJ0dWFsIEZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGNlbnRyYWwgdG8gdGhlIHJ0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCYjMzk7cyBhbHdheXMgZW5hYmxlZC4gU3RpbGwsIGl0IHJlbGF0ZXMgdG8gVkZzIHNwZWNpZmljYWxseSwgc28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2suCgpOb3csIGJlY2F1c2UgVkZzIGFyZSByZWxhdGVkIHRvIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uLCBJIHNob3VsZCBjb25zaWRlciByZWxldmFudCBjb25maWdzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDT05GSUdfUENJX0lPVmAuIEkgc2hvdWxkIGV4YW1pbmUgdGhhdCwgYW5kIHRoZW4gY2hlY2sgYGRldl9udW1fdmZgIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBpbmRpY2F0b3Igb2YgVkYgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X251bV92ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZpcnRpby92aXJ0aW8uYz00MDQ9c3RhdGljIHZvaWQgdmlydGlvX2Rldl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZClcbi0tXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00MzctXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYzo0Mzg6c3RhdGljIGludCB2aXJ0aW9fZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ0MS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcdHJldHVybiBkZXZfbnVtX3ZmKHZkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxuLS1cbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQ0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIHZpcnRpb19idXMgPSB7XG4tLVxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU0LVx0LnNodXRkb3duID0gdmlydGlvX2Rldl9zaHV0ZG93bixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcdC5udW1fdmYgPSB2aXJ0aW9fZGV2X251bV92ZixcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1Ni19O1xuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTE5Mj1zdGF0aWMgaW5saW5lIGludCBydG5sX3ZmaW5mb19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5NS1cdGlmIChkZXYtXHUwMDNlZGV2LnBhcmVudCBcdTAwMjZcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1ZGKSkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE5NjpcdFx0aW50IG51bV92ZnMgPSBydG5sX3ZmaW5mb19jYXAoZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMTk3LVx0XHRcdFx0XHQgICAgICBleHRfZmlsdGVyX21hc2spO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTEyNDE9c3RhdGljIHNpemVfdCBydG5sX3BvcnRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNTgtXHRcdHJldHVybiAwO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTI1OTpcdGlmIChkZXZfbnVtX3ZmKGRldi1cdTAwM2VkZXYucGFyZW50KSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNjAtXHRcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSAmIzQzOyB2Zl9wb3J0c19zaXplICYjNDM7XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMjYxOlx0XHRcdHZmX3BvcnRfc2l6ZSAqIGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTI2Mi1cdGVsc2Vcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDExPXN0YXRpYyBpbnQgcnRubF92Zl9wb3J0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQyMS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE0MjI6XHRmb3IgKHZmID0gMDsgdmYgXHUwMDNjIGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpOyB2ZiYjNDM7JiM0MzspIHtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MjMtXHRcdHZmX3BvcnQgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX1ZGX1BPUlQpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTE0Njc9c3RhdGljIGludCBydG5sX3BvcnRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0NzktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNDgwOlx0aWYgKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpKSB7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNDgxLVx0XHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTE3MTQ9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayBpbnQgcnRubF9maWxsX3ZmKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcyMy1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3MjQ6XHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzI1LVx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTkyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6CgoqKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBkZXZfbnVtX3ZmYC4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgZ29pbmcgdG8gYmUgaW4gb25lIG9mIHRoZSBjb3JlIGtlcm5lbCBoZWFkZXIgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgbWFuYWdlbWVudC4gQmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyB0eXBlIG9mIHRoaW5nLCBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAgaXMgYSBzdHJvbmcgY2FuZGlkYXRlLiBUaGlzIGZpbGUgaG91c2VzIGNvcmUgZGV2aWNlIG1vZGVsIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zLCBzbyBpdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhIGZpZWxkIHRoYXQgcmVsYXRlcyB0byB2aXJ0dWFsIGZ1bmN0aW9ucyB3aXRoaW4gYSBkZXZpY2Ugc3RydWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgdGhlcmUgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9udW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRGV2aWNlIFN0cnVjdHVyZSoqCgpPa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGV2aWNlIG1vZGVsIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNvcmUgc3RydWN0dXJlLCBgc3RydWN0IGRldmljZWAsIGFuZCB0aGUgc3Vycm91bmRpbmcgZGVmaW5pdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwganVtcCBpbnRvIGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCBhcm91bmQgbGluZSAxMjgwLiBJIGtub3cgdGhpcyBmaWxlIGlzIG1hc3NpdmUsIGJ1dCBsaW5lIDEyODAgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCB0byBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuIEkmIzM5O20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBJJiMzOTtsbCBmaW5kIGtleSBtZW1iZXJzIHJlbGF0ZWQgdG8gdGhlaXIgbGlmZWN5Y2xlLCBhdHRyaWJ1dGVzLCBhbmQgcmVsYXRpb25zaGlwcyB3aXRoIGRyaXZlcnMgYW5kIGJ1c2VzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIG9yZ2FuaXplcyB0aGVzZSBkZXZpY2Ugb2JqZWN0cy4gSSBhbnRpY2lwYXRlIGhhdmluZyB0byB0cmFjZSB0aHJvdWdoIGEgZmV3IHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBtYWNyb3MgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbmNlcHRzIGhlcmUsIGJ1dCB0aGlzIHNob3VsZCBiZSBhIHNvbGlkIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kZXZpY2UuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIWRldilcbjEyNzY6XHRcdFx0cmV0dXJuIE5VTEw7XG4xMjc3Olx0XHRyZXR1cm4gZGV2LVx1MDAzZW9mX25vZGU7XG4xMjc4Olx0fVxuMTI3OTpcdFxuMTI4MDpcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuMTI4MTpcdHtcbjEyODI6XHRcdGlmIChkZXYtXHUwMDNlYnVzIFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNlYnVzLVx1MDAzZW51bV92ZilcbjEyODM6XHRcdFx0cmV0dXJuIGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldik7XG4xMjg0Olx0XHRyZXR1cm4gMDtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0LypcbjEyODg6XHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcbjEyODk6XHQgKi9cbjEyOTA6XHRzdHJ1Y3QgZGV2aWNlICpfX3Jvb3RfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBtb2R1bGUgKm93bmVyKTtcbjEyOTE6XHRcbjEyOTI6XHQvKiBUaGlzIGlzIGEgbWFjcm8gdG8gYXZvaWQgaW5jbHVkZSBwcm9ibGVtcyB3aXRoIFRISVNfTU9EVUxFICovXG4xMjkzOlx0I2RlZmluZSByb290X2RldmljZV9yZWdpc3RlcihuYW1lKSBcXFxuMTI5NDpcdFx0X19yb290X2RldmljZV9yZWdpc3RlcihuYW1lLCBUSElTX01PRFVMRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFZpcnR1YWwgRnVuY3Rpb25zIEFjcm9zcyBEaWZmZXJlbnQgQnVzZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHdlIGhhbmRsZSBWaXJ0dWFsIEZ1bmN0aW9ucyAoYFZGYCkgYWNyb3NzIGRpZmZlcmVudCBkZXZpY2UgZHJpdmVycy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgdGhhdCBgZGV2X251bV92ZmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIFZGcyBhIGRldmljZSBzdXBwb3J0cy4gSXQmIzM5O3MgY2FsbGluZyBgZGV2LSZndDtidXMtJmd0O251bV92ZihkZXYpYCwgd2hpY2ggdGVsbHMgbWUgdGhlIHNwZWNpZmljIGJ1cyB0eXBlIGlzIGNydWNpYWwuIEZvciBQQ0kgZGV2aWNlcywgbXkgZ3Vlc3MgaXMgdGhhdCB0aGlzIGlzIGhhbmRsZWQgYnkgYHBjaV9udW1fdmZgLiBCdXQgdGhlbiBJIGhhdmUgdG8gdGhpbmssIGFyZSB3ZSAqb25seSogZGVhbGluZyB3aXRoIFBDSSBoZXJlPwoKSG9sZCBvbi4gSXNuJiMzOTt0IGB2aXJ0aW9fYnVzYCBhbHNvIGNhcGFibGUgb2YgVkZzPyBSaWdodCwgdGhlcmUmIzM5O3MgYHZpcnRpb19kZXZfbnVtX3ZmYC4gU28gdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIGBDT05GSUdfUENJX0lPVmAgc29sZWx5IGZvciBlbmFibGluZyBQQ0kgVkZzLCBvciBkb2VzIHRoZSB2aXJ0aW8gaW1wbGVtZW50YXRpb24gaGF2ZSBpdHMgb3duIGRpc3RpbmN0IG5lZWRzPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgYnkgY29uZmlybWluZyBob3cgYHBjaV9udW1fdmZgIGlzIGltcGxlbWVudGVkLiBUaGF0IHNob3VsZCBzaGVkIHNvbWUgbGlnaHQgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmM9NDY9c3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KVxuLS1cbmRyaXZlcnMvcGNpL2hvdHBsdWcvczM5MF9wY2lfaHBjLmMtNTktXHRwZGV2ID0gcGNpX2dldF9zbG90KHpkZXYtXHUwMDNlemJ1cy1cdTAwM2VidXMsIHpkZXYtXHUwMDNlZGV2Zm4pO1xuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcdGlmIChwZGV2IFx1MDAyNlx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTYxLVx0XHRyYyA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL3BjaS9pZGUuYz0yMzk9c3RydWN0IHBjaV9pZGUgKnBjaV9pZGVfc3RyZWFtX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL2lkZS5jLTI0Ny1cdHN0cnVjdCBwY2lfZGV2ICpycCwgKmJyO1xuZHJpdmVycy9wY2kvaWRlLmM6MjQ4Olx0aW50IG51bV92ZiwgcmlkX2VuZDtcbmRyaXZlcnMvcGNpL2lkZS5jLTI0OS1cbi0tXG5kcml2ZXJzL3BjaS9pZGUuYy0yODAtXHQvKiBmb3IgU1ItSU9WIGNhc2UsIGNvdmVyIGFsbCBWRnMgKi9cbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcdG51bV92ZiA9IHBjaV9udW1fdmYocGRldik7XG5kcml2ZXJzL3BjaS9pZGUuYzoyODI6XHRpZiAobnVtX3ZmKVxuZHJpdmVycy9wY2kvaWRlLmM6MjgzOlx0XHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4NDpcdFx0XHRcdCAgICBwY2lfaW92X3ZpcnRmbl9kZXZmbihwZGV2LCBudW1fdmYgLSAxKSk7XG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXHRlbHNlXG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy00NDUtXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jOjQ0NjpcdHUxNiBudW1fdmZzO1xuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ0OS1cdGRldmljZV9sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcdG51bV92ZnMgPSBwZGV2LVx1MDAzZXNyaW92LVx1MDAzZW51bV9WRnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NTEtXHRkZXZpY2VfdW5sb2NrKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Mi1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIG51bV92ZnMpO1xuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy00NTYtLypcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFx1MDAzZSAwOyBudW1iZXIgb2YgVkZzIHRvIGVuYWJsZVxuZHJpdmVycy9wY2kvaW92LmM6NDU4OiAqIG51bV92ZnMgPSAwOyBkaXNhYmxlIGFsbCBWRnNcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTQ2Mz1zdGF0aWMgc3NpemVfdCBzcmlvdl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ2OC1cdGludCByZXQgPSAwO1xuZHJpdmVycy9wY2kvaW92LmM6NDY5Olx0dTE2IG51bV92ZnM7XG5kcml2ZXJzL3BjaS9pb3YuYy00NzAtXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XHRpZiAoa3N0cnRvdTE2KGJ1ZiwgMCwgXHUwMDI2bnVtX3ZmcykgXHUwMDNjIDApXG5kcml2ZXJzL3BjaS9pb3YuYy00NzItXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9wY2kvaW92LmMtNDczLVxuZHJpdmVycy9wY2kvaW92LmM6NDc0Olx0aWYgKG51bV92ZnMgXHUwMDNlIHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldikpXG5kcml2ZXJzL3BjaS9pb3YuYy00NzUtXHRcdHJldHVybiAtRVJBTkdFO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ3OTpcdGlmIChudW1fdmZzID09IHBkZXYtXHUwMDNlc3Jpb3YtXHUwMDNlbnVtX1ZGcylcbmRyaXZlcnMvcGNpL2lvdi5jLTQ4MC1cdFx0Z290byBleGl0O1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cbmRyaXZlcnMvcGNpL2lvdi5jOjQ5NjpcdGlmIChudW1fdmZzID09IDApIHtcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cdFx0LyogZGlzYWJsZSBWRnMgKi9cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy01MDYtXHRcdHBjaV93YXJuKHBkZXYsIFwmIzM0OyVkIFZGcyBhbHJlYWR5IGVuYWJsZWQuIERpc2FibGUgYmVmb3JlIGVuYWJsaW5nICVkIFZGc1xcblwmIzM0OyxcbmRyaXZlcnMvcGNpL2lvdi5jOjUwNzpcdFx0XHQgcGRldi1cdTAwM2Vzcmlvdi1cdTAwM2VudW1fVkZzLCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTUwOC1cdFx0cmV0ID0gLUVCVVNZO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cdHBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcbmRyaXZlcnMvcGNpL2lvdi5jOjUxMzpcdHJldCA9IHBkZXYtXHUwMDNlZHJpdmVyLVx1MDAzZXNyaW92X2NvbmZpZ3VyZShwZGV2LCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cdHBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjUxODpcdGlmIChyZXQgIT0gbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cdFx0cGNpX3dhcm4ocGRldiwgXCYjMzQ7JWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxuXCYjMzQ7LFxuZHJpdmVycy9wY2kvaW92LmM6NTIwOlx0XHRcdCBudW1fdmZzLCByZXQpO1xuZHJpdmVycy9wY2kvaW92LmMtNTIxLVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTYxMz1jb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNyaW92X3BmX2Rldl9hdHRyX2dyb3VwID0ge1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjYxODppbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTYxOS17XG4tLVxuZHJpdmVycy9wY2kvaW92LmM9NjIzPWludCBfX3dlYWsgcGNpYmlvc19zcmlvdl9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cbmRyaXZlcnMvcGNpL2lvdi5jOjYyODpzdGF0aWMgaW50IHNyaW92X2FkZF92ZnMoc3RydWN0IHBjaV9kZXYgKmRldiwgdTE2IG51bV92ZnMpXG5kcml2ZXJzL3BjaS9pb3YuYy02Mjkte1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTYzNS1cbmRyaXZlcnMvcGNpL2lvdi5jOjYzNjpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV92ZnM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXHRcdHJjID0gcGNpX2lvdl9hZGRfdmlydGZuKGRldiwgaSk7XG4tLVxuZHJpdmVycy9wY2kvaW92LmM9MTE5MD1FWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9zcmlvdik7XG4tLVxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTM6ICogcGNpX251bV92ZiAtIHJldHVybiBudW1iZXIgb2YgVkZzIGFzc29jaWF0ZWQgd2l0aCBhIFBGIGRldmljZV9yZWxlYXNlX2RyaXZlclxuZHJpdmVycy9wY2kvaW92LmMtMTE5NC0gKiBAZGV2OiB0aGUgUENJIGRldmljZVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTExOTctICovXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTk4OmludCBwY2lfbnVtX3ZmKHN0cnVjdCBwY2lfZGV2ICpkZXYpXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMjA0LX1cbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XG5kcml2ZXJzL3BjaS9pb3YuYy0xMjA2LVxuLS1cbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xuLS1cbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjAtLyoqXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjItICogQGRldjogdGhlIFBDSSBkZXZpY2VcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNjMtICogQHJlc25vOiB0aGUgcmVzb3VyY2UgbnVtYmVyXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzY1LSAqXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY2OiAqIEdldCB0aGUgc2l6ZXMgb2YgYSBWRiByZXNpemFibGUgQkFSIHRoYXQgY2FuIGFjY29tbW9kYXRlIEBudW1fdmZzIHdpdGhpblxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzcxLSAqL1xuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzczLXtcbi0tXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxuZHJpdmVycy9wY2kvaW92LmM6MTM3NzpcdGlmICghbnVtX3ZmcylcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXHRcdHJldHVybiAwO1xuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cbmRyaXZlcnMvcGNpL2lvdi5jOjEzODA6XHRkb19kaXYodmZfbGVuLCBudW1fdmZzKTtcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXHRzaXplcyA9IChyb3VuZHVwX3Bvd19vZl90d28odmZfbGVuICYjNDM7IDEpIC0gMSkgXHUwMDNlXHUwMDNlIGlsb2cyKFNaXzFNKTtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM9MTYyNT12b2lkIHBjaV91ZXZlbnRfZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHBjaV9lcnNfcmVzdWx0IGVycl90eXBlKVxuLS1cbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjE2NTY6c3RhdGljIGludCBwY2lfYnVzX251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTY1Ny17XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcdHJldHVybiBwY2lfbnVtX3ZmKHRvX3BjaV9kZXYoZGV2KSk7XG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTY1OS19XG4tLVxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE3MjY9Y29uc3Qgc3RydWN0IGJ1c190eXBlIHBjaV9idXNfdHlwZSA9IHtcbi0tXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cdC5wbVx0XHQ9IFBDSV9QTV9PUFNfUFRSLFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jOjE3Mzk6XHQubnVtX3ZmXHRcdD0gcGNpX2J1c19udW1fdmYsXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTc0MC1cdC5kbWFfY29uZmlndXJlXHQ9IHBjaV9kbWFfY29uZmlndXJlLFxuLS1cbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcbi0tXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNjk2LVx0ZGV2aWNlX2xvY2soZGV2KTtcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jOjE2OTc6XHRpZiAoZGV2LVx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYy0xNjk4LVx0XHRyZXQgPSAtRUJVU1k7XG4tLVxuZHJpdmVycy9wY2kvdHNtLmM9Nzk9c3RhdGljIHZvaWQgcGNpX3RzbV93YWxrX2ZucyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL3BjaS90c20uYy05NS1cdFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXG5kcml2ZXJzL3BjaS90c20uYzo5NjpcdFx0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIHBjaV9udW1fdmYocGYpOyBqJiM0MzsmIzQzOykge1xuZHJpdmVycy9wY2kvdHNtLmMtOTctXHRcdFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxuLS1cbmRyaXZlcnMvcGNpL3RzbS5jPTExOD1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zX3JldmVyc2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9wY2kvdHNtLmMtMTM1LVx0XHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cbmRyaXZlcnMvcGNpL3RzbS5jOjEzNjpcdFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcdTAwM2U9IDA7IGotLSkge1xuZHJpdmVycy9wY2kvdHNtLmMtMTM3LVx0XHRcdHN0cnVjdCBwY2lfZGV2ICp2ZiBfX2ZyZWUocGNpX2Rldl9wdXQpID1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGNpX251bV92ZmAgVmFyaWFibGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgcGNpX251bV92ZmAgdmFyaWFibGUgaXMgZGVmaW5lZC4gVGhlIGhpbnQgcG9pbnRzIHRvIGBkcml2ZXJzL3BjaS9pb3YuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoYXQgaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gSS9PIFZpcnR1YWxpemF0aW9uLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIEkgd2FudCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QQ0lfSU9WYCBpcyBldmVuIGVuYWJsZWQuIFRoYXQgd291bGQgYmUgdGhlIGZpcnN0IHBvaW50IHRvIGNoZWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb24gc3Vycm91bmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeW1ib2wuCgpUbyBkbyB0aGF0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZS4gTXkgZ28tdG8gbG9jYXRpb24gaXMgYWx3YXlzIGBpbmNsdWRlL2xpbnV4L3BjaS5oYC4gVGltZSB0byBzZWUgaWYgaXQmIzM5O3MgdGhlcmUgYW5kIHdoYXQmIzM5O3MgY29ubmVjdGVkIHRvIGl0LiBJIHdhbnQgdG8gc2VlIGhvdyBgcGNpX251bV92ZmAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyByZWxhdGVkIHRvIGBDT05GSUdfUENJX0lPVmAgb3IgYW55dGhpbmcgZWxzZSBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfbnVtX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wY2kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njg9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcbmluY2x1ZGUvbGludXgvcGNpLmg6MjU2OTppbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbmluY2x1ZGUvbGludXgvcGNpLmgtMjU3MC1pbnQgcGNpX3Zmc19hc3NpZ25lZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS5oPTI2MTk9c3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2kuaDoyNjIwOnN0YXRpYyBpbmxpbmUgaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIxLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4ODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVkYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gaWYgYENPTkZJR19QQ0lfSU9WYCBpc24mIzM5O3QgZW5hYmxlZCwgYHBjaV9udW1fdmZgIHdpbGwgcmV0dXJuIHplcm8sIGFzIGV4cGVjdGVkLiBCdXQgYGRldl9udW1fdmZgIGlzIHRoZSBnZW5lcmljIG9uZSwgcmlnaHQ/IEl0IGNhbGxzIHRoZSBgbnVtX3ZmYCBmdW5jdGlvbiBmcm9tIHRoZSBkZXZpY2UmIzM5O3MgYnVzLiBJbiB0aGUgUENJIGNhc2UsIHRoYXQmIzM5O3MgYHBjaV9idXNfbnVtX3ZmYCwgd2hpY2ggdWx0aW1hdGVseSBjYWxscyBgcGNpX251bV92ZmAuIFNvLCBiYWNrIHRvIHRoZSBzdGFydGluZyBwb2ludDogbm8gYENPTkZJR19QQ0lfSU9WYCwgbm8gVkZzIGZvciBQQ0kgZGV2aWNlcywgYW5kIGBkZXZfbnVtX3ZmYCByZXR1cm5zIHplcm8uIFRoYXQgbWVhbnMgYHJ0bmxfdmZpbmZvX2NhcGAgd2lsbCByZXR1cm4gemVybywgYW5kIGBydG5sX2ZpbGxfdmZgIHdvbiYjMzk7dCBkbyBhbnl0aGluZy4gRXNzZW50aWFsbHksIHdlICpuZWVkKiBgQ09ORklHX1BDSV9JT1ZgIHRvIGJlIGVuYWJsZWQgdG8gaGF2ZSBhbnkgVmlydHVhbCBGdW5jdGlvbnMuCgpCdXQgd2FpdCwgd2hhdCBhYm91dCBWaXJ0SU8/IExldCBtZSBjb25zaWRlciBgdmlydGlvX2Rldl9udW1fdmZgLiBJdCBjYWxscyBgZGV2X251bV92ZmAgb24gdGhlIHBhcmVudCBkZXZpY2UuIElmIHRoZSBwYXJlbnQgZGV2aWNlIGlzIGEgUENJIGRldmljZS4uLiB0aGVuIHdlJiMzOTtyZSBiYWNrIGluIHRoZSBQQ0kgY29udGV4dCwgYW5kIGl0IGNhbGxzIGBwY2lfbnVtX3ZmYC4gU28gZXZlbiB0aHJvdWdoIFZpcnRJTywgYENPTkZJR19QQ0lfSU9WYCBpcyB0aGUga2V5LiBJdCByZWFsbHkgaXMgdGhlIHByaW1hcnkgY29uZmlnIGZvciB0aGUgd2hvbGUgVkYgZWNvc3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIG9uZS4gYENPTkZJR19QQ0lfSU9WYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIGZvciB0ZXN0aW5nIFZGcy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGRyaXZlcnMgdGhhdCBzdXBwb3J0IFNSLUlPViBhbmQgYXJlIHN1cHBvcnRlZCBpbiBRRU1VIHRoYXQgSSBjYW4gdGVzdD8gSSBrbm93IFFFTVUgc3VwcG9ydHMgYGlnYmAsIGBlMTAwMGVgLCBhbmQgYG52bWVgLiBSaWdodCwgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBTbywgZG8gSSBuZWVkIGBDT05GSUdfSUdCYD8gU3l6a2FsbGVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGBuZXRkZXZzaW1gLCBgdmV0aGAsIGFuZCBgZHVtbXlgLiBEb2VzIGFueSBvZiB0aGVtIHN1cHBvcnQgVkZzPyBMZXQgbWUgY2hlY2sgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYG5ldGRldnNpbWAgc3VwcG9ydHMgVkZzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzcmlvdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjYxOlx0X19BVFRSKHNyaW92X251bXZmcywgMDY2NCwgbnNpbV9idXNfZGV2X251bXZmc19zaG93LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVx0ICAgICAgIG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjg3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqU1ItSU9WIG9uIE5ldGRldnNpbTogRGlnZ2luZyBJbioqCgpSaWdodCwgc28gYG5ldGRldnNpbWAgaGFzIHRoYXQgYHNyaW92X251bXZmc2AgcGFyYW1ldGVyLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8ganVtcCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBzaW11bGF0ZWQgYnVzIGFuZCBkZXZpY2UgaW50ZXJhY3Rpb24sIGluY2x1ZGluZyBTUi1JT1YgbWFuYWdlbWVudCwgdG8gcmVzaWRlLiBJIGJldCBJJiMzOTtsbCBmaW5kIHRoZSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIFZGIGNyZWF0aW9uL2RlbGV0aW9uIGZ1bmN0aW9ucywgYW5kIGhvdyB0aGUgUEYgaGFuZGxlcyBpdHMgVkZzLiBJdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgaG93IHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQgaGFuZGxlcyBTUi1JT1YsIGFzIG9wcG9zZWQgdG8gYSByZWFsIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgbm90IGJlIGEgZnVsbCwgb25lLXRvLW9uZSBtYXBwaW5nIHdpdGggaGFyZHdhcmUgU1ItSU9WLCBidXQgSSYjMzk7bSBlYWdlciB0byBmaW5kIG91dC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgdG8gc2VlIHdoYXQgaG9va3MgdGhleSB1c2UgYW5kIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBvZiBob3cgaXQmIzM5O3MgaW1wbGVtZW50ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudW1fdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz0zMT1uc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM0LVx0c3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2ID0gdG9fbnNpbV9idXNfZGV2KGRldik7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6MzU6XHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNi1cdGludCByZXQ7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzctXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6Mzg6XHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2bnVtX3Zmcyk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtMzktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00NC1cdGlmIChkZXZfZ2V0X2RydmRhdGEoZGV2KSlcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0NTpcdFx0cmV0ID0gbnNpbV9kcnZfY29uZmlndXJlX3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ2LVx0ZGV2aWNlX3VubG9jayhkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz01Mj1uc2ltX2J1c19kZXZfbnVtdmZzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01Ni1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo1NzpcdHJldHVybiBzcHJpbnRmKGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01OC19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQyMz1zdGF0aWMgdm9pZCBuc2ltX2J1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MjktXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDMwOnN0YXRpYyBpbnQgbnNpbV9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMS17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQzMy1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo0MzQ6XHRyZXR1cm4gbnNpbV9idXNfZGV2LVx1MDAzZW51bV92ZnM7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDM1LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NDM3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbnNpbV9idXMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0Mi1cdC5yZW1vdmVcdFx0PSBuc2ltX2J1c19yZW1vdmUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDQzOlx0Lm51bV92Zlx0XHQ9IG5zaW1fbnVtX3ZmLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0NC19O1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02MD11bnNpZ25lZCBpbnQgbnNpbV9kZXZfZ2V0X3ZmcyhzdHJ1Y3QgbnNpbV9kZXYgKm5zaW1fZGV2KVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NC1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2NTpcdHJldHVybiBuc2ltX2Rldi1cdTAwM2Vuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02Ni19XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTY4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6Njk6bnNpbV9idXNfZGV2X3NldF92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MC17XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtNzEtXHRydG5sX2xvY2soKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo3MjpcdG5zaW1fYnVzX2Rldi1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03My1cdHJ0bmxfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4NjE9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NjI6XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg2My17XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NjgtXHRkZXZsX2xvY2soZGV2bGluayk7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2OTpcdGlmIChuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcyA9PSBudW1fdmZzKVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzAtXHRcdGdvdG8gZXhpdF91bmxvY2s7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3MTpcdGlmIChuc2ltX2J1c19kZXYtXHUwMDNlbnVtX3ZmcyBcdTAwMjZcdTAwMjYgbnVtX3Zmcykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzItXHRcdHJldCA9IC1FQlVTWTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3NC1cdH1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODc1Olx0aWYgKG5zaW1fYnVzX2Rldi1cdTAwM2VtYXhfdmZzIFx1MDAzYyBudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Ni1cdFx0cmV0ID0gLUVOT01FTTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3OS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODgwOlx0bnNpbV9idXNfZGV2X3NldF92ZnMobnNpbV9idXNfZGV2LCBudW1fdmZzKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODgxLVx0aWYgKG5zaW1fZXN3X21vZGVfaXNfc3dpdGNoZGV2KG5zaW1fZGV2KSkge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODI6XHRcdGlmIChudW1fdmZzKSB7XG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4My1cdFx0XHRyZXQgPSBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKG5zaW1fZGV2LCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9Mzk5PWludCBuc2ltX2Rydl9jb25maWd1cmVfdmZzKHN0cnVjdCBuc2ltX2J1c19kZXYgKm5zaW1fYnVzX2RldixcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MDA6XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQwMS1cbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODMtXHR1bnNpZ25lZCBpbnQgbWF4X3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0ODQ6XHR1bnNpZ25lZCBpbnQgbnVtX3ZmcztcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODUtXHRib29sIGluaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODY1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBTdXBwb3J0KioKCk9rYXksIHNvIGBuZXRkZXZzaW1gIHN1cHBvcnRzIFZpcnR1YWwgRnVuY3Rpb25zISBUaGF0JiMzOTtzIGV4Y2VsbGVudCBuZXdzLiBUaGUgcHJlc2VuY2Ugb2YgYG5zaW1fbnVtX3ZmYCByZWdpc3RlcmVkIHdpdGhpbiBgbnNpbV9idXNgIGNvbmZpcm1zIGl0LiBUaGlzIG1lYW5zIEkgc2hvdWxkIGJlIGFibGUgdG8gcmVseSBvbiBgZGV2X251bV92ZmAgZm9yIG15IGBuZXRkZXZzaW1gIGRldmljZXMsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHRlc3RpbmcgcHJvY2VzcyBjb25zaWRlcmFibHkuIExldmVyYWdpbmcgYG5ldGRldnNpbWAgaXMgYSBjbGVhciB3aW4gaGVyZSwgc28gYENPTkZJR19ORVRERVZTSU1gIGlzIGRlZmluaXRlbHkgYSBrZXkgY29uZmlndXJhdGlvbiB0byBmb2N1cyBvbi4KCkxldCBtZSBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIGBDT05GSUdfUENJX0lPVmAgd291bGRuJiMzOTt0IGh1cnQgZWl0aGVyLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwganVzdCBpbiBjYXNlLgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBUaGF0IGBydG5sX3ZmaW5mb19jYXBgIGZ1bmN0aW9uIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIHNpbXBsZSBjYXAuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGBydG5sX3ZmaW5mb19zaXplYCBhbmQgYHJ0bmxfZmlsbF92ZmAuIFdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBgcnRubF9maWxsX2lmaW5mb2AgYW5kIGBpZl9ubG1zZ19zaXplYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBIYW5nIG9uLCBpc24mIzM5O3QgYHJ0bmxfZmlsbF9pZmluZm9gIHN0YXRpYz8gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0uIENhbiBJIHN0aWxsIGFjY2VzcyB0aGUgVkYgaW5mb3JtYXRpb24gdGhyb3VnaCBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IGxhc3Qgb25lLCBgcnRubF9kdW1wX2lmaW5mb2AsIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZHVtcF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yNTAwPXN0YXRpYyBpbnQgcnRubF92YWxpZF9kdW1wX2lmaW5mb19yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjU0My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjI1NDQ6c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDUte1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ0ODI9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB1MzIgcnRubF9jYWxjaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NDkxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDQ5MjpcdC8qIFNhbWUga2VybmVsXHUwMDNjLVx1MDAzZXVzZXJzcGFjZSBpbnRlcmZhY2UgaGFjayBhcyBpbiBydG5sX2R1bXBfaWZpbmZvLiAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5My1cdGhkcmxlbiA9IG5sbXNnX2xlbihubGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgP1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTcyMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHJ0bmV0bGlua19ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMzktXHR7Lm1zZ3R5cGUgPSBSVE1fR0VUTElOSywgLmRvaXQgPSBydG5sX2dldGxpbmssXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo3MjQwOlx0IC5kdW1waXQgPSBydG5sX2R1bXBfaWZpbmZvLFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNzI0MS1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRFVNUF9TUExJVF9OTE1fRE9ORSB8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTIyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgaXQgbXlzZWxmOgoKKipBbmFseXppbmcgUlRNX0dFVExJTksgYW5kIFJlbGF0ZWQgTmV0bGluayBPcGVyYXRpb25zKioKClJpZ2h0LCBzbywgZGl2aW5nIGludG8gdGhpcyBOZXRsaW5rIHN0dWZmLCBJJiMzOTttIHByZXR0eSBzdXJlIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2AgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciBoYW5kbGluZyB0aG9zZSBgUlRNX0dFVExJTktgIHJlcXVlc3RzLiBUaGF0JiMzOTtzIG15IGZpcnN0IGdvLXRvLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHJldHJpZXZpbmcgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgIHNlZW1zIGZhbWlsaWFyIGluIHRoZSBjb250ZXh0IG9mIGBSVE1fTkVXTElOS2Agb3IgYFJUTV9ERUxMSU5LYCBldmVudHMuIEl0IG1ha2VzIHNlbnNlLCBhcyBhIGJ1aWxkZXIgZm9yIHRoZSBTS0IgdGhhdCB3b3VsZCBlbmNhcHN1bGF0ZSB0aGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgd29ya2luZ3Mgb2YgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGhvdyBpdCBjcmFmdHMgdGhvc2UgbWVzc2FnZXMsIHBhcnRpY3VsYXJseSB0aGUgZGF0YSBmaWVsZHMgaXQgaW5jbHVkZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB1cGRhdGluZyBpbnRlcmZhY2Ugc3RhdGVzLCBzbyBpdCYjMzk7cyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRtc2dfaWZpbmZvX2J1aWxkX3NrYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3J0bmV0bGluay5jPTQ1MjI9c3RhdGljIGludCBydG5sX2R1bXBfYWxsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDU2OTpzdHJ1Y3Qgc2tfYnVmZiAqcnRtc2dfaWZpbmZvX2J1aWxkX3NrYihpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1NzAtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NjEyPXN0YXRpYyB2b2lkIHJ0bXNnX2lmaW5mb19ldmVudChpbnQgdHlwZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjIxLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDYyMjpcdHNrYiA9IHJ0bXNnX2lmaW5mb19idWlsZF9za2IodHlwZSwgZGV2LCBjaGFuZ2UsIGV2ZW50LCBmbGFncywgbmV3X25zaWQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NjIzLVx0XHRcdFx0ICAgICBuZXdfaWZpbmRleCwgcG9ydGlkLCBubGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU0NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbi4gSXQgbG9va3MgbGlrZSBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAgaXMgYSBwcm9taXNpbmcgZnVuY3Rpb24gdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBBIHF1aWNrIHJldmlldyBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDogdGhlIHN5c3RlbSBpbmRpY2F0ZXMgaXQmIzM5O3MgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGlzIGdvb2QgbmV3cy4gTXkgZm9jdXMgc3ltYm9scyBhcmUgc2V0IGFzOgoKKiAgIGBydG5sX2dldGxpbmtgCiogICBgcnRubF9kdW1wX2lmaW5mb2AKKiAgIGBydG1zZ19pZmluZm9fYnVpbGRfc2tiYAoqICAgYGlmX25sbXNnX3NpemVgCiogICBgcnRubF9maWxsX2lmaW5mb2AKCkhhbmcgb24gYSBzZWNvbmQuLi4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIG1hcmtlZCBhcyBgc3RhdGljYCwgd2hpY2ggY291bGQgbWVhbiBpdCYjMzk7cyBvbmx5IHZpc2libGUgd2l0aGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQsIGJ1dCBpdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0IHNlZW1zIHRvIGJlIGEgZmFpcmx5IHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIG1hbmFnaW5nIHRvIGlubGluZSBpdCBvciBub3QuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBhc3NlbWJseSBsb29rcyBsaWtlIHRvIGVuc3VyZSBJIGhhdmUgdGhlIHByb3BlciB2aWV3IG9mIHRoZSBmdW5jdGlvbi4gTGV0JiMzOTtzIHZlcmlmeSB0aGF0IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDExOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9ydG5ldGxpbmsuYz0yMDg4PXN0YXRpYyBpbnQgcnRubF9maWxsX2RwbGxfcGluKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEwOS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIxMTA6c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMTExLVx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0ICpzcmNfbmV0LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTI1NDQ9c3RhdGljIGludCBydG5sX2R1bXBfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE5LVx0XHRcdGNvbnRpbnVlO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjYyMDpcdFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI2MjEtXHRcdFx0XHQgICAgICAgTkVUTElOS19DQihjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00Mjc2PXN0YXRpYyBpbnQgcnRubF9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzNDgtXHRpZiAobnNrYilcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDk6XHRcdGVyciA9IHJ0bmxfZmlsbF9pZmluZm8obnNrYiwgZGV2LCBuZXQsXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzUwLVx0XHRcdFx0ICAgICAgIFJUTV9ORVdMSU5LLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU4OC1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODk6XHRlcnIgPSBydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBkZXZfbmV0KGRldiksXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTkwLVx0XHRcdCAgICAgICB0eXBlLCBwb3J0aWQsIHNlcSwgY2hhbmdlLCAwLCAwLCBldmVudCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0OTYKCQkJCQkJCW91dHB1dDogMTg1CgkJCQkJCQl0aG91Z2h0czogNDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgcnRubF9maWxsX2lmaW5mb2AgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zLCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIG1hcmtlZCBgbm9pbmxpbmVgLiBUaGF0IG1ha2VzIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgY2xvc2VyIGV4YW1pbmF0aW9uLiBUaGV5JiMzOTtyZSBnb29kIGZvY3VzIHN5bWJvbHMuCgpOb3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBgQ09ORklHX05FVERFVlNJTWAgbG9va3MgbGlrZSBhIGtleSBvbmUuIEkgc2F3IHJlZmVyZW5jZXMgdG8gYG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmVgIGFuZCBgbnNpbV9udW1fdmZgIHdoaWNoIGFyZSBzb2xpZCBpbmRpY2F0b3JzIGl0JiMzOTtzIHN1ZmZpY2llbnQgZm9yIHRlc3RpbmcgdmlydHVhbCBmdW5jdGlvbnMuIEJleW9uZCB0aGF0LCBgQ09ORklHX05FVGAgaXMgcHJhY3RpY2FsbHkgYSBnaXZlbi4gQW5kIG9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGVzc2VudGlhbCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBDT05GSUdfUENJX0lPVmAuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBgcnRubF92ZmluZm9fY2FwYCBsb2dpYzoKCmBgYGMKc3RhdGljIGludCBydG5sX3ZmaW5mb19jYXAoaW50IG51bV92ZnMsIHUzMiBleHRfZmlsdGVyX21hc2spCnsKCXJldHVybiBtaW4obnVtX3ZmcywKCQkgICBleHRfZmlsdGVyX21hc2sgJmFtcDsgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpOwp9CmBgYAoKWWVwLCBzaW1wbGUgbG9naWMuIFRoZSBwYXRjaCBpdHNlbGYgaXMgc21hbGwsIGJ1dCBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdyBpc3N1ZSB3aGVuIGRldmljZXMgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBWRnMg4oCTIG1vcmUgdGhhbiAxMjggb3IgMjU2LCBkZXBlbmRpbmcgb24gZmlsdGVyaW5nLiBJdCYjMzk7cyBmdW5jdGlvbmFsLCBhbmQgZGVmaW5pdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgbmV0d29yayBzdGFjay4gSXQmIzM5O3MgYSBzb2xpZCwgcHJhY3RpY2FsIGNoYW5nZS4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyBteSBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nKio6IHRydWUKKiAgICoqRm9jdXNTeW1ib2xzKio6IGBydG5sX2ZpbGxfaWZpbmZvYCwgYGlmX25sbXNnX3NpemVgLCBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTkVUREVWU0lNYCwgYFBDSV9JT1ZgCiogICAqKlJlYXNvbmluZyoqOiBUaGlzIHBhdGNoIG1vZGlmaWVzIGZ1bmRhbWVudGFsIHJ0bmV0bGluayBsb2dpYyBieSBjYXBwaW5nIHRoZSBudW1iZXIgb2YgVkZzIHJldHVybmVkIGluIGBJRkxBX1ZGSU5GT19MSVNUYCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBmaXggaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGEgc21hbGwsIHlldCBzaWduaWZpY2FudCBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBpc3N1ZXMgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGRldmljZXMgd2l0aCBWRnMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMgdG8gdmVyaWZ5IHRoZSBjYXAgYW5kIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cy4gVGhlIGNvbmZpZ3MgZW5hYmxlIHVzIHRvIHRlc3QgdGhlIGRldmljZSB3aXRoIFZGcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTE6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRubF9maWxsX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtpZl9ubG1zZ19zaXplJiMzNDssCiAgICAmIzM0O3J0bmxfZ2V0bGluayYjMzQ7LAogICAgJiMzNDtydG5sX2R1bXBfaWZpbmZvJiMzNDssCiAgICAmIzM0O3J0bXNnX2lmaW5mb19idWlsZF9za2ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRERVZTSU0mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bmxfZmlsbF9pZmluZm8mIzM0OywKICAgICYjMzQ7aWZfbmxtc2dfc2l6ZSYjMzQ7LAogICAgJiMzNDtydG5sX2dldGxpbmsmIzM0OywKICAgICYjMzQ7cnRubF9kdW1wX2lmaW5mbyYjMzQ7LAogICAgJiMzNDtydG1zZ19pZmluZm9fYnVpbGRfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjAyOTQzOTMzOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzUzNjU3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MTkuMDI5NDQ0MzE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU0OTEwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0YTA3MDA3NWNmOWI4YWU4NjQ2NDYzNGFjZWNhYmVjOWQ5MmEwOTE0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcXG5pbmRleCA2OGMyNmE3MGJiNjQ5Li5iODBjMmFjM2FjMzExIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sXFxuQEAgLTkyOCw2ICs5MjgsMTEgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogdmZpbmZvLWxpc3RcXG4gICAgICAgICB0eXBlOiBuZXN0XFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IHZmaW5mby1saXN0LWF0dHJzXFxuKyAgICAgICAgZG9jOiB8XFxuKyAgICAgICAgICBQZXItVkYgZGV0YWlscy4gVGhlIGxpc3QgaG9sZHMgYXQgbW9zdCAyNTYgVkZzLCBvciAxMjggd2hlblxcbisgICAgICAgICAgc3RhdGlzdGljcyBhcmUgaW5jbHVkZWQsIGJlY2F1c2UgaXQgaXMgb25lIGF0dHJpYnV0ZSBhbmQgaGFzIHRvIGZpdFxcbisgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcXG4rICAgICAgICAgIHRydW5jYXRlZCBsaXN0OyBudW0tdmYgc3RpbGwgY2FycmllcyB0aGUgcmVhbCBjb3VudC5cXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHN0YXRzNjRcXG4gICAgICAgICB0eXBlOiBiaW5hcnlcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmNcXG4rKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuY1xcbkBAIC0xMTc0LDEyICsxMTc0LDI3IEBAIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsXFxuIFxcdGEtXFx1MDAzZXJ4X25vaGFuZGxlciA9IGItXFx1MDAzZXJ4X25vaGFuZGxlcjtcXG4gfVxcbiBcXG4rLyogQ2FwIHRoZSBudW1iZXIgb2YgVkZzIHRoYXQgSUZMQV9WRklORk9fTElTVCBkZXNjcmliZXMuIFRoZSBuZXN0IGlzIG9uZVxcbisgKiBuZXRsaW5rIGF0dHJpYnV0ZSwgc28gZXZlcnl0aGluZyBpbnNpZGUgaXQgaGFzIHRvIGZpdCBpbiB0aGUgdTE2IG5sYV9sZW4uXFxuKyAqIFRoZSBjYXAgaXMgYSBmaXhlZCBudW1iZXIgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgaGFwcGVucyB0byBmaXQsIHNvIHRoYXQgdGhlXFxuKyAqIGxpbWl0IGlzIGEgcHJvcGVydHkgb2YgdGhlIGludGVyZmFjZSBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgcmVxdWVzdGVkXFxuKyAqIGF0dHJpYnV0ZSBzZXQgYW5kIHRoZSBob3N0J3MgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gVGhlIGxhcmdlc3QgcGVyLVZGXFxuKyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxcbisgKiBzdGF0aXN0aWNzLCBzbyBib3RoIHZhbHVlcyBrZWVwIHRoZSBuZXN0IHdlbGwgaW5zaWRlIFUxNl9NQVguXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4re1xcbitcXHRyZXR1cm4gbWluKG51bV92ZnMsXFxuK1xcdFxcdCAgIGV4dF9maWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9TS0lQX1NUQVRTID8gMjU2IDogMTI4KTtcXG4rfVxcbitcXG4gLyogQWxsIFZGIGluZm8gKi9cXG4gc3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxcbiB7XFxuIFxcdGlmIChkZXYtXFx1MDAzZWRldi5wYXJlbnQgXFx1MDAyNlxcdTAwMjYgKGV4dF9maWx0ZXJfbWFzayBcXHUwMDI2IFJURVhUX0ZJTFRFUl9WRikpIHtcXG4tXFx0XFx0aW50IG51bV92ZnMgPSBkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuK1xcdFxcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXh0X2ZpbHRlcl9tYXNrKTtcXG4gXFx0XFx0c2l6ZV90IHNpemUgPSBubGFfdG90YWxfc2l6ZSgwKTtcXG4gXFx0XFx0c2l6ZSArPSBudW1fdmZzICpcXG4gXFx0XFx0XFx0KG5sYV90b3RhbF9zaXplKDApICtcXG5AQCAtMTcxNyw2ICsxNzMyLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpZiAoIXZmaW5mbylcXG4gXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gXFxuK1xcdC8qIElGTEFfTlVNX1ZGIGFib3ZlIHN0YXlzIHRoZSBkZXZpY2UncyBWRiBjb3VudDsgdGhlIGxpc3QgaXRzZWxmIGlzXFxuK1xcdCAqIGNhcHBlZCBzbyB0aGF0IGl0cyBsZW5ndGggY2Fubm90IG92ZXJmbG93IG5sYV9sZW4uXFxuK1xcdCAqL1xcbitcXHRudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKG51bV92ZnMsIGV4dF9maWx0ZXJfbWFzayk7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XFxuIFxcdFxcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XFxuIFxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjQ0NTQ3Mjk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYzOTM3NjE0ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGEwNzAwNzVjZjliOGFlODY0NjQ2MzRhY2VjYWJlYzlkOTJhMDkxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMTE6NDE6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtbGluay55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWxpbmsueWFtbFxuaW5kZXggNjhjMjZhNzBiYjY0OS4uYjgwYzJhYzNhYzMxMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxcbkBAIC05MjgsNiArOTI4LDExIEBAIGF0dHJpYnV0ZS1zZXRzOlxuICAgICAgICAgbmFtZTogdmZpbmZvLWxpc3RcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiB2ZmluZm8tbGlzdC1hdHRyc1xuKyAgICAgICAgZG9jOiB8XG4rICAgICAgICAgIFBlci1WRiBkZXRhaWxzLiBUaGUgbGlzdCBob2xkcyBhdCBtb3N0IDI1NiBWRnMsIG9yIDEyOCB3aGVuXG4rICAgICAgICAgIHN0YXRpc3RpY3MgYXJlIGluY2x1ZGVkLCBiZWNhdXNlIGl0IGlzIG9uZSBhdHRyaWJ1dGUgYW5kIGhhcyB0byBmaXRcbisgICAgICAgICAgaW4gYSB1MTYgbGVuZ3RoLiBBIGRldmljZSB3aXRoIG1vcmUgVkZzIHRoYW4gdGhhdCByZXBvcnRzIGFcbisgICAgICAgICAgdHJ1bmNhdGVkIGxpc3Q7IG51bS12ZiBzdGlsbCBjYXJyaWVzIHRoZSByZWFsIGNvdW50LlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IHN0YXRzNjRcbiAgICAgICAgIHR5cGU6IGJpbmFyeVxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbmluZGV4IDMxYzY1YTU0NWExMDcuLjgxYzVhNjEwNGRlYTEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuY1xuKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmNcbkBAIC0xMTc0LDEyICsxMTc0LDI3IEBAIHN0YXRpYyB2b2lkIGNvcHlfcnRubF9saW5rX3N0YXRzKHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgKmEsXG4gXHRhLVx1MDAzZXJ4X25vaGFuZGxlciA9IGItXHUwMDNlcnhfbm9oYW5kbGVyO1xuIH1cbiBcbisvKiBDYXAgdGhlIG51bWJlciBvZiBWRnMgdGhhdCBJRkxBX1ZGSU5GT19MSVNUIGRlc2NyaWJlcy4gVGhlIG5lc3QgaXMgb25lXG4rICogbmV0bGluayBhdHRyaWJ1dGUsIHNvIGV2ZXJ5dGhpbmcgaW5zaWRlIGl0IGhhcyB0byBmaXQgaW4gdGhlIHUxNiBubGFfbGVuLlxuKyAqIFRoZSBjYXAgaXMgYSBmaXhlZCBudW1iZXIgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgaGFwcGVucyB0byBmaXQsIHNvIHRoYXQgdGhlXG4rICogbGltaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgaW50ZXJmYWNlIGluc3RlYWQgb2Ygb25lIG9mIHRoZSByZXF1ZXN0ZWRcbisgKiBhdHRyaWJ1dGUgc2V0IGFuZCB0aGUgaG9zdCdzIGFsaWdubWVudCByZXF1aXJlbWVudHMuIFRoZSBsYXJnZXN0IHBlci1WRlxuKyAqIGVuY29kaW5nIGlzIDM2OCBieXRlcyB3aXRoIHN0YXRpc3RpY3MgYW5kIEdVSURzIGFuZCAyMzYgYnl0ZXMgd2l0aG91dFxuKyAqIHN0YXRpc3RpY3MsIHNvIGJvdGggdmFsdWVzIGtlZXAgdGhlIG5lc3Qgd2VsbCBpbnNpZGUgVTE2X01BWC5cbisgKi9cbitzdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbit7XG4rXHRyZXR1cm4gbWluKG51bV92ZnMsXG4rXHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xuK31cbitcbiAvKiBBbGwgVkYgaW5mbyAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHUzMiBleHRfZmlsdGVyX21hc2spXG4ge1xuIFx0aWYgKGRldi1cdTAwM2VkZXYucGFyZW50IFx1MDAyNlx1MDAyNiAoZXh0X2ZpbHRlcl9tYXNrIFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpKSB7XG4tXHRcdGludCBudW1fdmZzID0gZGV2X251bV92ZihkZXYtXHUwMDNlZGV2LnBhcmVudCk7XG4rXHRcdGludCBudW1fdmZzID0gcnRubF92ZmluZm9fY2FwKGRldl9udW1fdmYoZGV2LVx1MDAzZWRldi5wYXJlbnQpLFxuK1x0XHRcdFx0XHQgICAgICBleHRfZmlsdGVyX21hc2spO1xuIFx0XHRzaXplX3Qgc2l6ZSA9IG5sYV90b3RhbF9zaXplKDApO1xuIFx0XHRzaXplICs9IG51bV92ZnMgKlxuIFx0XHRcdChubGFfdG90YWxfc2l6ZSgwKSArXG5AQCAtMTcxNyw2ICsxNzMyLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKCF2ZmluZm8pXG4gXHRcdHJldHVybiAtRU1TR1NJWkU7XG4gXG4rXHQvKiBJRkxBX05VTV9WRiBhYm92ZSBzdGF5cyB0aGUgZGV2aWNlJ3MgVkYgY291bnQ7IHRoZSBsaXN0IGl0c2VsZiBpc1xuK1x0ICogY2FwcGVkIHNvIHRoYXQgaXRzIGxlbmd0aCBjYW5ub3Qgb3ZlcmZsb3cgbmxhX2xlbi5cbitcdCAqL1xuK1x0bnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChudW1fdmZzLCBleHRfZmlsdGVyX21hc2spO1xuK1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3ZmczsgaSsrKSB7XG4gXHRcdGlmIChydG5sX2ZpbGxfdmZpbmZvKHNrYiwgZGV2LCBpLCBleHRfZmlsdGVyX21hc2spKSB7XG4gXHRcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgdmZpbmZvKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjE5LjQ0NTQ3NDA0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTk2NDQyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVE5MIFZGSU5GTyBMaXN0IENhcCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC9jb3JlL3J0bmV0bGluay5jYCBhbmQgYERvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1saW5rLnlhbWxgLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBydG5sX3ZmaW5mb19jYXBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGRlc2lnbmVkIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cywgc3BlY2lmaWNhbGx5IGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykgcmV0dXJuZWQgd2l0aGluIHRoZSBgSUZMQV9WRklORk9fTElTVGAuIFRoZXkncmUgY2FwcGluZyB0aGUgc2l6ZSwgcHJvYmFibHkgYmVjYXVzZSBgbmxhX2xlbmAgaXMgYSBgdTE2YCBhbmQgY2FuIGJlIG92ZXJmbG93ZWQuXG5cbkkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgaW1wYWN0ZWQ6IGBydG5sX2ZpbGxfdmZgLCBgcnRubF92ZmluZm9fc2l6ZWAsIGFuZCwgb2YgY291cnNlLCBgcnRubF92ZmluZm9fY2FwYC4gUmlnaHQsIHNvIGBydG5sX2ZpbGxfdmZgIGlzIGNhbGxlZCBieSBgcnRubF9maWxsX2lmaW5mb2AsIGFuZCBgcnRubF92ZmluZm9fc2l6ZWAgZmVlZHMgaW50byBgaWZfbmxtc2dfc2l6ZWAuIFRoaXMgbWVhbnMgdGhhdCBgcnRubF9maWxsX3ZmYCBlc3NlbnRpYWxseSBmaWxscyB0aGUgVkYgZGF0YSBhbmQgZGV0ZXJtaW5lcyB0aGUgc2l6ZS4gTWFrZXMgc2Vuc2UuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgbW9kaWZpY2F0aW9uIGluIHJ0bmV0bGluaywgc28gbXkgZ3V0IHRlbGxzIG1lIGl0J3MgZnV6ei13b3J0aHkuIFRoZXJlJ3MgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UgaGVyZSwgYXMgaXQncyBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGluZm9ybWF0aW9uIHNlbnQgb3ZlciB0aGUgd2lyZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgYXJlYXMgdG8gZm9jdXMgb24gZm9yIGEgZnV6emluZyBjYW1wYWlnbi4gYHJ0bmxfZmlsbF92ZmAgaXMgYG5vaW5saW5lX2Zvcl9zdGFja2AgYW5kIHN0YXRpYyAtIHRoYXQncyBpbnRlcmVzdGluZy4gYHJ0bmxfZmlsbF9pZmluZm9gIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LCBhbmQgYGlmX25sbXNnX3NpemVgIGlzIGNhbGxlZCBieSBgcnRubF9nZXRsaW5rYCwgYHJ0bmxfZHVtcF9pZmluZm9gLCBldGMuIEknbGwgbmVlZCB0byBsb29rIGF0IHRob3NlLlxuXG5UaW1lIHRvIGV4YW1pbmUgYHJ0bmxfZmlsbF92ZmAgaXRzZWxmIHdpdGhpbiBgbmV0L2NvcmUvcnRuZXRsaW5rLmNgLiBMZXQncyBzZWUgaG93IHRoaXMgY2FwIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjYuNjA1MTI2MTY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODExNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xNTQzPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTU2Ni1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNTY3OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNTY4LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTcxMy1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNzE0OnN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHJ0bmxfZmlsbF92ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MTUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3NDAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV92ZnM7IGkrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjE3NDE6XFx0XFx0aWYgKHJ0bmxfZmlsbF92ZmluZm8oc2tiLCBkZXYsIGksIGV4dF9maWx0ZXJfbWFzaykpIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xNzQyLVxcdFxcdFxcdG5sYV9uZXN0X2NhbmNlbChza2IsIHZmaW5mbyk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMTEwPXN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjIyNS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMjI2OlxcdGlmIChydG5sX2ZpbGxfdmYoc2tiLCBkZXYsIGV4dF9maWx0ZXJfbWFzaykpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjIyNy1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjYuNjUxOTQzNjE1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0ODY1MTMwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgdGhvdWdoIEknbSB0aGUgb25lIGhhdmluZyB0aGUgdGhvdWdodHM6XG5cbioqRm9jdXNpbmcgb24gTmV0d29yayBJbnRlcmZhY2UgSW5mb3JtYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbiBjb2RlLiBgcnRubF9maWxsX2lmaW5mb2AgZmVlbHMgbGlrZSBhIHNvbGlkIGZvY2FsIHBvaW50LiBUaGF0IGZ1bmN0aW9uJ3MgZGVmaW5pdGVseSBjZW50cmFsIHRvIGhvdyB3ZSdyZSBkZWFsaW5nIHdpdGggaW50ZXJmYWNlIGRldGFpbHMsIGFuZCB0aGUgd2F5IGl0IGhhbmRsZXMgZGF0YSBzdHJ1Y3R1cmVzLiBOb3csIEknbSB0cnlpbmcgdG8gZXhwYW5kIG15IHBlcnNwZWN0aXZlIGEgYml0LiBJIHdvbmRlciBpZiBpdCB3b3VsZCBiZSB1c2VmdWwgdG8gZXhwbG9yZSBgcnRubF92ZmluZm9fc2l6ZWAgYXMgd2VsbCwgYXMgSSBrbm93IHRoYXQgY29uY2VybnMgdmlydHVhbCBmdW5jdGlvbiBzaXppbmcuIFRoaXMgY291bGQgcHJvdmlkZSBhbm90aGVyIHBlcnNwZWN0aXZlIHRvIG15IGluaXRpYWwgZm9jdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MToyOS40MDA1OTc4MjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NjkwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRubF92ZmluZm9fc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xMTg1PXN0YXRpYyBpbnQgcnRubF92ZmluZm9fY2FwKGludCBudW1fdmZzLCB1MzIgZXh0X2ZpbHRlcl9tYXNrKVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5MS0vKiBBbGwgVkYgaW5mbyAqL1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjExOTI6c3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTExOTMtXFx0XFx0XFx0XFx0ICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc3LVxcdFxcdFxcdCAgICAgICAgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYgPyA0IDogMCkgLyogSUZMQV9OVU1fVkYgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzc4OlxcdCAgICAgICArIHJ0bmxfdmZpbmZvX3NpemUoZGV2LCBleHRfZmlsdGVyX21hc2spIC8qIElGTEFfVkZJTkZPX0xJU1QgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzc5LVxcdCAgICAgICArIHJ0bmxfcG9ydF9zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSAvKiBJRkxBX1ZGX1BPUlRTICsgSUZMQV9QT1JUX1NFTEYgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MjkuNDQzMzcxNTI0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDM4MjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIE5ldHdvcmsgSW50ZXJmYWNlIEluZm9ybWF0aW9uKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBuYXZpZ2F0aW5nIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpbmZvcm1hdGlvbi4gYGlmX25sbXNnX3NpemVgIOKAkyB0aGF0J3MgYSBrZXkgZnVuY3Rpb24sIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBmb2N1cyBvbiwgYXMgSSBrbm93LiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgZXNzZW50aWFsbHkuIEl0J3MgZ29pbmcgdG8gYmUgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzaXplIG9mIE5ldGxpbmsgbWVzc2FnZXMgcmVsYXRlZCB0byBpbnRlcmZhY2UgZGF0YS4gTm93LCB3aGVyZSBkbyBJIGFjdHVhbGx5IGJlZ2luIHRvICpnZXQqIHRoYXQgZGF0YT8gSSdkIGxvb2sgdG8gYHJ0bmxfZ2V0bGlua2AgYW5kIGBydG5sX2R1bXBfaWZpbmZvYC4gVGhvc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gYHJ0bmxfZ2V0bGlua2AgcHJvYmFibHkgZmV0Y2hlcyB0aGUgc3BlY2lmaWMgbGluayBiYXNlZCBvbiBzb21lIGNyaXRlcmlhLCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGxpa2VseSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbnRpcmUgc2V0LCBkZXBlbmRpbmcgb24gd2hhdCBJJ20gbG9va2luZyBmb3IuIFRob3NlIHR3byBhcmUgZGVmaW5pdGVseSBteSBpbml0aWFsIGFuY2hvcnMgaW4gdGhpcyBzcGFjZS4gSSBjYW4gdXNlIHRob3NlIHRvIHN0YXJ0IHF1ZXJ5aW5nIGFuZCBsb29raW5nIGF0IHRoZSBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTozMi42OTc3NTY1ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA5NTQ5MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWZfbmxtc2dfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz0xMzIxPXN0YXRpYyBzaXplX3QgcnRubF9kZXZfcGFyZW50X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMzUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMzNjpzdGF0aWMgbm9pbmxpbmUgc2l6ZV90IGlmX25sbXNnX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzM3LVxcdFxcdFxcdFxcdCAgICAgdTMyIGV4dF9maWx0ZXJfbWFzaylcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNzY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ2LVxcdGVyciA9IC1FTk9CVUZTO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDc6XFx0bnNrYiA9IG5sbXNnX25ld19sYXJnZShpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDM0OC1cXHRpZiAobnNrYilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQzNjUtXFx0XFx0XFx0fVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNjY6XFx0XFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIGlmX25sbXNnX3NpemUgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzY3LVxcdFxcdFxcdFdBUk5fT05fT05DRSgxKTtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ0ODI9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB1MzIgcnRubF9jYWxjaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1MTQtXFx0XFx0bWluX2lmaW5mb19kdW1wX3NpemUgPSBtYXgobWluX2lmaW5mb19kdW1wX3NpemUsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NDUxNTpcXHRcXHRcXHRcXHRcXHQgICBpZl9ubG1zZ19zaXplKGRldiwgZXh0X2ZpbHRlcl9tYXNrKSk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDUxNi1cXHR9XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz00NTY5PXN0cnVjdCBza19idWZmICpydG1zZ19pZmluZm9fYnVpbGRfc2tiKGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3OS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTgwOlxcdHNrYiA9IG5sbXNnX25ldyhpZl9ubG1zZ19zaXplKGRldiwgMCksIGZsYWdzKTtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTgxLVxcdGlmIChza2IgPT0gTlVMTClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTItXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NTkzOlxcdFxcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplKCkgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTk0LVxcdFxcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjMyLjczODcxNTkyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTQ3MTc1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb3V0ZSBOZXRsaW5rIEludGVyZmFjZSBmb3IgVmlydHVhbCBGdW5jdGlvbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgaGVyZSdzIGhvdyBJJ20gYXBwcm9hY2hpbmcgdGhpcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBlbnRyeSBwb2ludHM6IGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AgKHdoaWNoIEkga25vdyBnb2VzIHRocm91Z2ggYHJ0bmxfY2FsY2l0YCksIGFuZCBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkLCBwYXJ0aWN1bGFybHkgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggVmlydHVhbCBGdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb25maWd1cmF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW4gcGxhY2UuIEdpdmVuIHRoYXQgdGhpcyBjb2RlIGlzIGNlbnRyYWwgdG8gdGhlIHJ0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgSSdtIHByZXR0eSBjZXJ0YWluIGl0J3MgYWx3YXlzIGVuYWJsZWQuIFN0aWxsLCBpdCByZWxhdGVzIHRvIFZGcyBzcGVjaWZpY2FsbHksIHNvIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2suXG5cbk5vdywgYmVjYXVzZSBWRnMgYXJlIHJlbGF0ZWQgdG8gaGFyZHdhcmUgdmlydHVhbGl6YXRpb24sIEkgc2hvdWxkIGNvbnNpZGVyIHJlbGV2YW50IGNvbmZpZ3MuIEknbSB0aGlua2luZyBhYm91dCBgQ09ORklHX1BDSV9JT1ZgLiBJIHNob3VsZCBleGFtaW5lIHRoYXQsIGFuZCB0aGVuIGNoZWNrIGBkZXZfbnVtX3ZmYCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgaW5kaWNhdG9yIG9mIFZGIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6MzYuMjUzNDM2MTMzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUzOTg0MDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9udW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmlydGlvL3ZpcnRpby5jPTQwND1zdGF0aWMgdm9pZCB2aXJ0aW9fZGV2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kKVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDM3LVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQzODpzdGF0aWMgaW50IHZpcnRpb19kZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00Mzkte1xcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDQxLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ0MjpcXHRyZXR1cm4gZGV2X251bV92Zih2ZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG5kcml2ZXJzL3ZpcnRpby92aXJ0aW8uYy00NDMtfVxcbi0tXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmM9NDQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdmlydGlvX2J1cyA9IHtcXG4tLVxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jLTQ1NC1cXHQuc2h1dGRvd24gPSB2aXJ0aW9fZGV2X3NodXRkb3duLFxcbmRyaXZlcnMvdmlydGlvL3ZpcnRpby5jOjQ1NTpcXHQubnVtX3ZmID0gdmlydGlvX2Rldl9udW1fdmYsXFxuZHJpdmVycy92aXJ0aW8vdmlydGlvLmMtNDU2LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oPTEyNzM9c3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9vZl9ub2RlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmgtMTI3OS1cXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oOjEyODA6c3RhdGljIGlubGluZSBpbnQgZGV2X251bV92ZihzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaC0xMjgxLXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTExOTI9c3RhdGljIGlubGluZSBpbnQgcnRubF92ZmluZm9fc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5NS1cXHRpZiAoZGV2LVxcdTAwM2VkZXYucGFyZW50IFxcdTAwMjZcXHUwMDI2IChleHRfZmlsdGVyX21hc2sgXFx1MDAyNiBSVEVYVF9GSUxURVJfVkYpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTE5NjpcXHRcXHRpbnQgbnVtX3ZmcyA9IHJ0bmxfdmZpbmZvX2NhcChkZXZfbnVtX3ZmKGRldi1cXHUwMDNlZGV2LnBhcmVudCksXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTE5Ny1cXHRcXHRcXHRcXHRcXHQgICAgICBleHRfZmlsdGVyX21hc2spO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTI0MT1zdGF0aWMgc2l6ZV90IHJ0bmxfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjU4LVxcdFxcdHJldHVybiAwO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyNTk6XFx0aWYgKGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KSlcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMjYwLVxcdFxcdHJldHVybiBwb3J0X3NlbGZfc2l6ZSArIHZmX3BvcnRzX3NpemUgK1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjEyNjE6XFx0XFx0XFx0dmZfcG9ydF9zaXplICogZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEyNjItXFx0ZWxzZVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTQxMT1zdGF0aWMgaW50IHJ0bmxfdmZfcG9ydHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQyMS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxNDIyOlxcdGZvciAodmYgPSAwOyB2ZiBcXHUwMDNjIGRldl9udW1fdmYoZGV2LVxcdTAwM2VkZXYucGFyZW50KTsgdmYrKykge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0MjMtXFx0XFx0dmZfcG9ydCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfVkZfUE9SVCk7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xNDY3PXN0YXRpYyBpbnQgcnRubF9wb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE0NzktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTQ4MDpcXHRpZiAoZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpKSB7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTQ4MS1cXHRcXHRlcnIgPSBydG5sX3ZmX3BvcnRzX2ZpbGwoc2tiLCBkZXYpO1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTcxND1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludCBydG5sX2ZpbGxfdmYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MjMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTcyNDpcXHRudW1fdmZzID0gZGV2X251bV92ZihkZXYtXFx1MDAzZWRldi5wYXJlbnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTE3MjUtXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9OVU1fVkYsIG51bV92ZnMpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTozNy45MDc0Mjg3ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUyMjI5NTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgYGRldl9udW1fdmZgLiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCBpdCdzIGdvaW5nIHRvIGJlIGluIG9uZSBvZiB0aGUgY29yZSBrZXJuZWwgaGVhZGVyIGZpbGVzIHJlbGF0ZWQgdG8gZGV2aWNlIG1hbmFnZW1lbnQuIEJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoaXMgdHlwZSBvZiB0aGluZywgYGluY2x1ZGUvbGludXgvZGV2aWNlLmhgIGlzIGEgc3Ryb25nIGNhbmRpZGF0ZS4gVGhpcyBmaWxlIGhvdXNlcyBjb3JlIGRldmljZSBtb2RlbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucywgc28gaXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBhIGZpZWxkIHRoYXQgcmVsYXRlcyB0byB2aXJ0dWFsIGZ1bmN0aW9ucyB3aXRoaW4gYSBkZXZpY2Ugc3RydWN0dXJlLiBJJ20gZ29pbmcgdG8gaGVhZCB0aGVyZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk5MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjQwLjQyOTcyNjI2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA3NjI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X251bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2RldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGV2aWNlLmg9MTI3Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X29mX25vZGUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuaW5jbHVkZS9saW51eC9kZXZpY2UuaC0xMjc5LVxcbmluY2x1ZGUvbGludXgvZGV2aWNlLmg6MTI4MDpzdGF0aWMgaW5saW5lIGludCBkZXZfbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5pbmNsdWRlL2xpbnV4L2RldmljZS5oLTEyODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0MC40NzA0OTM5NTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDg5MjU1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIERldmljZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgZGV2aWNlIG1vZGVsIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBMZXQncyBzdGFydCB3aXRoIGEgY29yZSBzdHJ1Y3R1cmUsIGBzdHJ1Y3QgZGV2aWNlYCwgYW5kIHRoZSBzdXJyb3VuZGluZyBkZWZpbml0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGp1bXAgaW50byBgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAgYXJvdW5kIGxpbmUgMTI4MC4gSSBrbm93IHRoaXMgZmlsZSBpcyBtYXNzaXZlLCBidXQgbGluZSAxMjgwIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgdG8gbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zLiBJJ20gaG9waW5nIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgYW5kIG1hbmFnZWQgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSBJJ2xsIGZpbmQga2V5IG1lbWJlcnMgcmVsYXRlZCB0byB0aGVpciBsaWZlY3ljbGUsIGF0dHJpYnV0ZXMsIGFuZCByZWxhdGlvbnNoaXBzIHdpdGggZHJpdmVycyBhbmQgYnVzZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgb3JnYW5pemVzIHRoZXNlIGRldmljZSBvYmplY3RzLiBJIGFudGljaXBhdGUgaGF2aW5nIHRvIHRyYWNlIHRocm91Z2ggYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIG1hY3JvcyB0byBmdWxseSBncmFzcCB0aGUgY29uY2VwdHMgaGVyZSwgYnV0IHRoaXMgc2hvdWxkIGJlIGEgc29saWQgZmlyc3Qgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQxOjQzLjU2NTM5Mjk5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9kZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMjc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjc1OlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfT0YpIHx8ICFkZXYpXFxuMTI3NjpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMjc3OlxcdFxcdHJldHVybiBkZXYtXFx1MDAzZW9mX25vZGU7XFxuMTI3ODpcXHR9XFxuMTI3OTpcXHRcXG4xMjgwOlxcdHN0YXRpYyBpbmxpbmUgaW50IGRldl9udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0aWYgKGRldi1cXHUwMDNlYnVzIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlYnVzLVxcdTAwM2VudW1fdmYpXFxuMTI4MzpcXHRcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VidXMtXFx1MDAzZW51bV92ZihkZXYpO1xcbjEyODQ6XFx0XFx0cmV0dXJuIDA7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdC8qXFxuMTI4ODpcXHQgKiBSb290IGRldmljZSBvYmplY3RzIGZvciBncm91cGluZyB1bmRlciAvc3lzL2RldmljZXNcXG4xMjg5OlxcdCAqL1xcbjEyOTA6XFx0c3RydWN0IGRldmljZSAqX19yb290X2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7XFxuMTI5MTpcXHRcXG4xMjkyOlxcdC8qIFRoaXMgaXMgYSBtYWNybyB0byBhdm9pZCBpbmNsdWRlIHByb2JsZW1zIHdpdGggVEhJU19NT0RVTEUgKi9cXG4xMjkzOlxcdCNkZWZpbmUgcm9vdF9kZXZpY2VfcmVnaXN0ZXIobmFtZSkgXFxcXFxcbjEyOTQ6XFx0XFx0X19yb290X2RldmljZV9yZWdpc3RlcihuYW1lLCBUSElTX01PRFVMRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NDMuNTY1NjE1MTk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NzI2MTExOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBWaXJ0dWFsIEZ1bmN0aW9ucyBBY3Jvc3MgRGlmZmVyZW50IEJ1c2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgd2UgaGFuZGxlIFZpcnR1YWwgRnVuY3Rpb25zIChgVkZgKSBhY3Jvc3MgZGlmZmVyZW50IGRldmljZSBkcml2ZXJzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSB0aGF0IGBkZXZfbnVtX3ZmYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgVkZzIGEgZGV2aWNlIHN1cHBvcnRzLiBJdCdzIGNhbGxpbmcgYGRldi1cdTAwM2VidXMtXHUwMDNlbnVtX3ZmKGRldilgLCB3aGljaCB0ZWxscyBtZSB0aGUgc3BlY2lmaWMgYnVzIHR5cGUgaXMgY3J1Y2lhbC4gRm9yIFBDSSBkZXZpY2VzLCBteSBndWVzcyBpcyB0aGF0IHRoaXMgaXMgaGFuZGxlZCBieSBgcGNpX251bV92ZmAuIEJ1dCB0aGVuIEkgaGF2ZSB0byB0aGluaywgYXJlIHdlICpvbmx5KiBkZWFsaW5nIHdpdGggUENJIGhlcmU/XG5cbkhvbGQgb24uIElzbid0IGB2aXJ0aW9fYnVzYCBhbHNvIGNhcGFibGUgb2YgVkZzPyBSaWdodCwgdGhlcmUncyBgdmlydGlvX2Rldl9udW1fdmZgLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYENPTkZJR19QQ0lfSU9WYCBzb2xlbHkgZm9yIGVuYWJsaW5nIFBDSSBWRnMsIG9yIGRvZXMgdGhlIHZpcnRpbyBpbXBsZW1lbnRhdGlvbiBoYXZlIGl0cyBvd24gZGlzdGluY3QgbmVlZHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIExldCdzIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgaG93IGBwY2lfbnVtX3ZmYCBpcyBpbXBsZW1lbnRlZC4gVGhhdCBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0Ny41MzgyMjkxMzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDMwMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bV92ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYz00Nj1zdGF0aWMgaW50IGRpc2FibGVfc2xvdChzdHJ1Y3QgaG90cGx1Z19zbG90ICpob3RwbHVnX3Nsb3QpXFxuLS1cXG5kcml2ZXJzL3BjaS9ob3RwbHVnL3MzOTBfcGNpX2hwYy5jLTU5LVxcdHBkZXYgPSBwY2lfZ2V0X3Nsb3QoemRldi1cXHUwMDNlemJ1cy1cXHUwMDNlYnVzLCB6ZGV2LVxcdTAwM2VkZXZmbik7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYzo2MDpcXHRpZiAocGRldiBcXHUwMDI2XFx1MDAyNiBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvaG90cGx1Zy9zMzkwX3BjaV9ocGMuYy02MS1cXHRcXHRyYyA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lkZS5jPTIzOT1zdHJ1Y3QgcGNpX2lkZSAqcGNpX2lkZV9zdHJlYW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3BjaS9pZGUuYy0yNDctXFx0c3RydWN0IHBjaV9kZXYgKnJwLCAqYnI7XFxuZHJpdmVycy9wY2kvaWRlLmM6MjQ4OlxcdGludCBudW1fdmYsIHJpZF9lbmQ7XFxuZHJpdmVycy9wY2kvaWRlLmMtMjQ5LVxcbi0tXFxuZHJpdmVycy9wY2kvaWRlLmMtMjgwLVxcdC8qIGZvciBTUi1JT1YgY2FzZSwgY292ZXIgYWxsIFZGcyAqL1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MTpcXHRudW1fdmYgPSBwY2lfbnVtX3ZmKHBkZXYpO1xcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MjpcXHRpZiAobnVtX3ZmKVxcbmRyaXZlcnMvcGNpL2lkZS5jOjI4MzpcXHRcXHRyaWRfZW5kID0gUENJX0RFVklEKHBjaV9pb3ZfdmlydGZuX2J1cyhwZGV2LCBudW1fdmYgLSAxKSxcXG5kcml2ZXJzL3BjaS9pZGUuYzoyODQ6XFx0XFx0XFx0XFx0ICAgIHBjaV9pb3ZfdmlydGZuX2RldmZuKHBkZXYsIG51bV92ZiAtIDEpKTtcXG5kcml2ZXJzL3BjaS9pZGUuYy0yODUtXFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDQxPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ0NS1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTtcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NDY6XFx0dTE2IG51bV92ZnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDQ3LVxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNDQ5LVxcdGRldmljZV9sb2NrKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MDpcXHRudW1fdmZzID0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnM7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUxLVxcdGRldmljZV91bmxvY2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9wY2kvaW92LmMtNDUyLVxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNDU0LX1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1Ni0vKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjQ1NzogKiBudW1fdmZzIFxcdTAwM2UgMDsgbnVtYmVyIG9mIFZGcyB0byBlbmFibGVcXG5kcml2ZXJzL3BjaS9pb3YuYzo0NTg6ICogbnVtX3ZmcyA9IDA7IGRpc2FibGUgYWxsIFZGc1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ1OS0gKlxcbi0tXFxuZHJpdmVycy9wY2kvaW92LmM9NDYzPXN0YXRpYyBzc2l6ZV90IHNyaW92X251bXZmc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy00NjgtXFx0aW50IHJldCA9IDA7XFxuZHJpdmVycy9wY2kvaW92LmM6NDY5OlxcdHUxNiBudW1fdmZzO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3MC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzE6XFx0aWYgKGtzdHJ0b3UxNihidWYsIDAsIFxcdTAwMjZudW1fdmZzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9wY2kvaW92LmMtNDcyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3My1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0NzQ6XFx0aWYgKG51bV92ZnMgXFx1MDAzZSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3NS1cXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ3OC1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0Nzk6XFx0aWYgKG51bV92ZnMgPT0gcGRldi1cXHUwMDNlc3Jpb3YtXFx1MDAzZW51bV9WRnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNDgwLVxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5NS1cXG5kcml2ZXJzL3BjaS9pb3YuYzo0OTY6XFx0aWYgKG51bV92ZnMgPT0gMCkge1xcbmRyaXZlcnMvcGNpL2lvdi5jLTQ5Ny1cXHRcXHQvKiBkaXNhYmxlIFZGcyAqL1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtNTA2LVxcdFxcdHBjaV93YXJuKHBkZXYsIFxcXCIlZCBWRnMgYWxyZWFkeSBlbmFibGVkLiBEaXNhYmxlIGJlZm9yZSBlbmFibGluZyAlZCBWRnNcXFxcblxcXCIsXFxuZHJpdmVycy9wY2kvaW92LmM6NTA3OlxcdFxcdFxcdCBwZGV2LVxcdTAwM2Vzcmlvdi1cXHUwMDNlbnVtX1ZGcywgbnVtX3Zmcyk7XFxuZHJpdmVycy9wY2kvaW92LmMtNTA4LVxcdFxcdHJldCA9IC1FQlVTWTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxMi1cXHRwY2lfbG9ja19yZXNjYW5fcmVtb3ZlKCk7XFxuZHJpdmVycy9wY2kvaW92LmM6NTEzOlxcdHJldCA9IHBkZXYtXFx1MDAzZWRyaXZlci1cXHUwMDNlc3Jpb3ZfY29uZmlndXJlKHBkZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNC1cXHRwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo1MTg6XFx0aWYgKHJldCAhPSBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTUxOS1cXHRcXHRwY2lfd2FybihwZGV2LCBcXFwiJWQgVkZzIHJlcXVlc3RlZDsgb25seSAlZCBlbmFibGVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvcGNpL2lvdi5jOjUyMDpcXHRcXHRcXHQgbnVtX3ZmcywgcmV0KTtcXG5kcml2ZXJzL3BjaS9pb3YuYy01MjEtXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYz02MTM9Y29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzcmlvdl9wZl9kZXZfYXR0cl9ncm91cCA9IHtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYxNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2MTg6aW50IF9fd2VhayBwY2liaW9zX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtNjE5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTYyMz1pbnQgX193ZWFrIHBjaWJpb3Nfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyNy1cXG5kcml2ZXJzL3BjaS9pb3YuYzo2Mjg6c3RhdGljIGludCBzcmlvdl9hZGRfdmZzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUxNiBudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTYyOS17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy02MzUtXFxuZHJpdmVycy9wY2kvaW92LmM6NjM2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fdmZzOyBpKyspIHtcXG5kcml2ZXJzL3BjaS9pb3YuYy02MzctXFx0XFx0cmMgPSBwY2lfaW92X2FkZF92aXJ0Zm4oZGV2LCBpKTtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTExOTA9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rpc2FibGVfc3Jpb3YpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTE5Mi0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMTkzOiAqIHBjaV9udW1fdmYgLSByZXR1cm4gbnVtYmVyIG9mIFZGcyBhc3NvY2lhdGVkIHdpdGggYSBQRiBkZXZpY2VfcmVsZWFzZV9kcml2ZXJcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk0LSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk3LSAqL1xcbmRyaXZlcnMvcGNpL2lvdi5jOjExOTg6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldilcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMTk5LXtcXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEyMDQtfVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEyMDU6RVhQT1JUX1NZTUJPTF9HUEwocGNpX251bV92Zik7XFxuZHJpdmVycy9wY2kvaW92LmMtMTIwNi1cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jPTEzNTg9RVhQT1JUX1NZTUJPTF9HUEwocGNpX2lvdl92Zl9iYXJfc2V0X3NpemUpO1xcbi0tXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2MC0vKipcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzYxOiAqIHBjaV9pb3ZfdmZfYmFyX2dldF9zaXplcyAtIGdldCBWRiBCQVIgc2l6ZXMgYWxsb3dpbmcgdG8gY3JlYXRlIHVwIHRvIG51bV92ZnNcXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzYyLSAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2My0gKiBAcmVzbm86IHRoZSByZXNvdXJjZSBudW1iZXJcXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzY0OiAqIEBudW1fdmZzOiBudW1iZXIgb2YgVkZzXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2NS0gKlxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNjY6ICogR2V0IHRoZSBzaXplcyBvZiBhIFZGIHJlc2l6YWJsZSBCQVIgdGhhdCBjYW4gYWNjb21tb2RhdGUgQG51bV92ZnMgd2l0aGluXFxuZHJpdmVycy9wY2kvaW92LmMtMTM2Ny0gKiB0aGUgY3VycmVudGx5IGFzc2lnbmVkIHNpemUgb2YgdGhlIHJlc291cmNlIEByZXNuby5cXG4tLVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzEtICovXFxuZHJpdmVycy9wY2kvaW92LmM6MTM3Mjp1MzIgcGNpX2lvdl92Zl9iYXJfZ2V0X3NpemVzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywgaW50IG51bV92ZnMpXFxuZHJpdmVycy9wY2kvaW92LmMtMTM3My17XFxuLS1cXG5kcml2ZXJzL3BjaS9pb3YuYy0xMzc2LVxcbmRyaXZlcnMvcGNpL2lvdi5jOjEzNzc6XFx0aWYgKCFudW1fdmZzKVxcbmRyaXZlcnMvcGNpL2lvdi5jLTEzNzgtXFx0XFx0cmV0dXJuIDA7XFxuZHJpdmVycy9wY2kvaW92LmMtMTM3OS1cXG5kcml2ZXJzL3BjaS9pb3YuYzoxMzgwOlxcdGRvX2Rpdih2Zl9sZW4sIG51bV92ZnMpO1xcbmRyaXZlcnMvcGNpL2lvdi5jLTEzODEtXFx0c2l6ZXMgPSAocm91bmR1cF9wb3dfb2ZfdHdvKHZmX2xlbiArIDEpIC0gMSkgXFx1MDAzZVxcdTAwM2UgaWxvZzIoU1pfMU0pO1xcbi0tXFxuZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jPTE2MjU9dm9pZCBwY2lfdWV2ZW50X2VycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSBwY2lfZXJzX3Jlc3VsdCBlcnJfdHlwZSlcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU1LVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNjU2OnN0YXRpYyBpbnQgcGNpX2J1c19udW1fdmYoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU3LXtcXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmM6MTY1ODpcXHRyZXR1cm4gcGNpX251bV92Zih0b19wY2lfZGV2KGRldikpO1xcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNjU5LX1cXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYz0xNzI2PWNvbnN0IHN0cnVjdCBidXNfdHlwZSBwY2lfYnVzX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMtMTczOC1cXHQucG1cXHRcXHQ9IFBDSV9QTV9PUFNfUFRSLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYzoxNzM5OlxcdC5udW1fdmZcXHRcXHQ9IHBjaV9idXNfbnVtX3ZmLFxcbmRyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYy0xNzQwLVxcdC5kbWFfY29uZmlndXJlXFx0PSBwY2lfZG1hX2NvbmZpZ3VyZSxcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jPTE2ODE9c3RhdGljIHNzaXplX3QgX19yZXNvdXJjZV9yZXNpemVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbixcXG4tLVxcbmRyaXZlcnMvcGNpL3BjaS1zeXNmcy5jLTE2OTYtXFx0ZGV2aWNlX2xvY2soZGV2KTtcXG5kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYzoxNjk3OlxcdGlmIChkZXYtXFx1MDAzZWRyaXZlciB8fCBwY2lfbnVtX3ZmKHBkZXYpKSB7XFxuZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMtMTY5OC1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL3BjaS90c20uYz03OT1zdGF0aWMgdm9pZCBwY2lfdHNtX3dhbGtfZm5zKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmMtOTUtXFx0XFx0Lyogd2FsayB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiBlYWNoIHBmICovXFxuZHJpdmVycy9wY2kvdHNtLmM6OTY6XFx0XFx0Zm9yIChpbnQgaiA9IDA7IGogXFx1MDAzYyBwY2lfbnVtX3ZmKHBmKTsgaisrKSB7XFxuZHJpdmVycy9wY2kvdHNtLmMtOTctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcbi0tXFxuZHJpdmVycy9wY2kvdHNtLmM9MTE4PXN0YXRpYyB2b2lkIHBjaV90c21fd2Fsa19mbnNfcmV2ZXJzZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvcGNpL3RzbS5jLTEzNS1cXHRcXHQvKiByZXZlcnNlIHdhbGsgdmlydHVhbCBmdW5jdGlvbnMgKi9cXG5kcml2ZXJzL3BjaS90c20uYzoxMzY6XFx0XFx0Zm9yIChpbnQgaiA9IHBjaV9udW1fdmYocGYpIC0gMTsgaiBcXHUwMDNlPSAwOyBqLS0pIHtcXG5kcml2ZXJzL3BjaS90c20uYy0xMzctXFx0XFx0XFx0c3RydWN0IHBjaV9kZXYgKnZmIF9fZnJlZShwY2lfZGV2X3B1dCkgPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo0Ny41ODIyNjQ5MzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzNjMyNjUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHBjaV9udW1fdmZgIFZhcmlhYmxlKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBwY2lfbnVtX3ZmYCB2YXJpYWJsZSBpcyBkZWZpbmVkLiBUaGUgaGludCBwb2ludHMgdG8gYGRyaXZlcnMvcGNpL2lvdi5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhhdCBpdCdzIGxpa2VseSByZWxhdGVkIHRvIEkvTyBWaXJ0dWFsaXphdGlvbi4gTm93LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhhdCBzcGVjaWZpYyBmaWxlLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUENJX0lPVmAgaXMgZXZlbiBlbmFibGVkLiBUaGF0IHdvdWxkIGJlIHRoZSBmaXJzdCBwb2ludCB0byBjaGVjay4gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBjb25kaXRpb24gc3Vycm91bmRpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeW1ib2wuXG5cblRvIGRvIHRoYXQsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGUuIE15IGdvLXRvIGxvY2F0aW9uIGlzIGFsd2F5cyBgaW5jbHVkZS9saW51eC9wY2kuaGAuIFRpbWUgdG8gc2VlIGlmIGl0J3MgdGhlcmUgYW5kIHdoYXQncyBjb25uZWN0ZWQgdG8gaXQuIEkgd2FudCB0byBzZWUgaG93IGBwY2lfbnVtX3ZmYCBpcyBhY3R1YWxseSBkZWNsYXJlZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHJlbGF0ZWQgdG8gYENPTkZJR19QQ0lfSU9WYCBvciBhbnl0aGluZyBlbHNlIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzMzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo1MS41MTg1OTM2NDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxODkxNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9udW1fdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9wY2kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3BjaS5oPTI1Njg9dm9pZCBwY2lfaW92X3JlbW92ZV92aXJ0Zm4oc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGlkKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjI1Njk6aW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldik7XFxuaW5jbHVkZS9saW51eC9wY2kuaC0yNTcwLWludCBwY2lfdmZzX2Fzc2lnbmVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2kuaD0yNjE5PXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH1cXG5pbmNsdWRlL2xpbnV4L3BjaS5oOjI2MjA6c3RhdGljIGlubGluZSBpbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9wY2kuaC0yNjIxLXN0YXRpYyBpbmxpbmUgaW50IHBjaV92ZnNfYXNzaWduZWQoc3RydWN0IHBjaV9kZXYgKmRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NTEuNTYwNDkwMTE3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTE0Mzg1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkYgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBpZiBgQ09ORklHX1BDSV9JT1ZgIGlzbid0IGVuYWJsZWQsIGBwY2lfbnVtX3ZmYCB3aWxsIHJldHVybiB6ZXJvLCBhcyBleHBlY3RlZC4gQnV0IGBkZXZfbnVtX3ZmYCBpcyB0aGUgZ2VuZXJpYyBvbmUsIHJpZ2h0PyBJdCBjYWxscyB0aGUgYG51bV92ZmAgZnVuY3Rpb24gZnJvbSB0aGUgZGV2aWNlJ3MgYnVzLiBJbiB0aGUgUENJIGNhc2UsIHRoYXQncyBgcGNpX2J1c19udW1fdmZgLCB3aGljaCB1bHRpbWF0ZWx5IGNhbGxzIGBwY2lfbnVtX3ZmYC4gU28sIGJhY2sgdG8gdGhlIHN0YXJ0aW5nIHBvaW50OiBubyBgQ09ORklHX1BDSV9JT1ZgLCBubyBWRnMgZm9yIFBDSSBkZXZpY2VzLCBhbmQgYGRldl9udW1fdmZgIHJldHVybnMgemVyby4gVGhhdCBtZWFucyBgcnRubF92ZmluZm9fY2FwYCB3aWxsIHJldHVybiB6ZXJvLCBhbmQgYHJ0bmxfZmlsbF92ZmAgd29uJ3QgZG8gYW55dGhpbmcuIEVzc2VudGlhbGx5LCB3ZSAqbmVlZCogYENPTkZJR19QQ0lfSU9WYCB0byBiZSBlbmFibGVkIHRvIGhhdmUgYW55IFZpcnR1YWwgRnVuY3Rpb25zLlxuXG5CdXQgd2FpdCwgd2hhdCBhYm91dCBWaXJ0SU8/IExldCBtZSBjb25zaWRlciBgdmlydGlvX2Rldl9udW1fdmZgLiBJdCBjYWxscyBgZGV2X251bV92ZmAgb24gdGhlIHBhcmVudCBkZXZpY2UuIElmIHRoZSBwYXJlbnQgZGV2aWNlIGlzIGEgUENJIGRldmljZS4uLiB0aGVuIHdlJ3JlIGJhY2sgaW4gdGhlIFBDSSBjb250ZXh0LCBhbmQgaXQgY2FsbHMgYHBjaV9udW1fdmZgLiBTbyBldmVuIHRocm91Z2ggVmlydElPLCBgQ09ORklHX1BDSV9JT1ZgIGlzIHRoZSBrZXkuIEl0IHJlYWxseSBpcyB0aGUgcHJpbWFyeSBjb25maWcgZm9yIHRoZSB3aG9sZSBWRiBlY29zeXN0ZW0uXG5cbk5vdywgbGV0J3MgbG9vayBmb3IgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfTkVUYCBpcyBhbiBvYnZpb3VzIG9uZS4gYENPTkZJR19QQ0lfSU9WYCBpcyBzcGVjaWZpY2FsbHkgbmVlZGVkIGZvciB0ZXN0aW5nIFZGcy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGRyaXZlcnMgdGhhdCBzdXBwb3J0IFNSLUlPViBhbmQgYXJlIHN1cHBvcnRlZCBpbiBRRU1VIHRoYXQgSSBjYW4gdGVzdD8gSSBrbm93IFFFTVUgc3VwcG9ydHMgYGlnYmAsIGBlMTAwMGVgLCBhbmQgYG52bWVgLiBSaWdodCwgYGlnYmAgc3VwcG9ydHMgU1ItSU9WLiBTbywgZG8gSSBuZWVkIGBDT05GSUdfSUdCYD8gU3l6a2FsbGVyIHN1cHBvcnRzIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zIGBuZXRkZXZzaW1gLCBgdmV0aGAsIGFuZCBgZHVtbXlgLiBEb2VzIGFueSBvZiB0aGVtIHN1cHBvcnQgVkZzPyBMZXQgbWUgY2hlY2sgc3BlY2lmaWNhbGx5IHdoZXRoZXIgYG5ldGRldnNpbWAgc3VwcG9ydHMgVkZzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MTo1OC4wMTE5MzA4MTJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMzczMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNyaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTYwPXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBuc2ltX2J1c19kZXZfbnVtdmZzX2F0dHIgPVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzo2MTpcXHRfX0FUVFIoc3Jpb3ZfbnVtdmZzLCAwNjY0LCBuc2ltX2J1c19kZXZfbnVtdmZzX3Nob3csXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTYyLVxcdCAgICAgICBuc2ltX2J1c19kZXZfbnVtdmZzX3N0b3JlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDE6NTguMDUzMzA4MDMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDI4MDQ0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqU1ItSU9WIG9uIE5ldGRldnNpbTogRGlnZ2luZyBJbioqXG5cblJpZ2h0LCBzbyBgbmV0ZGV2c2ltYCBoYXMgdGhhdCBgc3Jpb3ZfbnVtdmZzYCBwYXJhbWV0ZXIsIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCdzIGltcGxlbWVudGVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIGp1bXAgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBiZSBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0aGUgY29yZSBsb2dpYyBmb3IgdGhlIHNpbXVsYXRlZCBidXMgYW5kIGRldmljZSBpbnRlcmFjdGlvbiwgaW5jbHVkaW5nIFNSLUlPViBtYW5hZ2VtZW50LCB0byByZXNpZGUuIEkgYmV0IEknbGwgZmluZCB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBWRiBjcmVhdGlvbi9kZWxldGlvbiBmdW5jdGlvbnMsIGFuZCBob3cgdGhlIFBGIGhhbmRsZXMgaXRzIFZGcy4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdHJhY2UgaG93IHRoaXMgZW11bGF0ZWQgZW52aXJvbm1lbnQgaGFuZGxlcyBTUi1JT1YsIGFzIG9wcG9zZWQgdG8gYSByZWFsIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLiBJIGFudGljaXBhdGUgaXQgbWlnaHQgbm90IGJlIGEgZnVsbCwgb25lLXRvLW9uZSBtYXBwaW5nIHdpdGggaGFyZHdhcmUgU1ItSU9WLCBidXQgSSdtIGVhZ2VyIHRvIGZpbmQgb3V0LiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIHRvIHNlZSB3aGF0IGhvb2tzIHRoZXkgdXNlIGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgb2YgaG93IGl0J3MgaW1wbGVtZW50ZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg3NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjAxLjM5NjExNDczMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMxMjI0OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVtX3ZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTMxPW5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zNC1cXHRzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYgPSB0b19uc2ltX2J1c19kZXYoZGV2KTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6MzU6XFx0dW5zaWduZWQgaW50IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM2LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTM3LVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYzozODpcXHRyZXQgPSBrc3RydG91aW50KGJ1ZiwgMCwgXFx1MDAyNm51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy0zOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0LVxcdGlmIChkZXZfZ2V0X2RydmRhdGEoZGV2KSlcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NDU6XFx0XFx0cmV0ID0gbnNpbV9kcnZfY29uZmlndXJlX3Zmcyhuc2ltX2J1c19kZXYsIG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00Ni1cXHRkZXZpY2VfdW5sb2NrKGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM9NTI9bnNpbV9idXNfZGV2X251bXZmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy01Ni1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmM6NTc6XFx0cmV0dXJuIHNwcmludGYoYnVmLCBcXFwiJXVcXFxcblxcXCIsIG5zaW1fYnVzX2Rldi1cXHUwMDNlbnVtX3Zmcyk7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYz00MjM9c3RhdGljIHZvaWQgbnNpbV9idXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MjktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzMDpzdGF0aWMgaW50IG5zaW1fbnVtX3ZmKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDMxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzMtXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQzNDpcXHRyZXR1cm4gbnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9idXMuYy00MzUtfVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jPTQzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIG5zaW1fYnVzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jLTQ0Mi1cXHQucmVtb3ZlXFx0XFx0PSBuc2ltX2J1c19yZW1vdmUsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2J1cy5jOjQ0MzpcXHQubnVtX3ZmXFx0XFx0PSBuc2ltX251bV92ZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vYnVzLmMtNDQ0LX07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9NjA9dW5zaWduZWQgaW50IG5zaW1fZGV2X2dldF92ZnMoc3RydWN0IG5zaW1fZGV2ICpuc2ltX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy02NC1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6NjU6XFx0cmV0dXJuIG5zaW1fZGV2LVxcdTAwM2Vuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnM7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTY2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz02OD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo2OTpuc2ltX2J1c19kZXZfc2V0X3ZmcyhzdHJ1Y3QgbnNpbV9idXNfZGV2ICpuc2ltX2J1c19kZXYsIHVuc2lnbmVkIGludCBudW1fdmZzKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03MC17XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTcxLVxcdHJ0bmxfbG9jaygpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzo3MjpcXHRuc2ltX2J1c19kZXYtXFx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy03My1cXHRydG5sX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTE4NjE9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxODYyOlxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBudW1fdmZzKVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xODY4LVxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg2OTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzID09IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzAtXFx0XFx0Z290byBleGl0X3VubG9jaztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTg3MTpcXHRpZiAobnNpbV9idXNfZGV2LVxcdTAwM2VudW1fdmZzIFxcdTAwMjZcXHUwMDI2IG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Mi1cXHRcXHRyZXQgPSAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3NC1cXHR9XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4NzU6XFx0aWYgKG5zaW1fYnVzX2Rldi1cXHUwMDNlbWF4X3ZmcyBcXHUwMDNjIG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg3Ni1cXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTE4NzktXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODA6XFx0bnNpbV9idXNfZGV2X3NldF92ZnMobnNpbV9idXNfZGV2LCBudW1fdmZzKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4MS1cXHRpZiAobnNpbV9lc3dfbW9kZV9pc19zd2l0Y2hkZXYobnNpbV9kZXYpKSB7XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjE4ODI6XFx0XFx0aWYgKG51bV92ZnMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTg4My1cXHRcXHRcXHRyZXQgPSBuc2ltX2Vzd19zd2l0Y2hkZXZfZW5hYmxlKG5zaW1fZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaD0zOTk9aW50IG5zaW1fZHJ2X2NvbmZpZ3VyZV92ZnMoc3RydWN0IG5zaW1fYnVzX2RldiAqbnNpbV9idXNfZGV2LFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaDo0MDA6XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00MDEtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg9NDc1PXN0cnVjdCBuc2ltX2J1c19kZXYge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL25ldGRldnNpbS5oLTQ4My1cXHR1bnNpZ25lZCBpbnQgbWF4X3ZmcztcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vbmV0ZGV2c2ltLmg6NDg0OlxcdHVuc2lnbmVkIGludCBudW1fdmZzO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9uZXRkZXZzaW0uaC00ODUtXFx0Ym9vbCBpbml0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjowMS40MzkyNDI3MTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzMDAzMjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIChWRikgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGBuZXRkZXZzaW1gIHN1cHBvcnRzIFZpcnR1YWwgRnVuY3Rpb25zISBUaGF0J3MgZXhjZWxsZW50IG5ld3MuIFRoZSBwcmVzZW5jZSBvZiBgbnNpbV9udW1fdmZgIHJlZ2lzdGVyZWQgd2l0aGluIGBuc2ltX2J1c2AgY29uZmlybXMgaXQuIFRoaXMgbWVhbnMgSSBzaG91bGQgYmUgYWJsZSB0byByZWx5IG9uIGBkZXZfbnVtX3ZmYCBmb3IgbXkgYG5ldGRldnNpbWAgZGV2aWNlcywgd2hpY2ggc2ltcGxpZmllcyB0aGUgdGVzdGluZyBwcm9jZXNzIGNvbnNpZGVyYWJseS4gTGV2ZXJhZ2luZyBgbmV0ZGV2c2ltYCBpcyBhIGNsZWFyIHdpbiBoZXJlLCBzbyBgQ09ORklHX05FVERFVlNJTWAgaXMgZGVmaW5pdGVseSBhIGtleSBjb25maWd1cmF0aW9uIHRvIGZvY3VzIG9uLlxuXG5MZXQgbWUgYWxzbyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1BDSV9JT1ZgIHdvdWxkbid0IGh1cnQgZWl0aGVyLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcyBhbmQgZW5zdXJlIG1heGltdW0gY29tcGF0aWJpbGl0eSwganVzdCBpbiBjYXNlLlxuXG5Ob3csIGxldCdzIHJlLWV4YW1pbmUgdGhpcyBwYXRjaC4gVGhhdCBgcnRubF92ZmluZm9fY2FwYCBmdW5jdGlvbiBsb29rcyBzdHJhaWdodGZvcndhcmQsIGp1c3QgYSBzaW1wbGUgY2FwLiBJdCdzIHVzZWQgd2l0aGluIGBydG5sX3ZmaW5mb19zaXplYCBhbmQgYHJ0bmxfZmlsbF92ZmAuIFdoZW4gdGhpbmtpbmcgYWJvdXQgdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBgcnRubF9maWxsX2lmaW5mb2AgYW5kIGBpZl9ubG1zZ19zaXplYCBhcmUgdGhlIGltcG9ydGFudCBvbmVzLiBIYW5nIG9uLCBpc24ndCBgcnRubF9maWxsX2lmaW5mb2Agc3RhdGljPyBUaGF0IGNvdWxkIGJlIGEgcHJvYmxlbS4gQ2FuIEkgc3RpbGwgYWNjZXNzIHRoZSBWRiBpbmZvcm1hdGlvbiB0aHJvdWdoIGBydG5sX2dldGxpbmtgIGFuZCBgcnRubF9kdW1wX2lmaW5mb2A/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgbGFzdCBvbmUsIGBydG5sX2R1bXBfaWZpbmZvYCwgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDI6MDYuODY5Mjc3OTIxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTkxMjk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG5sX2R1bXBfaWZpbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3J0bmV0bGluay5jPTI1MDA9c3RhdGljIGludCBydG5sX3ZhbGlkX2R1bXBfaWZpbmZvX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDMtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjU0NDpzdGF0aWMgaW50IHJ0bmxfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTI1NDUte1xcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM9NDQ4Mj1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHUzMiBydG5sX2NhbGNpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5MS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NDkyOlxcdC8qIFNhbWUga2VybmVsXFx1MDAzYy1cXHUwMDNldXNlcnNwYWNlIGludGVyZmFjZSBoYWNrIGFzIGluIHJ0bmxfZHVtcF9pZmluZm8uICovXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDQ5My1cXHRoZHJsZW4gPSBubG1zZ19sZW4obmxoKSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSA/XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz03MjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBydG5ldGxpbmtfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyMzktXFx0ey5tc2d0eXBlID0gUlRNX0dFVExJTkssIC5kb2l0ID0gcnRubF9nZXRsaW5rLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjcyNDA6XFx0IC5kdW1waXQgPSBydG5sX2R1bXBfaWZpbmZvLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTcyNDEtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19EVU1QX1NQTElUX05MTV9ET05FIHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTE6NDI6MDYuOTExMTk2NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDUzODA5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzbmlwcGV0cywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzcyBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGl0IG15c2VsZjpcblxuKipBbmFseXppbmcgUlRNX0dFVExJTksgYW5kIFJlbGF0ZWQgTmV0bGluayBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvLCBkaXZpbmcgaW50byB0aGlzIE5ldGxpbmsgc3R1ZmYsIEknbSBwcmV0dHkgc3VyZSBgcnRubF9nZXRsaW5rYCBhbmQgYHJ0bmxfZHVtcF9pZmluZm9gIGFyZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgaGFuZGxpbmcgdGhvc2UgYFJUTV9HRVRMSU5LYCByZXF1ZXN0cy4gVGhhdCdzIG15IGZpcnN0IGdvLXRvLCB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHJldHJpZXZpbmcgaW50ZXJmYWNlIGluZm9ybWF0aW9uLiBBbmQsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgYHJ0bXNnX2lmaW5mb19idWlsZF9za2JgIHNlZW1zIGZhbWlsaWFyIGluIHRoZSBjb250ZXh0IG9mIGBSVE1fTkVXTElOS2Agb3IgYFJUTV9ERUxMSU5LYCBldmVudHMuIEl0IG1ha2VzIHNlbnNlLCBhcyBhIGJ1aWxkZXIgZm9yIHRoZSBTS0IgdGhhdCB3b3VsZCBlbmNhcHN1bGF0ZSB0aGUgaW50ZXJmYWNlIGluZm9ybWF0aW9uLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAuIEknbGwgd2FudCB0byBjaGVjayBob3cgaXQgY3JhZnRzIHRob3NlIG1lc3NhZ2VzLCBwYXJ0aWN1bGFybHkgdGhlIGRhdGEgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcy4gSXQncyB0aGUgY2VudHJhbCBmdW5jdGlvbiBpbnZvbHZlZCBpbiB1cGRhdGluZyBpbnRlcmZhY2Ugc3RhdGVzLCBzbyBpdCdzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkyMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjEwLjcyNTczODUyNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxOTE2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9ydG5ldGxpbmsuYz00NTIyPXN0YXRpYyBpbnQgcnRubF9kdW1wX2FsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTY4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1Njk6c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDU3MC1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZSxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ2MTI9c3RhdGljIHZvaWQgcnRtc2dfaWZpbmZvX2V2ZW50KGludCB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDYyMS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzo0NjIyOlxcdHNrYiA9IHJ0bXNnX2lmaW5mb19idWlsZF9za2IodHlwZSwgZGV2LCBjaGFuZ2UsIGV2ZW50LCBmbGFncywgbmV3X25zaWQsXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNDYyMy1cXHRcXHRcXHRcXHQgICAgIG5ld19pZmluZGV4LCBwb3J0aWQsIG5saCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDExOjQyOjEwLjc2NzkzNzI1M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ2MTYwMzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbi4gSXQgbG9va3MgbGlrZSBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmAgaXMgYSBwcm9taXNpbmcgZnVuY3Rpb24gdG8gc3RhcnQgZGlnZ2luZyBpbnRvLiBBIHF1aWNrIHJldmlldyBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3Q6IHRoZSBzeXN0ZW0gaW5kaWNhdGVzIGl0J3MgYFdvcnRoRnV6emluZ2AsIHdoaWNoIGlzIGdvb2QgbmV3cy4gTXkgZm9jdXMgc3ltYm9scyBhcmUgc2V0IGFzOlxuXG4qICAgYHJ0bmxfZ2V0bGlua2BcbiogICBgcnRubF9kdW1wX2lmaW5mb2BcbiogICBgcnRtc2dfaWZpbmZvX2J1aWxkX3NrYmBcbiogICBgaWZfbmxtc2dfc2l6ZWBcbiogICBgcnRubF9maWxsX2lmaW5mb2BcblxuSGFuZyBvbiBhIHNlY29uZC4uLiBgcnRubF9maWxsX2lmaW5mb2AgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBjb3VsZCBtZWFuIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LCBidXQgaXQncyBub3QgaW5saW5lZCwgYW5kIGl0IHNlZW1zIHRvIGJlIGEgZmFpcmx5IHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGlzIG1hbmFnaW5nIHRvIGlubGluZSBpdCBvciBub3QuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGFzc2VtYmx5IGxvb2tzIGxpa2UgdG8gZW5zdXJlIEkgaGF2ZSB0aGUgcHJvcGVyIHZpZXcgb2YgdGhlIGZ1bmN0aW9uLiBMZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoxNS4xMTQwOTk4NzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDA4MjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvcnRuZXRsaW5rLmM9MjA4OD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9kcGxsX3BpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjEwOS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMTEwOnN0YXRpYyBpbnQgcnRubF9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIxMTEtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXQgKnNyY19uZXQsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yNTQ0PXN0YXRpYyBpbnQgcnRubF9kdW1wX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjE5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjI2MjA6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgbmV0LCBSVE1fTkVXTElOSyxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yNjIxLVxcdFxcdFxcdFxcdCAgICAgICBORVRMSU5LX0NCKGNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQyNzY9c3RhdGljIGludCBydG5sX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzQ4LVxcdGlmIChuc2tiKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQzNDk6XFx0XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhuc2tiLCBkZXYsIG5ldCxcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00MzUwLVxcdFxcdFxcdFxcdCAgICAgICBSVE1fTkVXTElOSywgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTQ1Njk9c3RydWN0IHNrX2J1ZmYgKnJ0bXNnX2lmaW5mb19idWlsZF9za2IoaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy00NTg4LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjQ1ODk6XFx0ZXJyID0gcnRubF9maWxsX2lmaW5mbyhza2IsIGRldiwgZGV2X25ldChkZXYpLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTQ1OTAtXFx0XFx0XFx0ICAgICAgIHR5cGUsIHBvcnRpZCwgc2VxLCBjaGFuZ2UsIDAsIDAsIGV2ZW50LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoxNS4xNTgxMTc4MThaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1MTcxMTEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBydG5sX2ZpbGxfaWZpbmZvYCBpcyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBsb2NhdGlvbnMsIGFuZCBgaWZfbmxtc2dfc2l6ZWAgaXMgbWFya2VkIGBub2lubGluZWAuIFRoYXQgbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBjbG9zZXIgZXhhbWluYXRpb24uIFRoZXkncmUgZ29vZCBmb2N1cyBzeW1ib2xzLlxuXG5Ob3csIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLCBgQ09ORklHX05FVERFVlNJTWAgbG9va3MgbGlrZSBhIGtleSBvbmUuIEkgc2F3IHJlZmVyZW5jZXMgdG8gYG5zaW1fYnVzX2Rldl9udW12ZnNfc3RvcmVgIGFuZCBgbnNpbV9udW1fdmZgIHdoaWNoIGFyZSBzb2xpZCBpbmRpY2F0b3JzIGl0J3Mgc3VmZmljaWVudCBmb3IgdGVzdGluZyB2aXJ0dWFsIGZ1bmN0aW9ucy4gQmV5b25kIHRoYXQsIGBDT05GSUdfTkVUYCBpcyBwcmFjdGljYWxseSBhIGdpdmVuLiBBbmQgb2YgY291cnNlLCBgQ09ORklHX1BDSWAgaXMgZXNzZW50aWFsIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX1BDSV9JT1ZgLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGBydG5sX3ZmaW5mb19jYXBgIGxvZ2ljOlxuXG5gYGBjXG5zdGF0aWMgaW50IHJ0bmxfdmZpbmZvX2NhcChpbnQgbnVtX3ZmcywgdTMyIGV4dF9maWx0ZXJfbWFzaylcbntcblx0cmV0dXJuIG1pbihudW1fdmZzLFxuXHRcdCAgIGV4dF9maWx0ZXJfbWFzayBcdTAwMjYgUlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPyAyNTYgOiAxMjgpO1xufVxuYGBgXG5cblllcCwgc2ltcGxlIGxvZ2ljLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIHNtYWxsLCBidXQgaXQncyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdyBpc3N1ZSB3aGVuIGRldmljZXMgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBWRnMg4oCTIG1vcmUgdGhhbiAxMjggb3IgMjU2LCBkZXBlbmRpbmcgb24gZmlsdGVyaW5nLiBJdCdzIGZ1bmN0aW9uYWwsIGFuZCBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgc29saWQsIHByYWN0aWNhbCBjaGFuZ2UuXG5cblRoZXJlZm9yZSwgaGVyZSdzIG15IHBsYW46XG5cbiogICAqKldvcnRoRnV6emluZyoqOiB0cnVlXG4qICAgKipGb2N1c1N5bWJvbHMqKjogYHJ0bmxfZmlsbF9pZmluZm9gLCBgaWZfbmxtc2dfc2l6ZWAsIGBydG5sX2dldGxpbmtgLCBgcnRubF9kdW1wX2lmaW5mb2AsIGBydG1zZ19pZmluZm9fYnVpbGRfc2tiYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgTkVUREVWU0lNYCwgYFBDSV9JT1ZgXG4qICAgKipSZWFzb25pbmcqKjogVGhpcyBwYXRjaCBtb2RpZmllcyBmdW5kYW1lbnRhbCBydG5ldGxpbmsgbG9naWMgYnkgY2FwcGluZyB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBgSUZMQV9WRklORk9fTElTVGAgdG8gcHJldmVudCBuZXRsaW5rIG1lc3NhZ2Ugb3ZlcmZsb3cuIFRoaXMgZml4IGhhcyB0aGUgcG90ZW50aWFsIGZvciBhIHNtYWxsLCB5ZXQgc2lnbmlmaWNhbnQgbmV0bGluayBtZXNzYWdlIHNpemUgaXNzdWVzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBkZXZpY2VzIHdpdGggVkZzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zIHRvIHZlcmlmeSB0aGUgY2FwIGFuZCBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvd3MuIFRoZSBjb25maWdzIGVuYWJsZSB1cyB0byB0ZXN0IHRoZSBkZXZpY2Ugd2l0aCBWRnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDk2LCJPdXRwdXRUb2tlbnMiOjE4NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMTo0MjoyMy4zMDk4MzI0MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI1MzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUREVWU0lNXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRubF9maWxsX2lmaW5mb1wiLFxuICAgIFwiaWZfbmxtc2dfc2l6ZVwiLFxuICAgIFwicnRubF9nZXRsaW5rXCIsXG4gICAgXCJydG5sX2R1bXBfaWZpbmZvXCIsXG4gICAgXCJydG1zZ19pZmluZm9fYnVpbGRfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcnRuZXRsaW5rIGxvZ2ljIHRvIGNhcCB0aGUgbnVtYmVyIG9mIFZGcyByZXR1cm5lZCBpbiBJRkxBX1ZGSU5GT19MSVNUIHRvIHByZXZlbnQgbmV0bGluayBtZXNzYWdlIG92ZXJmbG93LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgUlRNX0dFVExJTksgcmVxdWVzdHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIG1lc3NhZ2Ugc2l6ZSBjYWxjdWxhdGlvbiBhbmQgZmlsbGluZyBmdW5jdGlvbnMuIENPTkZJR19ORVRERVZTSU0gYW5kIENPTkZJR19QQ0lfSU9WIGFyZSBuZWVkZWQgdG8gdGVzdCBkZXZpY2VzIHdpdGggVkZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVERFVlNJTVwiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bmxfZmlsbF9pZmluZm9cIixcbiAgICBcImlmX25sbXNnX3NpemVcIixcbiAgICBcInJ0bmxfZ2V0bGlua1wiLFxuICAgIFwicnRubF9kdW1wX2lmaW5mb1wiLFxuICAgIFwicnRtc2dfaWZpbmZvX2J1aWxkX3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHJ0bmV0bGluayBsb2dpYyB0byBjYXAgdGhlIG51bWJlciBvZiBWRnMgcmV0dXJuZWQgaW4gSUZMQV9WRklORk9fTElTVCB0byBwcmV2ZW50IG5ldGxpbmsgbWVzc2FnZSBvdmVyZmxvdy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIFJUTV9HRVRMSU5LIHJlcXVlc3RzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBtZXNzYWdlIHNpemUgY2FsY3VsYXRpb24gYW5kIGZpbGxpbmcgZnVuY3Rpb25zLiBDT05GSUdfTkVUREVWU0lNIGFuZCBDT05GSUdfUENJX0lPViBhcmUgbmVlZGVkIHRvIHRlc3QgZGV2aWNlcyB3aXRoIFZGcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[1] Phase: Succeeded StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 2026-08-02 11:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 2026-08-02 11:42:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2] Phase: Running StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 2026-08-02 11:42:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 11:42:35 +0000 UTC FinishedAt: 2026-08-02 11:42:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqq6bx/series-workflowqq6bx-convert-artifact-3204934913/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 11:42:59 +0000 UTC FinishedAt: 2026-08-02 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 11:42:59 +0000 UTC FinishedAt: 2026-08-02 12:08:20 +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:*abfbd70c-ab3d-4a44-a1aa-688e2a7d8123,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-workflowqq6bx/series-workflowqq6bx-convert-artifact-3204934913/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": "3a00fa89-2c3d-41b7-842e-967c5e2cdce4", "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-workflowqq6bx/series-workflowqq6bx-build-action-895404591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 11:42:59 +0000 UTC FinishedAt: 2026-08-02 12:08:10 +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:*abfbd70c-ab3d-4a44-a1aa-688e2a7d8123,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-workflowqq6bx/series-workflowqq6bx-convert-artifact-3204934913/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": "3a00fa89-2c3d-41b7-842e-967c5e2cdce4", "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-workflowqq6bx/series-workflowqq6bx-build-action-895404591/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 12:08:20 +0000 UTC FinishedAt: 2026-08-02 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 12:08:20 +0000 UTC FinishedAt: 2026-08-02 12:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 12:08:20 +0000 UTC FinishedAt: 2026-08-02 12:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 12:08:20 +0000 UTC FinishedAt: 2026-08-02 12:08:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqq6bx/series-workflowqq6bx-convert-artifact-4143257812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 12:08:56 +0000 UTC FinishedAt: 2026-08-02 12:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 12:08:56 +0000 UTC FinishedAt: 2026-08-02 12:10:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a00fa89-2c3d-41b7-842e-967c5e2cdce4,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-workflowqq6bx/series-workflowqq6bx-build-action-895404591/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-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 12:10:55 +0000 UTC FinishedAt: 2026-08-02 12:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 12:10:55 +0000 UTC FinishedAt: 2026-08-02 12:10:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 12:10:55 +0000 UTC FinishedAt: 2026-08-02 12:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 12:10:55 +0000 UTC FinishedAt: 2026-08-02 12:30:57 +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:*abfbd70c-ab3d-4a44-a1aa-688e2a7d8123,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-workflowqq6bx/series-workflowqq6bx-convert-artifact-4143257812/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": "829774e0-1419-4ba0-b57b-648acdb7afdb", "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-workflowqq6bx/series-workflowqq6bx-build-action-3767372960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 12:10:55 +0000 UTC FinishedAt: 2026-08-02 12:30:47 +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:*abfbd70c-ab3d-4a44-a1aa-688e2a7d8123,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-workflowqq6bx/series-workflowqq6bx-convert-artifact-4143257812/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": "829774e0-1419-4ba0-b57b-648acdb7afdb", "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-workflowqq6bx/series-workflowqq6bx-build-action-3767372960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 12:30:57 +0000 UTC FinishedAt: 2026-08-02 12:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 12:30:57 +0000 UTC FinishedAt: 2026-08-02 12:30:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 12:30:57 +0000 UTC FinishedAt: 2026-08-02 12:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 12:30:57 +0000 UTC FinishedAt: 2026-08-02 12:32:50 +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:*829774e0-1419-4ba0-b57b-648acdb7afdb,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-workflowqq6bx/series-workflowqq6bx-build-action-3767372960/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-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"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:*3a00fa89-2c3d-41b7-842e-967c5e2cdce4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*829774e0-1419-4ba0-b57b-648acdb7afdb,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-workflowqq6bx/series-workflowqq6bx-build-action-895404591/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-workflowqq6bx/series-workflowqq6bx-build-action-3767372960/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 2026-08-02 12:33:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 2026-08-02 12:33:03 +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":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"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-workflowqq6bx/series-workflowqq6bx-convert-artifact-3328418557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 2026-08-02 12:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 2026-08-02 12:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 12:32:59 +0000 UTC FinishedAt: 2026-08-02 12:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-08-02 12:33:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqq6bx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtnl_fill_ifinfo","if_nlmsg_size","rtnl_getlink","rtnl_dump_ifinfo","rtmsg_ifinfo_build_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"69963a0678a347d57c4ac8b16939dba216eb95ce","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETDEVSIM","PCI_IOV"],"series_id":"c8271558-bca8-4a20-8fa0-cba86ec9d1fc","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-08-02 12:33:09 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a00fa89-2c3d-41b7-842e-967c5e2cdce4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*829774e0-1419-4ba0-b57b-648acdb7afdb,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-workflowqq6bx/series-workflowqq6bx-build-action-895404591/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-workflowqq6bx/series-workflowqq6bx-build-action-3767372960/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-workflowqq6bx/series-workflowqq6bx-convert-artifact-3328418557/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil