Name: series-workflow2qwcp Phase: Succeeded StartedAt: 2026-07-10 01:22:40 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[0] Phase: Succeeded StartedAt: 2026-07-10 01:22:40 +0000 UTC FinishedAt: 2026-07-10 02:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 01:22:40 +0000 UTC FinishedAt: 2026-07-10 02:09:02 +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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACVLAN" ], "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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACVLAN" ], "series_id": "72476997-558e-41ae-b146-c05346cdd7f6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macvlan_common_newlink", "macvlan_changelink", "macvlan_uninit", "macvlan_port_destroy", "macvlan_fdb_add", "macvlan_fdb_del", "macvlan_port_release_mac" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1ZMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWN2bGFuX2NvbW1vbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3VuaW5pdCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfZGVsJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBNQUNWTEFOIGRldmljZXMsIHNwZWNpZmljYWxseSBhbGxvd2luZyBjb21iaW5hdGlvbnMgb2YgUEFTU1RIUlUgYW5kIFNPVVJDRSBtb2RlcyBvbiB0aGUgc2FtZSBwb3J0LiBUaGlzIGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdmlhIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmNcbmluZGV4IDlhNGJjOTlkYmY1M2I1Li4yNTA1ZjVmMmU5ZDMwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jXG5AQCAtODMsNiAmIzQzOzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYWN2bGFuX3NldF9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VmbGFncyB8PSBNQUNWTEFOX0ZfUEFTU1RIUlU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0cG9ydC1cdTAwM2VmbGFncyBcdTAwMjY9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIG1hY3ZsYW5fYWRkcl9jaGFuZ2UoY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcbiB7XG4gXHRyZXR1cm4gcG9ydC1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GX0FERFJDSEFOR0U7XG5AQCAtNjM3LDcgJiM0Mzs2NDIsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi1cdTAwM2Vsb3dlcmRldjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpKSB7XG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcbiBcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpIHtcbiBcdFx0XHRlcnIgPSBkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAxKTtcbiBcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuQEAgLTcxMiw3ICYjNDM7NzE3LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldl91Y191bnN5bmMobG93ZXJkZXYsIGRldik7XG4gXHRkZXZfbWNfdW5zeW5jKGxvd2VyZGV2LCBkZXYpO1xuIFxuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSkge1xuJiM0MztcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4gXHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0MpKVxuIFx0XHRcdGRldl9zZXRfcHJvbWlzY3VpdHkobG93ZXJkZXYsIC0xKTtcbiBcdFx0Z290byBoYXNoX2RlbDtcbkBAIC03OTIsNiAmIzQzOzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRyZXR1cm4gbWFjdmxhbl9zeW5jX2FkZHJlc3MoZGV2LCBhZGRyLVx1MDAzZV9fZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBtYWN2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcbiYjNDM7XHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuJiM0MztcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4mIzQzO1xuJiM0MztcdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZzcy5fX2RhdGEsIHBvcnQtXHUwMDNlcGVybV9hZGRyLCBwb3J0LVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4mIzQzO1x0XHRkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpXG4ge1xuIFx0c3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbkBAIC05NzcsOCAmIzQzOzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xuIFx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlY291bnQpIHtcbiYjNDM7XHRcdC8qIEluIGNhc2Ugb2YgcmVtYWluaW5nIHNvdXJjZSBpbnRlcmZhY2VzIHVuZG9cbiYjNDM7XHRcdCAqIHBhc3N0aHJ1LXNwZWNpZmljIHByb3BlcnRpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4mIzQzO1x0XHRcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xuJiM0MztcdFx0XHRtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMTA1Miw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0LyogU3VwcG9ydCB1bmljYXN0IGZpbHRlciBvbmx5IG9uIHBhc3N0aHJ1IGRldmljZXMuXG4gXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxuIFx0ICovXG4tXHRpZiAoIW1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdGlmICh2bGFuLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSlcbkBAIC0xMDc3LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbkBAIC0xMzA4LDE3ICYjNDM7MTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0fVxuIFxuLVx0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcbi1cdCAqIG1hY3ZsYW4sIHB1dCBpdCBiYWNrLlxuLVx0ICovXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgcG9ydC1cdTAwM2VwZXJtX2FkZHIpKSB7XG4tXHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xuLVxuLVx0XHRzcy5zc19mYW1pbHkgPSBwb3J0LVx1MDAzZWRldi1cdTAwM2V0eXBlO1xuLVx0XHRtZW1jcHkoXHUwMDI2c3MuX19kYXRhLCBwb3J0LVx1MDAzZXBlcm1fYWRkciwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuLVx0XHRkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4tXHR9XG4mIzQzO1x0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XG4gXG4gXHRrZnJlZShwb3J0KTtcbiB9XG5AQCAtMTUwNiwxNSAmIzQzOzE1MjgsNiBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFx0cG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChsb3dlcmRldik7XG4gXG4tXHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZSAqL1xuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkpIHtcbi1cdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbi1cdFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXG4tXHRcdCAqL1xuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuLVx0fVxuLVxuIFx0dmxhbi1cdTAwM2Vsb3dlcmRldiA9IGxvd2VyZGV2O1xuIFx0dmxhbi1cdTAwM2VkZXYgICAgICA9IGRldjtcbiBcdHZsYW4tXHUwMDNlcG9ydCAgICAgPSBwb3J0O1xuQEAgLTE1MjcsMTAgJiM0MzsxNTQwLDMwIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKVxuIFx0XHR2bGFuLVx1MDAzZWZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcbiBcbiYjNDM7XHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZS4gVGhlcmUgbWF5IGJlXG4mIzQzO1x0ICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZpcnN0IGNoZWNrIGlmIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhbiBleGlzdGluZyBwYXNzdGhydSB2bGFuLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpIFx1MDAyNlx1MDAyNiB2bGFuLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkge1xuJiM0MztcdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbiYjNDM7XHRcdCAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBkZXN0cm95X21hY3ZsYW5fcG9ydDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE5vdyBjaGVjayBpZiBhZGRpbmcgYSBwYXNzdGhydSBkZXZpY2UgdG8gYW4gZXhpc3Rpbmcgc2V0IG9mIHNvdXJjZSBtb2RlXG4mIzQzO1x0ICogZGV2aWNlcy5cbiYjNDM7XHQgKi9cbiBcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4tXHRcdGlmIChwb3J0LVx1MDAzZWNvdW50KSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuJiM0MztcdFx0c3RydWN0IG1hY3ZsYW5fZGV2ICpwO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucywgbGlzdCkge1xuJiM0MztcdFx0XHRpZiAocC1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRtYWN2bGFuX3NldF9wYXNzdGhydShwb3J0KTtcbiBcdFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIGxvd2VyZGV2KTtcbkBAIC0xNTY0LDcgJiM0MzsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFxuLVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZXZsYW5zKTtcbiYjNDM7XHQvKiBtYWN2bGFuX2hhbmRsZV9mcmFtZSBleHBlY3RzIHRoZSAob25lIGFuZCBvbmx5KSBwYXNzdGhydSBkZXZpY2UgZmlyc3QuICovXG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpXG4mIzQzO1x0XHRsaXN0X2FkZF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZXZsYW5zKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNnBvcnQtXHUwMDNldmxhbnMpO1xuIFx0dXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tXHUwMDNlcG9ydCk7XG4gXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShsb3dlcmRldiwgZGV2KTtcbiBcdGxpbmt3YXRjaF9maXJlX2V2ZW50KGRldik7XG5AQCAtMTYyNyw5ICYjNDM7MTY2NCwxMSBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKSB7XG4gXHRcdHNldF9tb2RlID0gdHJ1ZTtcbiBcdFx0bW9kZSA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKTtcbi1cdFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4mIzM5O3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHkgKi9cbi1cdFx0aWYgKChtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgIT1cbi1cdFx0ICAgICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcbiYjNDM7XHRcdC8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJiMzOTt0IGJlIHNldCBvciBjbGVhcmVkIGR5bmFtaWNhbGx5LFxuJiM0MztcdFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxuJiM0MztcdFx0ICogaW50ZXJmYWNlcyBjYW4mIzM5O3Qgc3dpdGNoIG1vZGVzIHdpdGhpbiBhIHBhc3NodHJvdWdoIHBvcnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCkgXHUwMDI2XHUwMDI2IG1vZGUgIT0gdmxhbi1cdTAwM2Vtb2RlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB2bGFuLVx1MDAzZW1vZGUgIT0gbW9kZSlcbkBAIC0xNjM5LDcgJiM0MzsxNjc4LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pIHtcbiBcdFx0X191MTYgZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pO1xuIFx0XHRib29sIHByb21pc2MgPSAoZmxhZ3MgXiB2bGFuLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQztcbi1cdFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgcHJvbWlzYykge1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNWTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjdmxhbl9jb21tb25fbmV3bGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl91bmluaXQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2RlbCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA5YTRiYzk5ZGJmNTNiNS4uMjUwNWY1ZjJlOWQzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTgzLDYgJiM0Mzs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIAlwb3J0LSZndDtmbGFncyB8PSBNQUNWTEFOX0ZfUEFTU1RIUlU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJcG9ydC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIG1hY3ZsYW5fYWRkcl9jaGFuZ2UoY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gcG9ydC0mZ3Q7ZmxhZ3MgJmFtcDsgTUFDVkxBTl9GX0FERFJDSEFOR0U7CkBAIC02MzcsNyAmIzQzOzY0Miw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi0mZ3Q7bG93ZXJkZXY7CiAJaW50IGVycjsKIAotCWlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpKSB7CiYjNDM7CWlmICh2bGFuLSZndDttb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgewogCQlpZiAoISh2bGFuLSZndDtmbGFncyAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSkgewogCQkJZXJyID0gZGV2X3NldF9wcm9taXNjdWl0eShsb3dlcmRldiwgMSk7CiAJCQlpZiAoZXJyICZsdDsgMCkKQEAgLTcxMiw3ICYjNDM7NzE3LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXZfdWNfdW5zeW5jKGxvd2VyZGV2LCBkZXYpOwogCWRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7CiAKLQlpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KSkgewomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHsKIAkJaWYgKCEodmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpCiAJCQlkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAtMSk7CiAJCWdvdG8gaGFzaF9kZWw7CkBAIC03OTIsNiAmIzQzOzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiAJcmV0dXJuIG1hY3ZsYW5fc3luY19hZGRyZXNzKGRldiwgYWRkci0mZ3Q7X19kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChkZXYpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgbG93ZXIgZGV2aWNlIGFkZHJlc3MgaGFzIGJlZW4gY2hhbmdlZCBieSBwYXNzdGhydQomIzQzOwkgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay4KJiM0MzsJICovCiYjNDM7CWlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpICZhbXA7JmFtcDsKJiM0MzsJICAgICFldGhlcl9hZGRyX2VxdWFsKHBvcnQtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIHBvcnQtJmd0O3Blcm1fYWRkcikpIHsKJiM0MzsJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwomIzQzOwomIzQzOwkJc3Muc3NfZmFtaWx5ID0gcG9ydC0mZ3Q7ZGV2LSZndDt0eXBlOwomIzQzOwkJbWVtY3B5KCZhbXA7c3MuX19kYXRhLCBwb3J0LSZndDtwZXJtX2FkZHIsIHBvcnQtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LSZndDtkZXYsICZhbXA7c3MsIE5VTEwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbWFjdmxhbl9jaGFuZ2VfcnhfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5nZSkKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTc3LDggJiM0Mzs5OTksMTggQEAgc3RhdGljIHZvaWQgbWFjdmxhbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCW1hY3ZsYW5fZmx1c2hfc291cmNlcyhwb3J0LCB2bGFuKTsKIAlwb3J0LSZndDtjb3VudCAtPSAxOwotCWlmICghcG9ydC0mZ3Q7Y291bnQpCi0JCW1hY3ZsYW5fcG9ydF9kZXN0cm95KHBvcnQtJmd0O2Rldik7CiYjNDM7CWlmIChwb3J0LSZndDtjb3VudCkgewomIzQzOwkJLyogSW4gY2FzZSBvZiByZW1haW5pbmcgc291cmNlIGludGVyZmFjZXMgdW5kbwomIzQzOwkJICogcGFzc3RocnUtc3BlY2lmaWMgcHJvcGVydGllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7CiYjNDM7CQkJbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7CiYjNDM7CQkJbWFjdmxhbl9jbGVhcl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwltYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LSZndDtkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTA1Miw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCS8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLgogCSAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuCiAJICovCi0JaWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpICZhbXA7JmFtcDsgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgJmFtcDsmYW1wOyBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChmbGFncyAmYW1wOyBOTE1fRl9SRVBMQUNFKQpAQCAtMTA3Nyw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfZGVsKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCS8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLgogCSAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuCiAJICovCi0JaWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpICZhbXA7JmFtcDsgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgJmFtcDsmYW1wOyBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCkBAIC0xMzA4LDE3ICYjNDM7MTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCS8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1Ci0JICogbWFjdmxhbiwgcHV0IGl0IGJhY2suCi0JICovCi0JaWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgJmFtcDsmYW1wOwotCSAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCBwb3J0LSZndDtwZXJtX2FkZHIpKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwotCi0JCXNzLnNzX2ZhbWlseSA9IHBvcnQtJmd0O2Rldi0mZ3Q7dHlwZTsKLQkJbWVtY3B5KCZhbXA7c3MuX19kYXRhLCBwb3J0LSZndDtwZXJtX2FkZHIsIHBvcnQtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwotCQlkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtJmd0O2RldiwgJmFtcDtzcywgTlVMTCk7Ci0JfQomIzQzOwltYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMoZGV2KTsKIAogCWtmcmVlKHBvcnQpOwogfQpAQCAtMTUwNiwxNSAmIzQzOzE1MjgsNiBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAlwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTsKIAotCS8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovCi0JaWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkpIHsKLQkJLyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSwKLQkJICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuCi0JCSAqLwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0OwotCX0KLQogCXZsYW4tJmd0O2xvd2VyZGV2ID0gbG93ZXJkZXY7CiAJdmxhbi0mZ3Q7ZGV2ICAgICAgPSBkZXY7CiAJdmxhbi0mZ3Q7cG9ydCAgICAgPSBwb3J0OwpAQCAtMTUyNywxMCAmIzQzOzE1NDAsMzAgQEAgaW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGF0YSAmYW1wOyZhbXA7IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSkKIAkJdmxhbi0mZ3Q7ZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pOwogCiYjNDM7CS8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlLiBUaGVyZSBtYXkgYmUKJiM0MzsJICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC4KJiM0MzsJICoKJiM0MzsJICogRmlyc3QgY2hlY2sgaWYgYWRkaW5nIGEgc291cmNlIG1vZGUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHBhc3N0aHJ1IHZsYW4uCiYjNDM7CSAqLwomIzQzOwlpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSAmYW1wOyZhbXA7IHZsYW4tJmd0O21vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkgewomIzQzOwkJLyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSwKJiM0MzsJCSAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5LgomIzQzOwkJICovCiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBOb3cgY2hlY2sgaWYgYWRkaW5nIGEgcGFzc3RocnUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHNldCBvZiBzb3VyY2UgbW9kZQomIzQzOwkgKiBkZXZpY2VzLgomIzQzOwkgKi8KIAlpZiAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHsKLQkJaWYgKHBvcnQtJmd0O2NvdW50KSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJCXN0cnVjdCBtYWN2bGFuX2RldiAqcDsKJiM0MzsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmFtcDtwb3J0LSZndDt2bGFucywgbGlzdCkgewomIzQzOwkJCWlmIChwLSZndDttb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJCQl9CiAJCX0KIAkJbWFjdmxhbl9zZXRfcGFzc3RocnUocG9ydCk7CiAJCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBsb3dlcmRldik7CkBAIC0xNTY0LDcgJiM0MzsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGVycikKIAkJZ290byB1bnJlZ2lzdGVyX25ldGRldjsKIAotCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiYjNDM7CS8qIG1hY3ZsYW5faGFuZGxlX2ZyYW1lIGV4cGVjdHMgdGhlIChvbmUgYW5kIG9ubHkpIHBhc3N0aHJ1IGRldmljZSBmaXJzdC4gKi8KJiM0MzsJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKQomIzQzOwkJbGlzdF9hZGRfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiYjNDM7CWVsc2UKJiM0MzsJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiAJdXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tJmd0O3BvcnQpOwogCW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGxvd2VyZGV2LCBkZXYpOwogCWxpbmt3YXRjaF9maXJlX2V2ZW50KGRldik7CkBAIC0xNjI3LDkgJiM0MzsxNjY0LDExIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGRhdGEgJmFtcDsmYW1wOyBkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSkgewogCQlzZXRfbW9kZSA9IHRydWU7CiAJCW1vZGUgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSk7Ci0JCS8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJiMzOTt0IGJlIHNldCBvciBjbGVhcmVkIGR5bmFtaWNhbGx5ICovCi0JCWlmICgobW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpICE9Ci0JCSAgICAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpKQomIzQzOwkJLyogUGFzc3Rocm91Z2ggbW9kZSBjYW4mIzM5O3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHksCiYjNDM7CQkgKiByZWdhcmRsZXNzIG9mIGV4aXN0aW5nIHNvdXJjZSBpbnRlcmZhY2VzLiBGdXJ0aGVybW9yZSwgc291cmNlCiYjNDM7CQkgKiBpbnRlcmZhY2VzIGNhbiYjMzk7dCBzd2l0Y2ggbW9kZXMgd2l0aGluIGEgcGFzc2h0cm91Z2ggcG9ydC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi0mZ3Q7cG9ydCkgJmFtcDsmYW1wOyBtb2RlICE9IHZsYW4tJmd0O21vZGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSAmYW1wOyZhbXA7CiAJCSAgICB2bGFuLSZndDttb2RlICE9IG1vZGUpCkBAIC0xNjM5LDcgJiM0MzsxNjc4LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGF0YSAmYW1wOyZhbXA7IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSkgewogCQlfX3UxNiBmbGFncyA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSk7CiAJCWJvb2wgcHJvbWlzYyA9IChmbGFncyBeIHZsYW4tJmd0O2ZsYWdzKSAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDOwotCQlpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KSAmYW1wOyZhbXA7IHByb21pc2MpIHsKJiM0MzsJCWlmICh2bGFuLSZndDttb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSAmYW1wOyZhbXA7IHByb21pc2MpIHsKIAkJCWludCBlcnI7CiAKIAkJCWlmIChmbGFncyAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKk1BQ1ZMQU4gUGF0Y2ggRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvbWFjdmxhbi5jYC4gSXQmIzM5O3MgY2xlYXJseSB0b3VjaGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIE1BQ1ZMQU4sIGFuZCBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gYmUgcmVsYXhpbmcgc29tZSByZXN0cmljdGlvbnMgYXJvdW5kIGhvdyBgTUFDVkxBTl9NT0RFX1BBU1NUSFJVYCBhbmQgYE1BQ1ZMQU5fTU9ERV9TT1VSQ0VgIGRldmljZXMgY2FuIGludGVyYWN0LiBUaGlzIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGlnaHQgY29udHJvbCBvdmVyIHRoZXNlIG1vZGVzIGlzIHVzdWFsbHkgY3J1Y2lhbCBmb3IgbmV0d29yayBzZWN1cml0eSBhbmQgaXNvbGF0aW9uLiBUaGUgYWJpbGl0eSB0byBtaXggYW5kIG1hdGNoIHRoZW0sIGkuZS4sIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhIHBhc3N0aHJ1IFZMQU4gb3IgdGhlIG90aGVyIHdheSBhcm91bmQsIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBhcyBpdCBjb3VsZCBoYXZlIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBpbXBsZW1lbnRlZCBwb29ybHkuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGJyb2FkIHNldCBvZiBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWFjdmxhbiBjb2RlOiBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGBtYWN2bGFuX2NoYW5nZWxpbmtgLCBgbWFjdmxhbl9vcGVuYCwgYG1hY3ZsYW5fc3RvcGAsIGFuZCBldmVuIHRoZSBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMgYG1hY3ZsYW5fZmRiX2FkZGAgYW5kIGBtYWN2bGFuX2ZkYl9kZWxgLiBUaGUgZXh0ZW50IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlIGJlaGF2aW9yIGNoYW5nZXMgYXJlIGZ1bmRhbWVudGFsIGFuZCBsaWtlbHkgaW52b2x2ZSBhIHNpZ25pZmljYW50IHJld29yayBvZiB0aGUgdW5kZXJseWluZyBsb2dpYywgcmF0aGVyIHRoYW4gYSBzaW1wbGUgZmVhdHVyZSBhZGRpdGlvbi4KCkJlZm9yZSBJIGRlbHZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IE1BQ1ZMQU4gaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19NQUNWTEFOYCB0byBjb25maXJtIGl0JiMzOTtzIGFjdHVhbGx5IHJlbGV2YW50IHRvIHRoZSBzeXN0ZW0uIFRoaXMgY2hlY2sgaXMgcm91dGluZSBmb3IgbWUsIGJ1dCBpdCYjMzk7cyBhIGdvb2Qgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJJiMzOTttIG5vdCB3YXN0aW5nIHRpbWUgb24gY29kZSB0aGF0JiMzOTtzIG5vdCBldmVuIGNvbXBpbGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNWTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTYzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctMTY0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNjU6Y29uZmlnIE1BQ1ZMQU5cbmRyaXZlcnMvbmV0L0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7TUFDLVZMQU4gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTEKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1BQ1ZMQU4gRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBNQUNWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZSBjb25maWcgaXMgZGVmaW5pdGVseSBgTUFDVkxBTmAsIGFuZCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWwsIGFsdGVyaW5nIGhvdyBNQUNWTEFOIGRldmljZXMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayksIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgY3JpdGljYWwgYXJlYXMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgdGhlIGZvY3VzIHBvaW50czogYG1hY3ZsYW5fc2V0X3Bhc3N0aHJ1YCwgYG1hY3ZsYW5fY2xlYXJfcGFzc3RocnVgLCBgbWFjdmxhbl9vcGVuYCwgYG1hY3ZsYW5fc3RvcGAsIGBtYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWNgIChuZXcpLCBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9mZGJfYWRkYCwgYG1hY3ZsYW5fZmRiX2RlbGAsIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIGBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rYCwgYW5kIGBtYWN2bGFuX2NoYW5nZWxpbmtgLgoKTmFycm93aW5nIGl0IGRvd24sIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AsIGBtYWN2bGFuX2ZkYl9hZGRgLCBgbWFjdmxhbl9mZGJfZGVsYCwgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAuIEkgaGFkIHRvIGNvbmZpcm0gYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2Agd2FzIHN0YXRpYy4gQW5kIGl0IGlzLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWN2bGFuX3VuaW5pdGAgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIHNvIGl0JiMzOTtzIHN0aWxsIHJlbGV2YW50LgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCB0aGUgb25seSBjb25maWcgbmVlZGVkIGlzIGBNQUNWTEFOYCwgd2hpY2ggZGVwZW5kcyBvbiBgTkVUYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBsb2dpYy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nIHZpYSBydG5ldGxpbmssIHNvIEkmIzM5O20gZGVlbWluZyBpdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBNeSBmaW5hbCBmb2N1cyBzeW1ib2xzIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9kZXN0cm95YCwgYG1hY3ZsYW5fZmRiX2FkZGAsIGBtYWN2bGFuX2ZkYl9kZWxgLCBhbmQgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AuIFdpdGggYE1BQ1ZMQU5gIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDVkxBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3ZsYW5fY29tbW9uX25ld2xpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fdW5pbml0JiMzNDssCiAgICAmIzM0O21hY3ZsYW5fcG9ydF9kZXN0cm95JiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2FkZCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2ZkYl9kZWwmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNWTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjdmxhbl9jb21tb25fbmV3bGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl91bmluaXQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2RlbCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS4yMzgyNjAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTM3OTcwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1ZMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWN2bGFuX2NvbW1vbl9uZXdsaW5rXCIsXG4gICAgXCJtYWN2bGFuX2NoYW5nZWxpbmtcIixcbiAgICBcIm1hY3ZsYW5fdW5pbml0XCIsXG4gICAgXCJtYWN2bGFuX3BvcnRfZGVzdHJveVwiLFxuICAgIFwibWFjdmxhbl9mZGJfYWRkXCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9kZWxcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS4yMzgyNjg3NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDI3MzcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDI6MDc6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jXFxuaW5kZXggOWE0YmM5OWRiZjUzYjUuLjI1MDVmNWYyZTlkMzBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xcbkBAIC04Myw2ICs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZmxhZ3MgfD0gTUFDVkxBTl9GX1BBU1NUSFJVO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHBvcnQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYWN2bGFuX2FkZHJfY2hhbmdlKGNvbnN0IHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQpXFxuIHtcXG4gXFx0cmV0dXJuIHBvcnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUFDVkxBTl9GX0FERFJDSEFOR0U7XFxuQEAgLTYzNyw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLVxcdTAwM2Vsb3dlcmRldjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpKSB7XFxuK1xcdGlmICh2bGFuLVxcdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xcbiBcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IGRldl9zZXRfcHJvbWlzY3VpdHkobG93ZXJkZXYsIDEpO1xcbiBcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5AQCAtNzEyLDcgKzcxNyw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldl91Y191bnN5bmMobG93ZXJkZXYsIGRldik7XFxuIFxcdGRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7XFxuIFxcbi1cXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVxcdTAwM2Vwb3J0KSkge1xcbitcXHRpZiAodmxhbi1cXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcXG4gXFx0XFx0aWYgKCEodmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSlcXG4gXFx0XFx0XFx0ZGV2X3NldF9wcm9taXNjdWl0eShsb3dlcmRldiwgLTEpO1xcbiBcXHRcXHRnb3RvIGhhc2hfZGVsO1xcbkBAIC03OTIsNiArNzk3LDIzIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4gXFx0cmV0dXJuIG1hY3ZsYW5fc3luY19hZGRyZXNzKGRldiwgYWRkci1cXHUwMDNlX19kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xcbitcXG4rXFx0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcXG4rXFx0ICogbWFjdmxhbiwgcHV0IGl0IGJhY2suXFxuK1xcdCAqL1xcbitcXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgcG9ydC1cXHUwMDNlcGVybV9hZGRyKSkge1xcbitcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcXG4rXFxuK1xcdFxcdHNzLnNzX2ZhbWlseSA9IHBvcnQtXFx1MDAzZWRldi1cXHUwMDNldHlwZTtcXG4rXFx0XFx0bWVtY3B5KFxcdTAwMjZzcy5fX2RhdGEsIHBvcnQtXFx1MDAzZXBlcm1fYWRkciwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxuK1xcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3MocG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpXFxuIHtcXG4gXFx0c3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5AQCAtOTc3LDggKzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xcbiBcXHRwb3J0LVxcdTAwM2Vjb3VudCAtPSAxO1xcbi1cXHRpZiAoIXBvcnQtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocG9ydC1cXHUwMDNlY291bnQpIHtcXG4rXFx0XFx0LyogSW4gY2FzZSBvZiByZW1haW5pbmcgc291cmNlIGludGVyZmFjZXMgdW5kb1xcbitcXHRcXHQgKiBwYXNzdGhydS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XFxuK1xcdFxcdFxcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xcbitcXHRcXHRcXHRtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bWFjdmxhbl9wb3J0X2Rlc3Ryb3kocG9ydC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWFjdmxhbl9kZXZfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMTA1Miw3ICsxMDg0LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdC8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLlxcbiBcXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4rXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkxNX0ZfUkVQTEFDRSlcXG5AQCAtMTA3Nyw3ICsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdC8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLlxcbiBcXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4rXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG5AQCAtMTMwOCwxNyArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBJZiB0aGUgbG93ZXIgZGV2aWNlIGFkZHJlc3MgaGFzIGJlZW4gY2hhbmdlZCBieSBwYXNzdGhydVxcbi1cXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cXG4tXFx0ICovXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBwb3J0LVxcdTAwM2VwZXJtX2FkZHIpKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbi1cXG4tXFx0XFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlO1xcbi1cXHRcXHRtZW1jcHkoXFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cXHUwMDNlcGVybV9hZGRyLCBwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4tXFx0XFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVxcdTAwM2VkZXYsIFxcdTAwMjZzcywgTlVMTCk7XFxuLVxcdH1cXG4rXFx0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XFxuIFxcbiBcXHRrZnJlZShwb3J0KTtcXG4gfVxcbkBAIC0xNTA2LDE1ICsxNTI4LDYgQEAgaW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXHRwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTtcXG4gXFxuLVxcdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpKSB7XFxuLVxcdFxcdC8qIFRoZSBtYWN2bGFuIHBvcnQgbXVzdCBiZSBub3QgY3JlYXRlZCB0aGlzIHRpbWUsXFxuLVxcdFxcdCAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBkZXN0cm95X21hY3ZsYW5fcG9ydDtcXG4tXFx0fVxcbi1cXG4gXFx0dmxhbi1cXHUwMDNlbG93ZXJkZXYgPSBsb3dlcmRldjtcXG4gXFx0dmxhbi1cXHUwMDNlZGV2ICAgICAgPSBkZXY7XFxuIFxcdHZsYW4tXFx1MDAzZXBvcnQgICAgID0gcG9ydDtcXG5AQCAtMTUyNywxMCArMTU0MCwzMCBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pXFxuIFxcdFxcdHZsYW4tXFx1MDAzZWZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcXG4gXFxuK1xcdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlLiBUaGVyZSBtYXkgYmVcXG4rXFx0ICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC5cXG4rXFx0ICpcXG4rXFx0ICogRmlyc3QgY2hlY2sgaWYgYWRkaW5nIGEgc291cmNlIG1vZGUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHBhc3N0aHJ1IHZsYW4uXFxuK1xcdCAqL1xcbitcXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcXHUwMDI2XFx1MDAyNiB2bGFuLVxcdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcXG4rXFx0XFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcXG4rXFx0XFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBOb3cgY2hlY2sgaWYgYWRkaW5nIGEgcGFzc3RocnUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHNldCBvZiBzb3VyY2UgbW9kZVxcbitcXHQgKiBkZXZpY2VzLlxcbitcXHQgKi9cXG4gXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XFxuLVxcdFxcdGlmIChwb3J0LVxcdTAwM2Vjb3VudCkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xcbitcXHRcXHRzdHJ1Y3QgbWFjdmxhbl9kZXYgKnA7XFxuK1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFxcdTAwMjZwb3J0LVxcdTAwM2V2bGFucywgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlbW9kZSAhPSBNQUNWTEFOX01PREVfU09VUkNFKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRtYWN2bGFuX3NldF9wYXNzdGhydShwb3J0KTtcXG4gXFx0XFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIGxvd2VyZGV2KTtcXG5AQCAtMTU2NCw3ICsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XFxuIFxcbi1cXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4rXFx0LyogbWFjdmxhbl9oYW5kbGVfZnJhbWUgZXhwZWN0cyB0aGUgKG9uZSBhbmQgb25seSkgcGFzc3RocnUgZGV2aWNlIGZpcnN0LiAqL1xcbitcXHRpZiAodmxhbi1cXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpXFxuK1xcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4gXFx0dXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tXFx1MDAzZXBvcnQpO1xcbiBcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShsb3dlcmRldiwgZGV2KTtcXG4gXFx0bGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTtcXG5AQCAtMTYyNyw5ICsxNjY0LDExIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKSB7XFxuIFxcdFxcdHNldF9tb2RlID0gdHJ1ZTtcXG4gXFx0XFx0bW9kZSA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKTtcXG4tXFx0XFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSAqL1xcbi1cXHRcXHRpZiAoKG1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSAhPVxcbi1cXHRcXHQgICAgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcXG4rXFx0XFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSxcXG4rXFx0XFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxcbitcXHRcXHQgKiBpbnRlcmZhY2VzIGNhbid0IHN3aXRjaCBtb2RlcyB3aXRoaW4gYSBwYXNzaHRyb3VnaCBwb3J0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cXHUwMDNlcG9ydCkgXFx1MDAyNlxcdTAwMjYgbW9kZSAhPSB2bGFuLVxcdTAwM2Vtb2RlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdmxhbi1cXHUwMDNlbW9kZSAhPSBtb2RlKVxcbkBAIC0xNjM5LDcgKzE2NzgsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pIHtcXG4gXFx0XFx0X191MTYgZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pO1xcbiBcXHRcXHRib29sIHByb21pc2MgPSAoZmxhZ3MgXiB2bGFuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDO1xcbi1cXHRcXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVxcdTAwM2Vwb3J0KSBcXHUwMDI2XFx1MDAyNiBwcm9taXNjKSB7XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcXHUwMDI2XFx1MDAyNiBwcm9taXNjKSB7XFxuIFxcdFxcdFxcdGludCBlcnI7XFxuIFxcbiBcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS45MDkyNjk4MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjY2OTQ3Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1ZMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWN2bGFuX2NvbW1vbl9uZXdsaW5rXCIsXG4gICAgXCJtYWN2bGFuX2NoYW5nZWxpbmtcIixcbiAgICBcIm1hY3ZsYW5fdW5pbml0XCIsXG4gICAgXCJtYWN2bGFuX3BvcnRfZGVzdHJveVwiLFxuICAgIFwibWFjdmxhbl9mZGJfYWRkXCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9kZWxcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xuaW5kZXggOWE0YmM5OWRiZjUzYjUuLjI1MDVmNWYyZTlkMzBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jXG4rKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmNcbkBAIC04Myw2ICs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZmxhZ3MgfD0gTUFDVkxBTl9GX1BBU1NUSFJVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuK3tcbitcdHBvcnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TUFDVkxBTl9GX1BBU1NUSFJVO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFjdmxhbl9hZGRyX2NoYW5nZShjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuIHtcbiBcdHJldHVybiBwb3J0LVx1MDAzZWZsYWdzIFx1MDAyNiBNQUNWTEFOX0ZfQUREUkNIQU5HRTtcbkBAIC02MzcsNyArNjQyLDcgQEAgc3RhdGljIGludCBtYWN2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcmRldiA9IHZsYW4tXHUwMDNlbG93ZXJkZXY7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSkge1xuK1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcbiBcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpIHtcbiBcdFx0XHRlcnIgPSBkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAxKTtcbiBcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuQEAgLTcxMiw3ICs3MTcsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2X3VjX3Vuc3luYyhsb3dlcmRldiwgZGV2KTtcbiBcdGRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7XG4gXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpKSB7XG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xuIFx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSlcbiBcdFx0XHRkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAtMSk7XG4gXHRcdGdvdG8gaGFzaF9kZWw7XG5AQCAtNzkyLDYgKzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRyZXR1cm4gbWFjdmxhbl9zeW5jX2FkZHJlc3MoZGV2LCBhZGRyLVx1MDAzZV9fZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBtYWN2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbitcbitcdC8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1XG4rXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbitcdCAqL1xuK1x0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuK1x0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbitcbitcdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbitcdFx0bWVtY3B5KFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cdTAwM2VwZXJtX2FkZHIsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2c3MsIE5VTEwpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBtYWN2bGFuX2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2hhbmdlKVxuIHtcbiBcdHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtOTc3LDggKzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xuIFx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4rXHRpZiAocG9ydC1cdTAwM2Vjb3VudCkge1xuK1x0XHQvKiBJbiBjYXNlIG9mIHJlbWFpbmluZyBzb3VyY2UgaW50ZXJmYWNlcyB1bmRvXG4rXHRcdCAqIHBhc3N0aHJ1LXNwZWNpZmljIHByb3BlcnRpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xuK1x0XHRcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xuK1x0XHRcdG1hY3ZsYW5fY2xlYXJfcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMTA1Miw3ICsxMDg0LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE5MTV9GX1JFUExBQ0UpXG5AQCAtMTA3Nyw3ICsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuQEAgLTEzMDgsMTcgKzEzNDAsNyBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdH1cbiBcbi1cdC8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1XG4tXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbi1cdCAqL1xuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuLVx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbi1cbi1cdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbi1cdFx0bWVtY3B5KFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cdTAwM2VwZXJtX2FkZHIsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbi1cdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2c3MsIE5VTEwpO1xuLVx0fVxuK1x0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XG4gXG4gXHRrZnJlZShwb3J0KTtcbiB9XG5AQCAtMTUwNiwxNSArMTUyOCw2IEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXHRwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTtcbiBcbi1cdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSkge1xuLVx0XHQvKiBUaGUgbWFjdmxhbiBwb3J0IG11c3QgYmUgbm90IGNyZWF0ZWQgdGhpcyB0aW1lLFxuLVx0XHQgKiBzdGlsbCBnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0IGZvciByZWFkYWJpbGl0eS5cbi1cdFx0ICovXG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4tXHR9XG4tXG4gXHR2bGFuLVx1MDAzZWxvd2VyZGV2ID0gbG93ZXJkZXY7XG4gXHR2bGFuLVx1MDAzZWRldiAgICAgID0gZGV2O1xuIFx0dmxhbi1cdTAwM2Vwb3J0ICAgICA9IHBvcnQ7XG5AQCAtMTUyNywxMCArMTU0MCwzMCBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSlcbiBcdFx0dmxhbi1cdTAwM2VmbGFncyA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSk7XG4gXG4rXHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZS4gVGhlcmUgbWF5IGJlXG4rXHQgKiBhZGRpdGlvbmFsIHNvdXJjZSBtb2RlIGRldmljZXMgYnV0IG5vdGhpbmcgZWxzZSBhdCB0aGUgbW9tZW50LlxuK1x0ICpcbitcdCAqIEZpcnN0IGNoZWNrIGlmIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhbiBleGlzdGluZyBwYXNzdGhydSB2bGFuLlxuK1x0ICovXG4rXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcbitcdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbitcdFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuK1x0fVxuK1xuK1x0LyogTm93IGNoZWNrIGlmIGFkZGluZyBhIHBhc3N0aHJ1IGRldmljZSB0byBhbiBleGlzdGluZyBzZXQgb2Ygc291cmNlIG1vZGVcbitcdCAqIGRldmljZXMuXG4rXHQgKi9cbiBcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4tXHRcdGlmIChwb3J0LVx1MDAzZWNvdW50KSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuK1x0XHRzdHJ1Y3QgbWFjdmxhbl9kZXYgKnA7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucywgbGlzdCkge1xuK1x0XHRcdGlmIChwLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHRcdG1hY3ZsYW5fc2V0X3Bhc3N0aHJ1KHBvcnQpO1xuIFx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgbG93ZXJkZXYpO1xuQEAgLTE1NjQsNyArMTU5NywxMSBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiBcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4rXHQvKiBtYWN2bGFuX2hhbmRsZV9mcmFtZSBleHBlY3RzIHRoZSAob25lIGFuZCBvbmx5KSBwYXNzdGhydSBkZXZpY2UgZmlyc3QuICovXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSlcbitcdFx0bGlzdF9hZGRfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4rXHRlbHNlXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4gXHR1cGRhdGVfcG9ydF9iY19xdWV1ZV9sZW4odmxhbi1cdTAwM2Vwb3J0KTtcbiBcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGxvd2VyZGV2LCBkZXYpO1xuIFx0bGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTtcbkBAIC0xNjI3LDkgKzE2NjQsMTEgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSkge1xuIFx0XHRzZXRfbW9kZSA9IHRydWU7XG4gXHRcdG1vZGUgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSk7XG4tXHRcdC8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJ3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHkgKi9cbi1cdFx0aWYgKChtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgIT1cbi1cdFx0ICAgICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcbitcdFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSxcbitcdFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxuK1x0XHQgKiBpbnRlcmZhY2VzIGNhbid0IHN3aXRjaCBtb2RlcyB3aXRoaW4gYSBwYXNzaHRyb3VnaCBwb3J0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgbW9kZSAhPSB2bGFuLVx1MDAzZW1vZGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHZsYW4tXHUwMDNlbW9kZSAhPSBtb2RlKVxuQEAgLTE2MzksNyArMTY3OCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKSB7XG4gXHRcdF9fdTE2IGZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcbiBcdFx0Ym9vbCBwcm9taXNjID0gKGZsYWdzIF4gdmxhbi1cdTAwM2VmbGFncykgXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0M7XG4tXHRcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCkgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbitcdFx0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjE1LjkwOTI3MTE5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Njg2OTEwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKk1BQ1ZMQU4gUGF0Y2ggRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L21hY3ZsYW4uY2AuIEl0J3MgY2xlYXJseSB0b3VjaGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIE1BQ1ZMQU4sIGFuZCBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gYmUgcmVsYXhpbmcgc29tZSByZXN0cmljdGlvbnMgYXJvdW5kIGhvdyBgTUFDVkxBTl9NT0RFX1BBU1NUSFJVYCBhbmQgYE1BQ1ZMQU5fTU9ERV9TT1VSQ0VgIGRldmljZXMgY2FuIGludGVyYWN0LiBUaGlzIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGlnaHQgY29udHJvbCBvdmVyIHRoZXNlIG1vZGVzIGlzIHVzdWFsbHkgY3J1Y2lhbCBmb3IgbmV0d29yayBzZWN1cml0eSBhbmQgaXNvbGF0aW9uLiBUaGUgYWJpbGl0eSB0byBtaXggYW5kIG1hdGNoIHRoZW0sIGkuZS4sIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhIHBhc3N0aHJ1IFZMQU4gb3IgdGhlIG90aGVyIHdheSBhcm91bmQsIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBhcyBpdCBjb3VsZCBoYXZlIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBpbXBsZW1lbnRlZCBwb29ybHkuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnJvYWQgc2V0IG9mIGtleSBmdW5jdGlvbnMgd2l0aGluIHRoZSBtYWN2bGFuIGNvZGU6IGBtYWN2bGFuX3VuaW5pdGAsIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIGBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rYCwgYG1hY3ZsYW5fY2hhbmdlbGlua2AsIGBtYWN2bGFuX29wZW5gLCBgbWFjdmxhbl9zdG9wYCwgYW5kIGV2ZW4gdGhlIEZEQiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBgbWFjdmxhbl9mZGJfYWRkYCBhbmQgYG1hY3ZsYW5fZmRiX2RlbGAuIFRoZSBleHRlbnQgb2YgdGhpcyBtb2RpZmljYXRpb24gc3VnZ2VzdHMgdGhhdCB0aGUgYmVoYXZpb3IgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgYW5kIGxpa2VseSBpbnZvbHZlIGEgc2lnbmlmaWNhbnQgcmV3b3JrIG9mIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCByYXRoZXIgdGhhbiBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uLlxuXG5CZWZvcmUgSSBkZWx2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IE1BQ1ZMQU4gaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgQ09ORklHX01BQ1ZMQU5gIHRvIGNvbmZpcm0gaXQncyBhY3R1YWxseSByZWxldmFudCB0byB0aGUgc3lzdGVtLiBUaGlzIGNoZWNrIGlzIHJvdXRpbmUgZm9yIG1lLCBidXQgaXQncyBhIGdvb2Qgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJJ20gbm90IHdhc3RpbmcgdGltZSBvbiBjb2RlIHRoYXQncyBub3QgZXZlbiBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjIwLjc3Nzk2NTE5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMzk4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ1ZMQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTYzPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTY0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTY1OmNvbmZpZyBNQUNWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIk1BQy1WTEFOIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjIxLjQwMjAxNDM5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjA2MTY5MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1BQ1ZMQU4gRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gTUFDVkxBTiBjb25maWd1cmF0aW9uLiBUaGUgY29uZmlnIGlzIGRlZmluaXRlbHkgYE1BQ1ZMQU5gLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgY29kZSBpcyBmdW5jdGlvbmFsLCBhbHRlcmluZyBob3cgTUFDVkxBTiBkZXZpY2VzIGFyZSBlc3RhYmxpc2hlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzLiBJdCdzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayksIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZy4gSSd2ZSBwaW5wb2ludGVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzIHRoZSBmb2N1cyBwb2ludHM6IGBtYWN2bGFuX3NldF9wYXNzdGhydWAsIGBtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1YCwgYG1hY3ZsYW5fb3BlbmAsIGBtYWN2bGFuX3N0b3BgLCBgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjYCAobmV3KSwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fZmRiX2FkZGAsIGBtYWN2bGFuX2ZkYl9kZWxgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGFuZCBgbWFjdmxhbl9jaGFuZ2VsaW5rYC5cblxuTmFycm93aW5nIGl0IGRvd24sIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AsIGBtYWN2bGFuX2ZkYl9hZGRgLCBgbWFjdmxhbl9mZGJfZGVsYCwgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAuIEkgaGFkIHRvIGNvbmZpcm0gYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2Agd2FzIHN0YXRpYy4gQW5kIGl0IGlzLCBidXQgaXQncyBjYWxsZWQgYnkgYG1hY3ZsYW5fdW5pbml0YCBhbmQgYG1hY3ZsYW5fcG9ydF9kZXN0cm95YCwgc28gaXQncyBzdGlsbCByZWxldmFudC5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYE1BQ1ZMQU5gLCB3aGljaCBkZXBlbmRzIG9uIGBORVRgLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nIHZpYSBydG5ldGxpbmssIHNvIEknbSBkZWVtaW5nIGl0IFwiV29ydGhGdXp6aW5nXCIuIE15IGZpbmFsIGZvY3VzIHN5bWJvbHMgYXJlOiBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGBtYWN2bGFuX2NoYW5nZWxpbmtgLCBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9mZGJfYWRkYCwgYG1hY3ZsYW5fZmRiX2RlbGAsIGFuZCBgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjYC4gV2l0aCBgTUFDVkxBTmAgZW5hYmxlZC4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjExLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzo0My4wMDgxODU5MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODAyNDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDVkxBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3ZsYW5fY29tbW9uX25ld2xpbmtcIixcbiAgICBcIm1hY3ZsYW5fY2hhbmdlbGlua1wiLFxuICAgIFwibWFjdmxhbl91bmluaXRcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9kZXN0cm95XCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9hZGRcIixcbiAgICBcIm1hY3ZsYW5fZmRiX2RlbFwiLFxuICAgIFwibWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDVkxBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3ZsYW5fY29tbW9uX25ld2xpbmtcIixcbiAgICBcIm1hY3ZsYW5fY2hhbmdlbGlua1wiLFxuICAgIFwibWFjdmxhbl91bmluaXRcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9kZXN0cm95XCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9hZGRcIixcbiAgICBcIm1hY3ZsYW5fZmRiX2RlbFwiLFxuICAgIFwibWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 01:22:40 +0000 UTC FinishedAt: 2026-07-10 02:07:44 +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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACVLAN" ], "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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACVLAN" ], "series_id": "72476997-558e-41ae-b146-c05346cdd7f6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macvlan_common_newlink", "macvlan_changelink", "macvlan_uninit", "macvlan_port_destroy", "macvlan_fdb_add", "macvlan_fdb_del", "macvlan_port_release_mac" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ1ZMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWN2bGFuX2NvbW1vbl9uZXdsaW5rJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3VuaW5pdCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfZGVzdHJveSYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfZGVsJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBNQUNWTEFOIGRldmljZXMsIHNwZWNpZmljYWxseSBhbGxvd2luZyBjb21iaW5hdGlvbnMgb2YgUEFTU1RIUlUgYW5kIFNPVVJDRSBtb2RlcyBvbiB0aGUgc2FtZSBwb3J0LiBUaGlzIGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBpbml0aWFsaXphdGlvbi90ZWFyZG93biBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdmlhIHJ0bmV0bGluay4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmNcbmluZGV4IDlhNGJjOTlkYmY1M2I1Li4yNTA1ZjVmMmU5ZDMwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jXG5AQCAtODMsNiAmIzQzOzgzLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYWN2bGFuX3NldF9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuIFx0cG9ydC1cdTAwM2VmbGFncyB8PSBNQUNWTEFOX0ZfUEFTU1RIUlU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0cG9ydC1cdTAwM2VmbGFncyBcdTAwMjY9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIG1hY3ZsYW5fYWRkcl9jaGFuZ2UoY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcbiB7XG4gXHRyZXR1cm4gcG9ydC1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GX0FERFJDSEFOR0U7XG5AQCAtNjM3LDcgJiM0Mzs2NDIsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi1cdTAwM2Vsb3dlcmRldjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpKSB7XG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcbiBcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpIHtcbiBcdFx0XHRlcnIgPSBkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAxKTtcbiBcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuQEAgLTcxMiw3ICYjNDM7NzE3LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldl91Y191bnN5bmMobG93ZXJkZXYsIGRldik7XG4gXHRkZXZfbWNfdW5zeW5jKGxvd2VyZGV2LCBkZXYpO1xuIFxuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSkge1xuJiM0MztcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4gXHRcdGlmICghKHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0MpKVxuIFx0XHRcdGRldl9zZXRfcHJvbWlzY3VpdHkobG93ZXJkZXYsIC0xKTtcbiBcdFx0Z290byBoYXNoX2RlbDtcbkBAIC03OTIsNiAmIzQzOzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRyZXR1cm4gbWFjdmxhbl9zeW5jX2FkZHJlc3MoZGV2LCBhZGRyLVx1MDAzZV9fZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBtYWN2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcbiYjNDM7XHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuJiM0MztcdFx0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7XG4mIzQzO1xuJiM0MztcdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbiYjNDM7XHRcdG1lbWNweShcdTAwMjZzcy5fX2RhdGEsIHBvcnQtXHUwMDNlcGVybV9hZGRyLCBwb3J0LVx1MDAzZWRldi1cdTAwM2VhZGRyX2xlbik7XG4mIzQzO1x0XHRkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpXG4ge1xuIFx0c3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbkBAIC05NzcsOCAmIzQzOzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xuIFx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHBvcnQtXHUwMDNlY291bnQpIHtcbiYjNDM7XHRcdC8qIEluIGNhc2Ugb2YgcmVtYWluaW5nIHNvdXJjZSBpbnRlcmZhY2VzIHVuZG9cbiYjNDM7XHRcdCAqIHBhc3N0aHJ1LXNwZWNpZmljIHByb3BlcnRpZXMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4mIzQzO1x0XHRcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xuJiM0MztcdFx0XHRtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMTA1Miw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0LyogU3VwcG9ydCB1bmljYXN0IGZpbHRlciBvbmx5IG9uIHBhc3N0aHJ1IGRldmljZXMuXG4gXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxuIFx0ICovXG4tXHRpZiAoIW1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuJiM0MztcdGlmICh2bGFuLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSlcbkBAIC0xMDc3LDcgJiM0MzsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbkBAIC0xMzA4LDE3ICYjNDM7MTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0fVxuIFxuLVx0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcbi1cdCAqIG1hY3ZsYW4sIHB1dCBpdCBiYWNrLlxuLVx0ICovXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgcG9ydC1cdTAwM2VwZXJtX2FkZHIpKSB7XG4tXHRcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xuLVxuLVx0XHRzcy5zc19mYW1pbHkgPSBwb3J0LVx1MDAzZWRldi1cdTAwM2V0eXBlO1xuLVx0XHRtZW1jcHkoXHUwMDI2c3MuX19kYXRhLCBwb3J0LVx1MDAzZXBlcm1fYWRkciwgcG9ydC1cdTAwM2VkZXYtXHUwMDNlYWRkcl9sZW4pO1xuLVx0XHRkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtXHUwMDNlZGV2LCBcdTAwMjZzcywgTlVMTCk7XG4tXHR9XG4mIzQzO1x0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XG4gXG4gXHRrZnJlZShwb3J0KTtcbiB9XG5AQCAtMTUwNiwxNSAmIzQzOzE1MjgsNiBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFx0cG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChsb3dlcmRldik7XG4gXG4tXHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZSAqL1xuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkpIHtcbi1cdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbi1cdFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXG4tXHRcdCAqL1xuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuLVx0fVxuLVxuIFx0dmxhbi1cdTAwM2Vsb3dlcmRldiA9IGxvd2VyZGV2O1xuIFx0dmxhbi1cdTAwM2VkZXYgICAgICA9IGRldjtcbiBcdHZsYW4tXHUwMDNlcG9ydCAgICAgPSBwb3J0O1xuQEAgLTE1MjcsMTAgJiM0MzsxNTQwLDMwIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKVxuIFx0XHR2bGFuLVx1MDAzZWZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcbiBcbiYjNDM7XHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZS4gVGhlcmUgbWF5IGJlXG4mIzQzO1x0ICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEZpcnN0IGNoZWNrIGlmIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhbiBleGlzdGluZyBwYXNzdGhydSB2bGFuLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpIFx1MDAyNlx1MDAyNiB2bGFuLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkge1xuJiM0MztcdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbiYjNDM7XHRcdCAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBkZXN0cm95X21hY3ZsYW5fcG9ydDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIE5vdyBjaGVjayBpZiBhZGRpbmcgYSBwYXNzdGhydSBkZXZpY2UgdG8gYW4gZXhpc3Rpbmcgc2V0IG9mIHNvdXJjZSBtb2RlXG4mIzQzO1x0ICogZGV2aWNlcy5cbiYjNDM7XHQgKi9cbiBcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4tXHRcdGlmIChwb3J0LVx1MDAzZWNvdW50KSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuJiM0MztcdFx0c3RydWN0IG1hY3ZsYW5fZGV2ICpwO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucywgbGlzdCkge1xuJiM0MztcdFx0XHRpZiAocC1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcbiYjNDM7XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRtYWN2bGFuX3NldF9wYXNzdGhydShwb3J0KTtcbiBcdFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIGxvd2VyZGV2KTtcbkBAIC0xNTY0LDcgJiM0MzsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFxuLVx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZXZsYW5zKTtcbiYjNDM7XHQvKiBtYWN2bGFuX2hhbmRsZV9mcmFtZSBleHBlY3RzIHRoZSAob25lIGFuZCBvbmx5KSBwYXNzdGhydSBkZXZpY2UgZmlyc3QuICovXG4mIzQzO1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpXG4mIzQzO1x0XHRsaXN0X2FkZF9yY3UoXHUwMDI2dmxhbi1cdTAwM2VsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZXZsYW5zKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZ2bGFuLVx1MDAzZWxpc3QsIFx1MDAyNnBvcnQtXHUwMDNldmxhbnMpO1xuIFx0dXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tXHUwMDNlcG9ydCk7XG4gXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShsb3dlcmRldiwgZGV2KTtcbiBcdGxpbmt3YXRjaF9maXJlX2V2ZW50KGRldik7XG5AQCAtMTYyNyw5ICYjNDM7MTY2NCwxMSBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKSB7XG4gXHRcdHNldF9tb2RlID0gdHJ1ZTtcbiBcdFx0bW9kZSA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKTtcbi1cdFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4mIzM5O3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHkgKi9cbi1cdFx0aWYgKChtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgIT1cbi1cdFx0ICAgICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcbiYjNDM7XHRcdC8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJiMzOTt0IGJlIHNldCBvciBjbGVhcmVkIGR5bmFtaWNhbGx5LFxuJiM0MztcdFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxuJiM0MztcdFx0ICogaW50ZXJmYWNlcyBjYW4mIzM5O3Qgc3dpdGNoIG1vZGVzIHdpdGhpbiBhIHBhc3NodHJvdWdoIHBvcnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCkgXHUwMDI2XHUwMDI2IG1vZGUgIT0gdmxhbi1cdTAwM2Vtb2RlKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICB2bGFuLVx1MDAzZW1vZGUgIT0gbW9kZSlcbkBAIC0xNjM5LDcgJiM0MzsxNjc4LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pIHtcbiBcdFx0X191MTYgZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pO1xuIFx0XHRib29sIHByb21pc2MgPSAoZmxhZ3MgXiB2bGFuLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQztcbi1cdFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgcHJvbWlzYykge1xuJiM0MztcdFx0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNWTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjdmxhbl9jb21tb25fbmV3bGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl91bmluaXQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2RlbCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA5YTRiYzk5ZGJmNTNiNS4uMjUwNWY1ZjJlOWQzMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTgzLDYgJiM0Mzs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIAlwb3J0LSZndDtmbGFncyB8PSBNQUNWTEFOX0ZfUEFTU1RIUlU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KQomIzQzO3sKJiM0MzsJcG9ydC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIG1hY3ZsYW5fYWRkcl9jaGFuZ2UoY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gcG9ydC0mZ3Q7ZmxhZ3MgJmFtcDsgTUFDVkxBTl9GX0FERFJDSEFOR0U7CkBAIC02MzcsNyAmIzQzOzY0Miw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi0mZ3Q7bG93ZXJkZXY7CiAJaW50IGVycjsKIAotCWlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpKSB7CiYjNDM7CWlmICh2bGFuLSZndDttb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgewogCQlpZiAoISh2bGFuLSZndDtmbGFncyAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSkgewogCQkJZXJyID0gZGV2X3NldF9wcm9taXNjdWl0eShsb3dlcmRldiwgMSk7CiAJCQlpZiAoZXJyICZsdDsgMCkKQEAgLTcxMiw3ICYjNDM7NzE3LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlkZXZfdWNfdW5zeW5jKGxvd2VyZGV2LCBkZXYpOwogCWRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7CiAKLQlpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KSkgewomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHsKIAkJaWYgKCEodmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpCiAJCQlkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAtMSk7CiAJCWdvdG8gaGFzaF9kZWw7CkBAIC03OTIsNiAmIzQzOzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiAJcmV0dXJuIG1hY3ZsYW5fc3luY19hZGRyZXNzKGRldiwgYWRkci0mZ3Q7X19kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChkZXYpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgbG93ZXIgZGV2aWNlIGFkZHJlc3MgaGFzIGJlZW4gY2hhbmdlZCBieSBwYXNzdGhydQomIzQzOwkgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay4KJiM0MzsJICovCiYjNDM7CWlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpICZhbXA7JmFtcDsKJiM0MzsJICAgICFldGhlcl9hZGRyX2VxdWFsKHBvcnQtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIHBvcnQtJmd0O3Blcm1fYWRkcikpIHsKJiM0MzsJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwomIzQzOwomIzQzOwkJc3Muc3NfZmFtaWx5ID0gcG9ydC0mZ3Q7ZGV2LSZndDt0eXBlOwomIzQzOwkJbWVtY3B5KCZhbXA7c3MuX19kYXRhLCBwb3J0LSZndDtwZXJtX2FkZHIsIHBvcnQtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwomIzQzOwkJZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LSZndDtkZXYsICZhbXA7c3MsIE5VTEwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbWFjdmxhbl9jaGFuZ2VfcnhfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5nZSkKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTc3LDggJiM0Mzs5OTksMTggQEAgc3RhdGljIHZvaWQgbWFjdmxhbl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCW1hY3ZsYW5fZmx1c2hfc291cmNlcyhwb3J0LCB2bGFuKTsKIAlwb3J0LSZndDtjb3VudCAtPSAxOwotCWlmICghcG9ydC0mZ3Q7Y291bnQpCi0JCW1hY3ZsYW5fcG9ydF9kZXN0cm95KHBvcnQtJmd0O2Rldik7CiYjNDM7CWlmIChwb3J0LSZndDtjb3VudCkgewomIzQzOwkJLyogSW4gY2FzZSBvZiByZW1haW5pbmcgc291cmNlIGludGVyZmFjZXMgdW5kbwomIzQzOwkJICogcGFzc3RocnUtc3BlY2lmaWMgcHJvcGVydGllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7CiYjNDM7CQkJbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7CiYjNDM7CQkJbWFjdmxhbl9jbGVhcl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwltYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LSZndDtkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2Rldl9nZXRfc3RhdHM2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTA1Miw3ICYjNDM7MTA4NCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCS8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLgogCSAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuCiAJICovCi0JaWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpICZhbXA7JmFtcDsgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgJmFtcDsmYW1wOyBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChmbGFncyAmYW1wOyBOTE1fRl9SRVBMQUNFKQpAQCAtMTA3Nyw3ICYjNDM7MTEwOSw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9mZGJfZGVsKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCS8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLgogCSAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuCiAJICovCi0JaWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tJmd0O3BvcnQpICZhbXA7JmFtcDsgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQomIzQzOwlpZiAodmxhbi0mZ3Q7bW9kZSAhPSBNQUNWTEFOX01PREVfUEFTU1RIUlUgJmFtcDsmYW1wOyBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpCkBAIC0xMzA4LDE3ICYjNDM7MTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCS8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1Ci0JICogbWFjdmxhbiwgcHV0IGl0IGJhY2suCi0JICovCi0JaWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgJmFtcDsmYW1wOwotCSAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LSZndDtkZXYtJmd0O2Rldl9hZGRyLCBwb3J0LSZndDtwZXJtX2FkZHIpKSB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzOwotCi0JCXNzLnNzX2ZhbWlseSA9IHBvcnQtJmd0O2Rldi0mZ3Q7dHlwZTsKLQkJbWVtY3B5KCZhbXA7c3MuX19kYXRhLCBwb3J0LSZndDtwZXJtX2FkZHIsIHBvcnQtJmd0O2Rldi0mZ3Q7YWRkcl9sZW4pOwotCQlkZXZfc2V0X21hY19hZGRyZXNzKHBvcnQtJmd0O2RldiwgJmFtcDtzcywgTlVMTCk7Ci0JfQomIzQzOwltYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMoZGV2KTsKIAogCWtmcmVlKHBvcnQpOwogfQpAQCAtMTUwNiwxNSAmIzQzOzE1MjgsNiBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAlwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTsKIAotCS8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovCi0JaWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkpIHsKLQkJLyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSwKLQkJICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuCi0JCSAqLwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0OwotCX0KLQogCXZsYW4tJmd0O2xvd2VyZGV2ID0gbG93ZXJkZXY7CiAJdmxhbi0mZ3Q7ZGV2ICAgICAgPSBkZXY7CiAJdmxhbi0mZ3Q7cG9ydCAgICAgPSBwb3J0OwpAQCAtMTUyNywxMCAmIzQzOzE1NDAsMzAgQEAgaW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGF0YSAmYW1wOyZhbXA7IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSkKIAkJdmxhbi0mZ3Q7ZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pOwogCiYjNDM7CS8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlLiBUaGVyZSBtYXkgYmUKJiM0MzsJICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC4KJiM0MzsJICoKJiM0MzsJICogRmlyc3QgY2hlY2sgaWYgYWRkaW5nIGEgc291cmNlIG1vZGUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHBhc3N0aHJ1IHZsYW4uCiYjNDM7CSAqLwomIzQzOwlpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSAmYW1wOyZhbXA7IHZsYW4tJmd0O21vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkgewomIzQzOwkJLyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSwKJiM0MzsJCSAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5LgomIzQzOwkJICovCiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBOb3cgY2hlY2sgaWYgYWRkaW5nIGEgcGFzc3RocnUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHNldCBvZiBzb3VyY2UgbW9kZQomIzQzOwkgKiBkZXZpY2VzLgomIzQzOwkgKi8KIAlpZiAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHsKLQkJaWYgKHBvcnQtJmd0O2NvdW50KSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJCXN0cnVjdCBtYWN2bGFuX2RldiAqcDsKJiM0MzsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmFtcDtwb3J0LSZndDt2bGFucywgbGlzdCkgewomIzQzOwkJCWlmIChwLSZndDttb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydDsKJiM0MzsJCQl9CiAJCX0KIAkJbWFjdmxhbl9zZXRfcGFzc3RocnUocG9ydCk7CiAJCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBsb3dlcmRldik7CkBAIC0xNTY0LDcgJiM0MzsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGVycikKIAkJZ290byB1bnJlZ2lzdGVyX25ldGRldjsKIAotCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiYjNDM7CS8qIG1hY3ZsYW5faGFuZGxlX2ZyYW1lIGV4cGVjdHMgdGhlIChvbmUgYW5kIG9ubHkpIHBhc3N0aHJ1IGRldmljZSBmaXJzdC4gKi8KJiM0MzsJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKQomIzQzOwkJbGlzdF9hZGRfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiYjNDM7CWVsc2UKJiM0MzsJCWxpc3RfYWRkX3RhaWxfcmN1KCZhbXA7dmxhbi0mZ3Q7bGlzdCwgJmFtcDtwb3J0LSZndDt2bGFucyk7CiAJdXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tJmd0O3BvcnQpOwogCW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGxvd2VyZGV2LCBkZXYpOwogCWxpbmt3YXRjaF9maXJlX2V2ZW50KGRldik7CkBAIC0xNjI3LDkgJiM0MzsxNjY0LDExIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaWYgKGRhdGEgJmFtcDsmYW1wOyBkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSkgewogCQlzZXRfbW9kZSA9IHRydWU7CiAJCW1vZGUgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSk7Ci0JCS8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJiMzOTt0IGJlIHNldCBvciBjbGVhcmVkIGR5bmFtaWNhbGx5ICovCi0JCWlmICgobW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpICE9Ci0JCSAgICAodmxhbi0mZ3Q7bW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpKQomIzQzOwkJLyogUGFzc3Rocm91Z2ggbW9kZSBjYW4mIzM5O3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHksCiYjNDM7CQkgKiByZWdhcmRsZXNzIG9mIGV4aXN0aW5nIHNvdXJjZSBpbnRlcmZhY2VzLiBGdXJ0aGVybW9yZSwgc291cmNlCiYjNDM7CQkgKiBpbnRlcmZhY2VzIGNhbiYjMzk7dCBzd2l0Y2ggbW9kZXMgd2l0aGluIGEgcGFzc2h0cm91Z2ggcG9ydC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi0mZ3Q7cG9ydCkgJmFtcDsmYW1wOyBtb2RlICE9IHZsYW4tJmd0O21vZGUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHZsYW4tJmd0O21vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSAmYW1wOyZhbXA7CiAJCSAgICB2bGFuLSZndDttb2RlICE9IG1vZGUpCkBAIC0xNjM5LDcgJiM0MzsxNjc4LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGF0YSAmYW1wOyZhbXA7IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSkgewogCQlfX3UxNiBmbGFncyA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSk7CiAJCWJvb2wgcHJvbWlzYyA9IChmbGFncyBeIHZsYW4tJmd0O2ZsYWdzKSAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDOwotCQlpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLSZndDtwb3J0KSAmYW1wOyZhbXA7IHByb21pc2MpIHsKJiM0MzsJCWlmICh2bGFuLSZndDttb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSAmYW1wOyZhbXA7IHByb21pc2MpIHsKIAkJCWludCBlcnI7CiAKIAkJCWlmIChmbGFncyAmYW1wOyBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKk1BQ1ZMQU4gUGF0Y2ggRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvbWFjdmxhbi5jYC4gSXQmIzM5O3MgY2xlYXJseSB0b3VjaGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIE1BQ1ZMQU4sIGFuZCBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gYmUgcmVsYXhpbmcgc29tZSByZXN0cmljdGlvbnMgYXJvdW5kIGhvdyBgTUFDVkxBTl9NT0RFX1BBU1NUSFJVYCBhbmQgYE1BQ1ZMQU5fTU9ERV9TT1VSQ0VgIGRldmljZXMgY2FuIGludGVyYWN0LiBUaGlzIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGlnaHQgY29udHJvbCBvdmVyIHRoZXNlIG1vZGVzIGlzIHVzdWFsbHkgY3J1Y2lhbCBmb3IgbmV0d29yayBzZWN1cml0eSBhbmQgaXNvbGF0aW9uLiBUaGUgYWJpbGl0eSB0byBtaXggYW5kIG1hdGNoIHRoZW0sIGkuZS4sIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhIHBhc3N0aHJ1IFZMQU4gb3IgdGhlIG90aGVyIHdheSBhcm91bmQsIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBhcyBpdCBjb3VsZCBoYXZlIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBpbXBsZW1lbnRlZCBwb29ybHkuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGJyb2FkIHNldCBvZiBrZXkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWFjdmxhbiBjb2RlOiBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGBtYWN2bGFuX2NoYW5nZWxpbmtgLCBgbWFjdmxhbl9vcGVuYCwgYG1hY3ZsYW5fc3RvcGAsIGFuZCBldmVuIHRoZSBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMgYG1hY3ZsYW5fZmRiX2FkZGAgYW5kIGBtYWN2bGFuX2ZkYl9kZWxgLiBUaGUgZXh0ZW50IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlIGJlaGF2aW9yIGNoYW5nZXMgYXJlIGZ1bmRhbWVudGFsIGFuZCBsaWtlbHkgaW52b2x2ZSBhIHNpZ25pZmljYW50IHJld29yayBvZiB0aGUgdW5kZXJseWluZyBsb2dpYywgcmF0aGVyIHRoYW4gYSBzaW1wbGUgZmVhdHVyZSBhZGRpdGlvbi4KCkJlZm9yZSBJIGRlbHZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IE1BQ1ZMQU4gaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYENPTkZJR19NQUNWTEFOYCB0byBjb25maXJtIGl0JiMzOTtzIGFjdHVhbGx5IHJlbGV2YW50IHRvIHRoZSBzeXN0ZW0uIFRoaXMgY2hlY2sgaXMgcm91dGluZSBmb3IgbWUsIGJ1dCBpdCYjMzk7cyBhIGdvb2Qgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJJiMzOTttIG5vdCB3YXN0aW5nIHRpbWUgb24gY29kZSB0aGF0JiMzOTtzIG5vdCBldmVuIGNvbXBpbGVkIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNWTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MTYzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC90ZWFtL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctMTY0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoxNjU6Y29uZmlnIE1BQ1ZMQU5cbmRyaXZlcnMvbmV0L0tjb25maWctMTY2LVx0dHJpc3RhdGUgXCYjMzQ7TUFDLVZMQU4gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMTEKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1BQ1ZMQU4gRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBNQUNWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZSBjb25maWcgaXMgZGVmaW5pdGVseSBgTUFDVkxBTmAsIGFuZCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhpcyBjb2RlIGlzIGZ1bmN0aW9uYWwsIGFsdGVyaW5nIGhvdyBNQUNWTEFOIGRldmljZXMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMuIEl0JiMzOTtzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayksIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgdGhlIG1vc3QgY3JpdGljYWwgYXJlYXMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIHBpbnBvaW50ZWQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgdGhlIGZvY3VzIHBvaW50czogYG1hY3ZsYW5fc2V0X3Bhc3N0aHJ1YCwgYG1hY3ZsYW5fY2xlYXJfcGFzc3RocnVgLCBgbWFjdmxhbl9vcGVuYCwgYG1hY3ZsYW5fc3RvcGAsIGBtYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWNgIChuZXcpLCBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9mZGJfYWRkYCwgYG1hY3ZsYW5fZmRiX2RlbGAsIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIGBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rYCwgYW5kIGBtYWN2bGFuX2NoYW5nZWxpbmtgLgoKTmFycm93aW5nIGl0IGRvd24sIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AsIGBtYWN2bGFuX2ZkYl9hZGRgLCBgbWFjdmxhbl9mZGJfZGVsYCwgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAuIEkgaGFkIHRvIGNvbmZpcm0gYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2Agd2FzIHN0YXRpYy4gQW5kIGl0IGlzLCBidXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWN2bGFuX3VuaW5pdGAgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIHNvIGl0JiMzOTtzIHN0aWxsIHJlbGV2YW50LgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCB0aGUgb25seSBjb25maWcgbmVlZGVkIGlzIGBNQUNWTEFOYCwgd2hpY2ggZGVwZW5kcyBvbiBgTkVUYC4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBsb2dpYy4gSXQmIzM5O3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nIHZpYSBydG5ldGxpbmssIHNvIEkmIzM5O20gZGVlbWluZyBpdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBNeSBmaW5hbCBmb2N1cyBzeW1ib2xzIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9kZXN0cm95YCwgYG1hY3ZsYW5fZmRiX2FkZGAsIGBtYWN2bGFuX2ZkYl9kZWxgLCBhbmQgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AuIFdpdGggYE1BQ1ZMQU5gIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDVkxBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY3ZsYW5fY29tbW9uX25ld2xpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fdW5pbml0JiMzNDssCiAgICAmIzM0O21hY3ZsYW5fcG9ydF9kZXN0cm95JiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2FkZCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2ZkYl9kZWwmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNWTEFOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjdmxhbl9jb21tb25fbmV3bGluayYjMzQ7LAogICAgJiMzNDttYWN2bGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7bWFjdmxhbl91bmluaXQmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9wb3J0X2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bWFjdmxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O21hY3ZsYW5fZmRiX2RlbCYjMzQ7LAogICAgJiMzNDttYWN2bGFuX3BvcnRfcmVsZWFzZV9tYWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS4yMzgyNjAwM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTM3OTcwMzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1ZMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWN2bGFuX2NvbW1vbl9uZXdsaW5rXCIsXG4gICAgXCJtYWN2bGFuX2NoYW5nZWxpbmtcIixcbiAgICBcIm1hY3ZsYW5fdW5pbml0XCIsXG4gICAgXCJtYWN2bGFuX3BvcnRfZGVzdHJveVwiLFxuICAgIFwibWFjdmxhbl9mZGJfYWRkXCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9kZWxcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS4yMzgyNjg3NDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDI3MzcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDI6MDc6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jXFxuaW5kZXggOWE0YmM5OWRiZjUzYjUuLjI1MDVmNWYyZTlkMzBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xcbkBAIC04Myw2ICs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcXG4gXFx0cG9ydC1cXHUwMDNlZmxhZ3MgfD0gTUFDVkxBTl9GX1BBU1NUSFJVO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHBvcnQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5NQUNWTEFOX0ZfUEFTU1RIUlU7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBtYWN2bGFuX2FkZHJfY2hhbmdlKGNvbnN0IHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQpXFxuIHtcXG4gXFx0cmV0dXJuIHBvcnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUFDVkxBTl9GX0FERFJDSEFOR0U7XFxuQEAgLTYzNyw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYgPSB2bGFuLVxcdTAwM2Vsb3dlcmRldjtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpKSB7XFxuK1xcdGlmICh2bGFuLVxcdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xcbiBcXHRcXHRpZiAoISh2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0MpKSB7XFxuIFxcdFxcdFxcdGVyciA9IGRldl9zZXRfcHJvbWlzY3VpdHkobG93ZXJkZXYsIDEpO1xcbiBcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG5AQCAtNzEyLDcgKzcxNyw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGRldl91Y191bnN5bmMobG93ZXJkZXYsIGRldik7XFxuIFxcdGRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7XFxuIFxcbi1cXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVxcdTAwM2Vwb3J0KSkge1xcbitcXHRpZiAodmxhbi1cXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcXG4gXFx0XFx0aWYgKCEodmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSlcXG4gXFx0XFx0XFx0ZGV2X3NldF9wcm9taXNjdWl0eShsb3dlcmRldiwgLTEpO1xcbiBcXHRcXHRnb3RvIGhhc2hfZGVsO1xcbkBAIC03OTIsNiArNzk3LDIzIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4gXFx0cmV0dXJuIG1hY3ZsYW5fc3luY19hZGRyZXNzKGRldiwgYWRkci1cXHUwMDNlX19kYXRhKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IG1hY3ZsYW5fcG9ydF9nZXRfcnRubChkZXYpO1xcbitcXG4rXFx0LyogSWYgdGhlIGxvd2VyIGRldmljZSBhZGRyZXNzIGhhcyBiZWVuIGNoYW5nZWQgYnkgcGFzc3RocnVcXG4rXFx0ICogbWFjdmxhbiwgcHV0IGl0IGJhY2suXFxuK1xcdCAqL1xcbitcXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgcG9ydC1cXHUwMDNlcGVybV9hZGRyKSkge1xcbitcXHRcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcXG4rXFxuK1xcdFxcdHNzLnNzX2ZhbWlseSA9IHBvcnQtXFx1MDAzZWRldi1cXHUwMDNldHlwZTtcXG4rXFx0XFx0bWVtY3B5KFxcdTAwMjZzcy5fX2RhdGEsIHBvcnQtXFx1MDAzZXBlcm1fYWRkciwgcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxuK1xcdFxcdGRldl9zZXRfbWFjX2FkZHJlc3MocG9ydC1cXHUwMDNlZGV2LCBcXHUwMDI2c3MsIE5VTEwpO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpXFxuIHtcXG4gXFx0c3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5AQCAtOTc3LDggKzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xcbiBcXHRwb3J0LVxcdTAwM2Vjb3VudCAtPSAxO1xcbi1cXHRpZiAoIXBvcnQtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVxcdTAwM2VkZXYpO1xcbitcXHRpZiAocG9ydC1cXHUwMDNlY291bnQpIHtcXG4rXFx0XFx0LyogSW4gY2FzZSBvZiByZW1haW5pbmcgc291cmNlIGludGVyZmFjZXMgdW5kb1xcbitcXHRcXHQgKiBwYXNzdGhydS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XFxuK1xcdFxcdFxcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xcbitcXHRcXHRcXHRtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bWFjdmxhbl9wb3J0X2Rlc3Ryb3kocG9ydC1cXHUwMDNlZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWFjdmxhbl9kZXZfZ2V0X3N0YXRzNjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMTA1Miw3ICsxMDg0LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdC8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLlxcbiBcXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4rXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgTkxNX0ZfUkVQTEFDRSlcXG5AQCAtMTA3Nyw3ICsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdC8qIFN1cHBvcnQgdW5pY2FzdCBmaWx0ZXIgb25seSBvbiBwYXNzdGhydSBkZXZpY2VzLlxcbiBcXHQgKiBNdWx0aWNhc3QgZmlsdGVyIHNob3VsZCBiZSBhbGxvd2VkIG9uIGFsbCBkZXZpY2VzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXFx1MDAzZXBvcnQpIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4rXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVIFxcdTAwMjZcXHUwMDI2IGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0aWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcXG5AQCAtMTMwOCwxNyArMTM0MCw3IEBAIHN0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBJZiB0aGUgbG93ZXIgZGV2aWNlIGFkZHJlc3MgaGFzIGJlZW4gY2hhbmdlZCBieSBwYXNzdGhydVxcbi1cXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cXG4tXFx0ICovXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhZXRoZXJfYWRkcl9lcXVhbChwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyLCBwb3J0LVxcdTAwM2VwZXJtX2FkZHIpKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzO1xcbi1cXG4tXFx0XFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cXHUwMDNlZGV2LVxcdTAwM2V0eXBlO1xcbi1cXHRcXHRtZW1jcHkoXFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cXHUwMDNlcGVybV9hZGRyLCBwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWFkZHJfbGVuKTtcXG4tXFx0XFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVxcdTAwM2VkZXYsIFxcdTAwMjZzcywgTlVMTCk7XFxuLVxcdH1cXG4rXFx0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XFxuIFxcbiBcXHRrZnJlZShwb3J0KTtcXG4gfVxcbkBAIC0xNTA2LDE1ICsxNTI4LDYgQEAgaW50IG1hY3ZsYW5fY29tbW9uX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXHRwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTtcXG4gXFxuLVxcdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovXFxuLVxcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHBvcnQpKSB7XFxuLVxcdFxcdC8qIFRoZSBtYWN2bGFuIHBvcnQgbXVzdCBiZSBub3QgY3JlYXRlZCB0aGlzIHRpbWUsXFxuLVxcdFxcdCAqIHN0aWxsIGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQgZm9yIHJlYWRhYmlsaXR5Llxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4tXFx0XFx0Z290byBkZXN0cm95X21hY3ZsYW5fcG9ydDtcXG4tXFx0fVxcbi1cXG4gXFx0dmxhbi1cXHUwMDNlbG93ZXJkZXYgPSBsb3dlcmRldjtcXG4gXFx0dmxhbi1cXHUwMDNlZGV2ICAgICAgPSBkZXY7XFxuIFxcdHZsYW4tXFx1MDAzZXBvcnQgICAgID0gcG9ydDtcXG5AQCAtMTUyNywxMCArMTU0MCwzMCBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pXFxuIFxcdFxcdHZsYW4tXFx1MDAzZWZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcXG4gXFxuK1xcdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlLiBUaGVyZSBtYXkgYmVcXG4rXFx0ICogYWRkaXRpb25hbCBzb3VyY2UgbW9kZSBkZXZpY2VzIGJ1dCBub3RoaW5nIGVsc2UgYXQgdGhlIG1vbWVudC5cXG4rXFx0ICpcXG4rXFx0ICogRmlyc3QgY2hlY2sgaWYgYWRkaW5nIGEgc291cmNlIG1vZGUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHBhc3N0aHJ1IHZsYW4uXFxuK1xcdCAqL1xcbitcXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcXHUwMDI2XFx1MDAyNiB2bGFuLVxcdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcXG4rXFx0XFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcXG4rXFx0XFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBOb3cgY2hlY2sgaWYgYWRkaW5nIGEgcGFzc3RocnUgZGV2aWNlIHRvIGFuIGV4aXN0aW5nIHNldCBvZiBzb3VyY2UgbW9kZVxcbitcXHQgKiBkZXZpY2VzLlxcbitcXHQgKi9cXG4gXFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XFxuLVxcdFxcdGlmIChwb3J0LVxcdTAwM2Vjb3VudCkge1xcbi1cXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRcXHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xcbitcXHRcXHRzdHJ1Y3QgbWFjdmxhbl9kZXYgKnA7XFxuK1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFxcdTAwMjZwb3J0LVxcdTAwM2V2bGFucywgbGlzdCkge1xcbitcXHRcXHRcXHRpZiAocC1cXHUwMDNlbW9kZSAhPSBNQUNWTEFOX01PREVfU09VUkNFKSB7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRtYWN2bGFuX3NldF9wYXNzdGhydShwb3J0KTtcXG4gXFx0XFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIGxvd2VyZGV2KTtcXG5AQCAtMTU2NCw3ICsxNTk3LDExIEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XFxuIFxcbi1cXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4rXFx0LyogbWFjdmxhbl9oYW5kbGVfZnJhbWUgZXhwZWN0cyB0aGUgKG9uZSBhbmQgb25seSkgcGFzc3RocnUgZGV2aWNlIGZpcnN0LiAqL1xcbitcXHRpZiAodmxhbi1cXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpXFxuK1xcdFxcdGxpc3RfYWRkX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRsaXN0X2FkZF90YWlsX3JjdShcXHUwMDI2dmxhbi1cXHUwMDNlbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZXZsYW5zKTtcXG4gXFx0dXBkYXRlX3BvcnRfYmNfcXVldWVfbGVuKHZsYW4tXFx1MDAzZXBvcnQpO1xcbiBcXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShsb3dlcmRldiwgZGV2KTtcXG4gXFx0bGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTtcXG5AQCAtMTYyNyw5ICsxNjY0LDExIEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChkYXRhIFxcdTAwMjZcXHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKSB7XFxuIFxcdFxcdHNldF9tb2RlID0gdHJ1ZTtcXG4gXFx0XFx0bW9kZSA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9NQUNWTEFOX01PREVdKTtcXG4tXFx0XFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSAqL1xcbi1cXHRcXHRpZiAoKG1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSAhPVxcbi1cXHRcXHQgICAgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcXG4rXFx0XFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSxcXG4rXFx0XFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxcbitcXHRcXHQgKiBpbnRlcmZhY2VzIGNhbid0IHN3aXRjaCBtb2RlcyB3aXRoaW4gYSBwYXNzaHRyb3VnaCBwb3J0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cXHUwMDNlcG9ydCkgXFx1MDAyNlxcdTAwMjYgbW9kZSAhPSB2bGFuLVxcdTAwM2Vtb2RlKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0aWYgKHZsYW4tXFx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgdmxhbi1cXHUwMDNlbW9kZSAhPSBtb2RlKVxcbkBAIC0xNjM5LDcgKzE2NzgsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGF0YSBcXHUwMDI2XFx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pIHtcXG4gXFx0XFx0X191MTYgZmxhZ3MgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfTUFDVkxBTl9GTEFHU10pO1xcbiBcXHRcXHRib29sIHByb21pc2MgPSAoZmxhZ3MgXiB2bGFuLVxcdTAwM2VmbGFncykgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDO1xcbi1cXHRcXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVxcdTAwM2Vwb3J0KSBcXHUwMDI2XFx1MDAyNiBwcm9taXNjKSB7XFxuK1xcdFxcdGlmICh2bGFuLVxcdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcXHUwMDI2XFx1MDAyNiBwcm9taXNjKSB7XFxuIFxcdFxcdFxcdGludCBlcnI7XFxuIFxcbiBcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzoxNS45MDkyNjk4MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjY2OTQ3Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ1ZMQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWN2bGFuX2NvbW1vbl9uZXdsaW5rXCIsXG4gICAgXCJtYWN2bGFuX2NoYW5nZWxpbmtcIixcbiAgICBcIm1hY3ZsYW5fdW5pbml0XCIsXG4gICAgXCJtYWN2bGFuX3BvcnRfZGVzdHJveVwiLFxuICAgIFwibWFjdmxhbl9mZGJfYWRkXCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9kZWxcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIE1BQ1ZMQU4gZGV2aWNlcywgc3BlY2lmaWNhbGx5IGFsbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzIG9uIHRoZSBzYW1lIHBvcnQuIFRoaXMgaW50cm9kdWNlcyBuZXcgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGluaXRpYWxpemF0aW9uL3RlYXJkb3duIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB2aWEgcnRuZXRsaW5rLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0MmZlZTg0ODQ4MmQ0NTU2NjU5Y2ViZGYwMjdjNTJkMDUwNmRiODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwMjowNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uY1xuaW5kZXggOWE0YmM5OWRiZjUzYjUuLjI1MDVmNWYyZTlkMzBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jXG4rKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmNcbkBAIC04Myw2ICs4MywxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9zZXRfcGFzc3RocnUoc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydClcbiBcdHBvcnQtXHUwMDNlZmxhZ3MgfD0gTUFDVkxBTl9GX1BBU1NUSFJVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jbGVhcl9wYXNzdGhydShzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuK3tcbitcdHBvcnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TUFDVkxBTl9GX1BBU1NUSFJVO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWFjdmxhbl9hZGRyX2NoYW5nZShjb25zdCBzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0KVxuIHtcbiBcdHJldHVybiBwb3J0LVx1MDAzZWZsYWdzIFx1MDAyNiBNQUNWTEFOX0ZfQUREUkNIQU5HRTtcbkBAIC02MzcsNyArNjQyLDcgQEAgc3RhdGljIGludCBtYWN2bGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcmRldiA9IHZsYW4tXHUwMDNlbG93ZXJkZXY7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSkge1xuK1x0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUpIHtcbiBcdFx0aWYgKCEodmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQykpIHtcbiBcdFx0XHRlcnIgPSBkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAxKTtcbiBcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuQEAgLTcxMiw3ICs3MTcsNyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ZGV2X3VjX3Vuc3luYyhsb3dlcmRldiwgZGV2KTtcbiBcdGRldl9tY191bnN5bmMobG93ZXJkZXYsIGRldik7XG4gXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpKSB7XG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xuIFx0XHRpZiAoISh2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBNQUNWTEFOX0ZMQUdfTk9QUk9NSVNDKSlcbiBcdFx0XHRkZXZfc2V0X3Byb21pc2N1aXR5KGxvd2VyZGV2LCAtMSk7XG4gXHRcdGdvdG8gaGFzaF9kZWw7XG5AQCAtNzkyLDYgKzc5NywyMyBAQCBzdGF0aWMgaW50IG1hY3ZsYW5fc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRyZXR1cm4gbWFjdmxhbl9zeW5jX2FkZHJlc3MoZGV2LCBhZGRyLVx1MDAzZV9fZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSBtYWN2bGFuX3BvcnRfZ2V0X3J0bmwoZGV2KTtcbitcbitcdC8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1XG4rXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbitcdCAqL1xuK1x0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuK1x0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbitcbitcdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbitcdFx0bWVtY3B5KFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cdTAwM2VwZXJtX2FkZHIsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbitcdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2c3MsIE5VTEwpO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBtYWN2bGFuX2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY2hhbmdlKVxuIHtcbiBcdHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7XG5AQCAtOTc3LDggKzk5OSwxOCBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0bWFjdmxhbl9mbHVzaF9zb3VyY2VzKHBvcnQsIHZsYW4pO1xuIFx0cG9ydC1cdTAwM2Vjb3VudCAtPSAxO1xuLVx0aWYgKCFwb3J0LVx1MDAzZWNvdW50KVxuLVx0XHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4rXHRpZiAocG9ydC1cdTAwM2Vjb3VudCkge1xuK1x0XHQvKiBJbiBjYXNlIG9mIHJlbWFpbmluZyBzb3VyY2UgaW50ZXJmYWNlcyB1bmRvXG4rXHRcdCAqIHBhc3N0aHJ1LXNwZWNpZmljIHByb3BlcnRpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkge1xuK1x0XHRcdG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hYyhkZXYpO1xuK1x0XHRcdG1hY3ZsYW5fY2xlYXJfcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KTtcbitcdFx0fVxuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRtYWN2bGFuX3BvcnRfZGVzdHJveShwb3J0LVx1MDAzZWRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1hY3ZsYW5fZGV2X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMTA1Miw3ICsxMDg0LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE5MTV9GX1JFUExBQ0UpXG5AQCAtMTA3Nyw3ICsxMTA5LDcgQEAgc3RhdGljIGludCBtYWN2bGFuX2ZkYl9kZWwoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHQvKiBTdXBwb3J0IHVuaWNhc3QgZmlsdGVyIG9ubHkgb24gcGFzc3RocnUgZGV2aWNlcy5cbiBcdCAqIE11bHRpY2FzdCBmaWx0ZXIgc2hvdWxkIGJlIGFsbG93ZWQgb24gYWxsIGRldmljZXMuXG4gXHQgKi9cbi1cdGlmICghbWFjdmxhbl9wYXNzdGhydSh2bGFuLVx1MDAzZXBvcnQpIFx1MDAyNlx1MDAyNiBpc191bmljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSBcdTAwMjZcdTAwMjYgaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4gXHRpZiAoaXNfdW5pY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuQEAgLTEzMDgsMTcgKzEzNDAsNyBAQCBzdGF0aWMgdm9pZCBtYWN2bGFuX3BvcnRfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdH1cbiBcbi1cdC8qIElmIHRoZSBsb3dlciBkZXZpY2UgYWRkcmVzcyBoYXMgYmVlbiBjaGFuZ2VkIGJ5IHBhc3N0aHJ1XG4tXHQgKiBtYWN2bGFuLCBwdXQgaXQgYmFjay5cbi1cdCAqL1xuLVx0aWYgKG1hY3ZsYW5fcGFzc3RocnUocG9ydCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIWV0aGVyX2FkZHJfZXF1YWwocG9ydC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIHBvcnQtXHUwMDNlcGVybV9hZGRyKSkge1xuLVx0XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcztcbi1cbi1cdFx0c3Muc3NfZmFtaWx5ID0gcG9ydC1cdTAwM2VkZXYtXHUwMDNldHlwZTtcbi1cdFx0bWVtY3B5KFx1MDAyNnNzLl9fZGF0YSwgcG9ydC1cdTAwM2VwZXJtX2FkZHIsIHBvcnQtXHUwMDNlZGV2LVx1MDAzZWFkZHJfbGVuKTtcbi1cdFx0ZGV2X3NldF9tYWNfYWRkcmVzcyhwb3J0LVx1MDAzZWRldiwgXHUwMDI2c3MsIE5VTEwpO1xuLVx0fVxuK1x0bWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjKGRldik7XG4gXG4gXHRrZnJlZShwb3J0KTtcbiB9XG5AQCAtMTUwNiwxNSArMTUyOCw2IEBAIGludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXHRwb3J0ID0gbWFjdmxhbl9wb3J0X2dldF9ydG5sKGxvd2VyZGV2KTtcbiBcbi1cdC8qIE9ubHkgMSBtYWN2bGFuIGRldmljZSBjYW4gYmUgY3JlYXRlZCBpbiBwYXNzdGhydSBtb2RlICovXG4tXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSkge1xuLVx0XHQvKiBUaGUgbWFjdmxhbiBwb3J0IG11c3QgYmUgbm90IGNyZWF0ZWQgdGhpcyB0aW1lLFxuLVx0XHQgKiBzdGlsbCBnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0IGZvciByZWFkYWJpbGl0eS5cbi1cdFx0ICovXG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4tXHR9XG4tXG4gXHR2bGFuLVx1MDAzZWxvd2VyZGV2ID0gbG93ZXJkZXY7XG4gXHR2bGFuLVx1MDAzZWRldiAgICAgID0gZGV2O1xuIFx0dmxhbi1cdTAwM2Vwb3J0ICAgICA9IHBvcnQ7XG5AQCAtMTUyNywxMCArMTU0MCwzMCBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRhdGEgXHUwMDI2XHUwMDI2IGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSlcbiBcdFx0dmxhbi1cdTAwM2VmbGFncyA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9NQUNWTEFOX0ZMQUdTXSk7XG4gXG4rXHQvKiBPbmx5IDEgbWFjdmxhbiBkZXZpY2UgY2FuIGJlIGNyZWF0ZWQgaW4gcGFzc3RocnUgbW9kZS4gVGhlcmUgbWF5IGJlXG4rXHQgKiBhZGRpdGlvbmFsIHNvdXJjZSBtb2RlIGRldmljZXMgYnV0IG5vdGhpbmcgZWxzZSBhdCB0aGUgbW9tZW50LlxuK1x0ICpcbitcdCAqIEZpcnN0IGNoZWNrIGlmIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhbiBleGlzdGluZyBwYXNzdGhydSB2bGFuLlxuK1x0ICovXG4rXHRpZiAobWFjdmxhbl9wYXNzdGhydShwb3J0KSBcdTAwMjZcdTAwMjYgdmxhbi1cdTAwM2Vtb2RlICE9IE1BQ1ZMQU5fTU9ERV9TT1VSQ0UpIHtcbitcdFx0LyogVGhlIG1hY3ZsYW4gcG9ydCBtdXN0IGJlIG5vdCBjcmVhdGVkIHRoaXMgdGltZSxcbitcdFx0ICogc3RpbGwgZ290byBkZXN0cm95X21hY3ZsYW5fcG9ydCBmb3IgcmVhZGFiaWxpdHkuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuK1x0fVxuK1xuK1x0LyogTm93IGNoZWNrIGlmIGFkZGluZyBhIHBhc3N0aHJ1IGRldmljZSB0byBhbiBleGlzdGluZyBzZXQgb2Ygc291cmNlIG1vZGVcbitcdCAqIGRldmljZXMuXG4rXHQgKi9cbiBcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSB7XG4tXHRcdGlmIChwb3J0LVx1MDAzZWNvdW50KSB7XG4tXHRcdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfbWFjdmxhbl9wb3J0O1xuK1x0XHRzdHJ1Y3QgbWFjdmxhbl9kZXYgKnA7XG4rXG4rXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucywgbGlzdCkge1xuK1x0XHRcdGlmIChwLVx1MDAzZW1vZGUgIT0gTUFDVkxBTl9NT0RFX1NPVVJDRSkge1xuK1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdGdvdG8gZGVzdHJveV9tYWN2bGFuX3BvcnQ7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXHRcdG1hY3ZsYW5fc2V0X3Bhc3N0aHJ1KHBvcnQpO1xuIFx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgbG93ZXJkZXYpO1xuQEAgLTE1NjQsNyArMTU5NywxMSBAQCBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiBcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4rXHQvKiBtYWN2bGFuX2hhbmRsZV9mcmFtZSBleHBlY3RzIHRoZSAob25lIGFuZCBvbmx5KSBwYXNzdGhydSBkZXZpY2UgZmlyc3QuICovXG4rXHRpZiAodmxhbi1cdTAwM2Vtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSlcbitcdFx0bGlzdF9hZGRfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4rXHRlbHNlXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnZsYW4tXHUwMDNlbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2V2bGFucyk7XG4gXHR1cGRhdGVfcG9ydF9iY19xdWV1ZV9sZW4odmxhbi1cdTAwM2Vwb3J0KTtcbiBcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGxvd2VyZGV2LCBkZXYpO1xuIFx0bGlua3dhdGNoX2ZpcmVfZXZlbnQoZGV2KTtcbkBAIC0xNjI3LDkgKzE2NjQsMTEgQEAgc3RhdGljIGludCBtYWN2bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiBkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSkge1xuIFx0XHRzZXRfbW9kZSA9IHRydWU7XG4gXHRcdG1vZGUgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfTUFDVkxBTl9NT0RFXSk7XG4tXHRcdC8qIFBhc3N0aHJvdWdoIG1vZGUgY2FuJ3QgYmUgc2V0IG9yIGNsZWFyZWQgZHluYW1pY2FsbHkgKi9cbi1cdFx0aWYgKChtb2RlID09IE1BQ1ZMQU5fTU9ERV9QQVNTVEhSVSkgIT1cbi1cdFx0ICAgICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1BBU1NUSFJVKSlcbitcdFx0LyogUGFzc3Rocm91Z2ggbW9kZSBjYW4ndCBiZSBzZXQgb3IgY2xlYXJlZCBkeW5hbWljYWxseSxcbitcdFx0ICogcmVnYXJkbGVzcyBvZiBleGlzdGluZyBzb3VyY2UgaW50ZXJmYWNlcy4gRnVydGhlcm1vcmUsIHNvdXJjZVxuK1x0XHQgKiBpbnRlcmZhY2VzIGNhbid0IHN3aXRjaCBtb2RlcyB3aXRoaW4gYSBwYXNzaHRyb3VnaCBwb3J0LlxuK1x0XHQgKi9cbitcdFx0aWYgKG1hY3ZsYW5fcGFzc3RocnUodmxhbi1cdTAwM2Vwb3J0KSBcdTAwMjZcdTAwMjYgbW9kZSAhPSB2bGFuLVx1MDAzZW1vZGUpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdGlmICh2bGFuLVx1MDAzZW1vZGUgPT0gTUFDVkxBTl9NT0RFX1NPVVJDRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHZsYW4tXHUwMDNlbW9kZSAhPSBtb2RlKVxuQEAgLTE2MzksNyArMTY3OCw3IEBAIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKSB7XG4gXHRcdF9fdTE2IGZsYWdzID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX01BQ1ZMQU5fRkxBR1NdKTtcbiBcdFx0Ym9vbCBwcm9taXNjID0gKGZsYWdzIF4gdmxhbi1cdTAwM2VmbGFncykgXHUwMDI2IE1BQ1ZMQU5fRkxBR19OT1BST01JU0M7XG4tXHRcdGlmIChtYWN2bGFuX3Bhc3N0aHJ1KHZsYW4tXHUwMDNlcG9ydCkgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbitcdFx0aWYgKHZsYW4tXHUwMDNlbW9kZSA9PSBNQUNWTEFOX01PREVfUEFTU1RIUlUgXHUwMDI2XHUwMDI2IHByb21pc2MpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRcdGlmIChmbGFncyBcdTAwMjYgTUFDVkxBTl9GTEFHX05PUFJPTUlTQylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjE1LjkwOTI3MTE5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4Njg2OTEwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKk1BQ1ZMQU4gUGF0Y2ggRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L21hY3ZsYW4uY2AuIEl0J3MgY2xlYXJseSB0b3VjaGluZyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IG9mIE1BQ1ZMQU4sIGFuZCBzcGVjaWZpY2FsbHkgc2VlbXMgdG8gYmUgcmVsYXhpbmcgc29tZSByZXN0cmljdGlvbnMgYXJvdW5kIGhvdyBgTUFDVkxBTl9NT0RFX1BBU1NUSFJVYCBhbmQgYE1BQ1ZMQU5fTU9ERV9TT1VSQ0VgIGRldmljZXMgY2FuIGludGVyYWN0LiBUaGlzIGNhdGNoZXMgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGlnaHQgY29udHJvbCBvdmVyIHRoZXNlIG1vZGVzIGlzIHVzdWFsbHkgY3J1Y2lhbCBmb3IgbmV0d29yayBzZWN1cml0eSBhbmQgaXNvbGF0aW9uLiBUaGUgYWJpbGl0eSB0byBtaXggYW5kIG1hdGNoIHRoZW0sIGkuZS4sIGFkZGluZyBhIHNvdXJjZSBtb2RlIGRldmljZSB0byBhIHBhc3N0aHJ1IFZMQU4gb3IgdGhlIG90aGVyIHdheSBhcm91bmQsIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBhcyBpdCBjb3VsZCBoYXZlIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBpZiBpbXBsZW1lbnRlZCBwb29ybHkuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgYnJvYWQgc2V0IG9mIGtleSBmdW5jdGlvbnMgd2l0aGluIHRoZSBtYWN2bGFuIGNvZGU6IGBtYWN2bGFuX3VuaW5pdGAsIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAsIGBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rYCwgYG1hY3ZsYW5fY2hhbmdlbGlua2AsIGBtYWN2bGFuX29wZW5gLCBgbWFjdmxhbl9zdG9wYCwgYW5kIGV2ZW4gdGhlIEZEQiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBgbWFjdmxhbl9mZGJfYWRkYCBhbmQgYG1hY3ZsYW5fZmRiX2RlbGAuIFRoZSBleHRlbnQgb2YgdGhpcyBtb2RpZmljYXRpb24gc3VnZ2VzdHMgdGhhdCB0aGUgYmVoYXZpb3IgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgYW5kIGxpa2VseSBpbnZvbHZlIGEgc2lnbmlmaWNhbnQgcmV3b3JrIG9mIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLCByYXRoZXIgdGhhbiBhIHNpbXBsZSBmZWF0dXJlIGFkZGl0aW9uLlxuXG5CZWZvcmUgSSBkZWx2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IE1BQ1ZMQU4gaXMgZXZlbiBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgQ09ORklHX01BQ1ZMQU5gIHRvIGNvbmZpcm0gaXQncyBhY3R1YWxseSByZWxldmFudCB0byB0aGUgc3lzdGVtLiBUaGlzIGNoZWNrIGlzIHJvdXRpbmUgZm9yIG1lLCBidXQgaXQncyBhIGdvb2Qgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSBJJ20gbm90IHdhc3RpbmcgdGltZSBvbiBjb2RlIHRoYXQncyBub3QgZXZlbiBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUzOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjIwLjc3Nzk2NTE5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQwMzk4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ1ZMQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MTYzPXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvdGVhbS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctMTY0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MTY1OmNvbmZpZyBNQUNWTEFOXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0xNjYtXFx0dHJpc3RhdGUgXFxcIk1BQy1WTEFOIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDAyOjA3OjIxLjQwMjAxNDM5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxNjA2MTY5MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1BQ1ZMQU4gRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gTUFDVkxBTiBjb25maWd1cmF0aW9uLiBUaGUgY29uZmlnIGlzIGRlZmluaXRlbHkgYE1BQ1ZMQU5gLCBhbmQgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgY29kZSBpcyBmdW5jdGlvbmFsLCBhbHRlcmluZyBob3cgTUFDVkxBTiBkZXZpY2VzIGFyZSBlc3RhYmxpc2hlZCBhbmQgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiBQQVNTVEhSVSBhbmQgU09VUkNFIG1vZGVzLiBJdCdzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKHJ0bmV0bGluayksIHdoaWNoIGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaWcgaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCBpZGVudGlmeSB0aGUgbW9zdCBjcml0aWNhbCBhcmVhcyBmb3IgZnV6emluZy4gSSd2ZSBwaW5wb2ludGVkIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzIHRoZSBmb2N1cyBwb2ludHM6IGBtYWN2bGFuX3NldF9wYXNzdGhydWAsIGBtYWN2bGFuX2NsZWFyX3Bhc3N0aHJ1YCwgYG1hY3ZsYW5fb3BlbmAsIGBtYWN2bGFuX3N0b3BgLCBgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjYCAobmV3KSwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fZmRiX2FkZGAsIGBtYWN2bGFuX2ZkYl9kZWxgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGFuZCBgbWFjdmxhbl9jaGFuZ2VsaW5rYC5cblxuTmFycm93aW5nIGl0IGRvd24sIHRoZSBtb3N0IHByb21pc2luZyB0YXJnZXRzIGZvciBmdXp6aW5nIGFyZTogYG1hY3ZsYW5fY29tbW9uX25ld2xpbmtgLCBgbWFjdmxhbl9jaGFuZ2VsaW5rYCwgYG1hY3ZsYW5fdW5pbml0YCwgYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2AsIGBtYWN2bGFuX2ZkYl9hZGRgLCBgbWFjdmxhbl9mZGJfZGVsYCwgYW5kIGBtYWN2bGFuX3BvcnRfZGVzdHJveWAuIEkgaGFkIHRvIGNvbmZpcm0gYG1hY3ZsYW5fcG9ydF9yZWxlYXNlX21hY2Agd2FzIHN0YXRpYy4gQW5kIGl0IGlzLCBidXQgaXQncyBjYWxsZWQgYnkgYG1hY3ZsYW5fdW5pbml0YCBhbmQgYG1hY3ZsYW5fcG9ydF9kZXN0cm95YCwgc28gaXQncyBzdGlsbCByZWxldmFudC5cblxuSSd2ZSBhbHNvIGNvbmZpcm1lZCB0aGF0IHRoZSBvbmx5IGNvbmZpZyBuZWVkZWQgaXMgYE1BQ1ZMQU5gLCB3aGljaCBkZXBlbmRzIG9uIGBORVRgLlxuXG5UaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IHN0YXRlIHRyYW5zaXRpb25zIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24gbG9naWMuIEl0J3MgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nIHZpYSBydG5ldGxpbmssIHNvIEknbSBkZWVtaW5nIGl0IFwiV29ydGhGdXp6aW5nXCIuIE15IGZpbmFsIGZvY3VzIHN5bWJvbHMgYXJlOiBgbWFjdmxhbl9jb21tb25fbmV3bGlua2AsIGBtYWN2bGFuX2NoYW5nZWxpbmtgLCBgbWFjdmxhbl91bmluaXRgLCBgbWFjdmxhbl9wb3J0X2Rlc3Ryb3lgLCBgbWFjdmxhbl9mZGJfYWRkYCwgYG1hY3ZsYW5fZmRiX2RlbGAsIGFuZCBgbWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjYC4gV2l0aCBgTUFDVkxBTmAgZW5hYmxlZC4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjExLCJPdXRwdXRUb2tlbnMiOjE2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwMjowNzo0My4wMDgxODU5MzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODAyNDk0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDVkxBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3ZsYW5fY29tbW9uX25ld2xpbmtcIixcbiAgICBcIm1hY3ZsYW5fY2hhbmdlbGlua1wiLFxuICAgIFwibWFjdmxhbl91bmluaXRcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9kZXN0cm95XCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9hZGRcIixcbiAgICBcIm1hY3ZsYW5fZmRiX2RlbFwiLFxuICAgIFwibWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDVkxBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY3ZsYW5fY29tbW9uX25ld2xpbmtcIixcbiAgICBcIm1hY3ZsYW5fY2hhbmdlbGlua1wiLFxuICAgIFwibWFjdmxhbl91bmluaXRcIixcbiAgICBcIm1hY3ZsYW5fcG9ydF9kZXN0cm95XCIsXG4gICAgXCJtYWN2bGFuX2ZkYl9hZGRcIixcbiAgICBcIm1hY3ZsYW5fZmRiX2RlbFwiLFxuICAgIFwibWFjdmxhbl9wb3J0X3JlbGVhc2VfbWFjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgTUFDVkxBTiBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgYWxsb3dpbmcgY29tYmluYXRpb25zIG9mIFBBU1NUSFJVIGFuZCBTT1VSQ0UgbW9kZXMgb24gdGhlIHNhbWUgcG9ydC4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb24vdGVhcmRvd24gbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHZpYSBydG5ldGxpbmsuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[1] Phase: Succeeded StartedAt: 2026-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 02:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 02:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2] Phase: Succeeded StartedAt: 2026-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 02:09:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:09:02 +0000 UTC FinishedAt: 2026-07-10 02:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3668473492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:09:12 +0000 UTC FinishedAt: 2026-07-10 02:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:09:12 +0000 UTC FinishedAt: 2026-07-10 02:52:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*17d5e668-374b-4df7-a7d3-93e00da912bd,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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3668473492/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": "4a05b414-aba0-4a38-8d13-ece2ac577b1a", "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-workflow2qwcp/series-workflow2qwcp-build-action-1242301202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:09:12 +0000 UTC FinishedAt: 2026-07-10 02:52:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*17d5e668-374b-4df7-a7d3-93e00da912bd,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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3668473492/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": "4a05b414-aba0-4a38-8d13-ece2ac577b1a", "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-workflow2qwcp/series-workflow2qwcp-build-action-1242301202/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:34 +0000 UTC FinishedAt: 2026-07-10 02:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:34 +0000 UTC FinishedAt: 2026-07-10 02:52:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:34 +0000 UTC FinishedAt: 2026-07-10 02:52:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:34 +0000 UTC FinishedAt: 2026-07-10 02:52:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3233549139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:44 +0000 UTC FinishedAt: 2026-07-10 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:52:44 +0000 UTC FinishedAt: 2026-07-10 02:54:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a05b414-aba0-4a38-8d13-ece2ac577b1a,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-workflow2qwcp/series-workflow2qwcp-build-action-1242301202/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-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:54:44 +0000 UTC FinishedAt: 2026-07-10 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:54:44 +0000 UTC FinishedAt: 2026-07-10 02:54:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:54:44 +0000 UTC FinishedAt: 2026-07-10 03:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:54:44 +0000 UTC FinishedAt: 2026-07-10 03:40:51 +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:*17d5e668-374b-4df7-a7d3-93e00da912bd,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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3233549139/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": "0c5e2f82-62bd-40bf-a873-66f277607c07", "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-workflow2qwcp/series-workflow2qwcp-build-action-4122099847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 02:54:44 +0000 UTC FinishedAt: 2026-07-10 03:40:41 +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:*17d5e668-374b-4df7-a7d3-93e00da912bd,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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3233549139/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": "0c5e2f82-62bd-40bf-a873-66f277607c07", "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-workflow2qwcp/series-workflow2qwcp-build-action-4122099847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:40:51 +0000 UTC FinishedAt: 2026-07-10 03:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:40:51 +0000 UTC FinishedAt: 2026-07-10 03:40:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:40:51 +0000 UTC FinishedAt: 2026-07-10 03:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:40:51 +0000 UTC FinishedAt: 2026-07-10 03:42:40 +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:*0c5e2f82-62bd-40bf-a873-66f277607c07,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-workflow2qwcp/series-workflow2qwcp-build-action-4122099847/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-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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: Succeeded StartedAt: 2026-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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: Succeeded StartedAt: 2026-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"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:*4a05b414-aba0-4a38-8d13-ece2ac577b1a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c5e2f82-62bd-40bf-a873-66f277607c07,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-workflow2qwcp/series-workflow2qwcp-build-action-1242301202/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-workflow2qwcp/series-workflow2qwcp-build-action-4122099847/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 03:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 03:44:04 +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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3728182220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 03:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 03:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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-07-10 03:42:50 +0000 UTC FinishedAt: 2026-07-10 03:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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: Succeeded StartedAt: 2026-07-10 03:44:11 +0000 UTC FinishedAt: 2026-07-10 06:45:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2qwcp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"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":["macvlan_common_newlink","macvlan_changelink","macvlan_uninit","macvlan_port_destroy","macvlan_fdb_add","macvlan_fdb_del","macvlan_port_release_mac"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACVLAN"],"series_id":"72476997-558e-41ae-b146-c05346cdd7f6","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: Succeeded StartedAt: 2026-07-10 03:44:11 +0000 UTC FinishedAt: 2026-07-10 06:45:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a05b414-aba0-4a38-8d13-ece2ac577b1a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0c5e2f82-62bd-40bf-a873-66f277607c07,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-workflow2qwcp/series-workflow2qwcp-build-action-1242301202/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-workflow2qwcp/series-workflow2qwcp-build-action-4122099847/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-workflow2qwcp/series-workflow2qwcp-convert-artifact-3728182220/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}