Name: series-workflowkqjx5 Phase: Failed StartedAt: 2026-08-26 17:31:11 +0000 UTC FinishedAt: 2026-08-26 18:22:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqjx5[0] Phase: Succeeded StartedAt: 2026-08-26 17:31:11 +0000 UTC FinishedAt: 2026-08-26 18:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqjx5[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 17:31:11 +0000 UTC FinishedAt: 2026-08-26 18:22:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMzYxN2RmZTJjZGEwM2NlNzdhOWEzM2IwODBjNjhiMjFmNzczNDUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTg6MTk6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuQEAgLTg5OCwxMCAmIzQzOzg5OCw1MiBAQCBzdGF0aWMgYm9vbCBiNTNfdmxhbl9wb3J0X21heV9qb2luX3VudGFnZ2VkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXHRyZXR1cm4gZHAtXHUwMDNlYnJpZGdlID09IE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBiNTNfdmxhbl9od19lbnRyeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGNvbnN0IHN0cnVjdCBiNTNfdmxhbiAqdmwsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRib29sIHN0YW5kYWxvbmUgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHQqaHcgPSAqdmw7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aHctXHUwMDNlbWVtYmVycyA9IDA7XG4mIzQzO1x0aHctXHUwMDNldW50YWcgPSAwO1xuJiM0MztcbiYjNDM7XHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIHBvcnQpIHtcbiYjNDM7XHRcdGlmICghKHZsLVx1MDAzZW1lbWJlcnMgXHUwMDI2IEJJVChwb3J0KSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuJiM0MztcdFx0XHRpZiAoZHAtXHUwMDNlYnJpZGdlKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0c3RhbmRhbG9uZSA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHctXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4mIzQzO1x0XHRody1cdTAwM2V1bnRhZyB8PSB2bC1cdTAwM2V1bnRhZyBcdTAwMjYgQklUKHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGFuZGFsb25lKSB7XG4mIzQzO1x0XHRody1cdTAwM2VtZW1iZXJzID0gMDtcbiYjNDM7XHRcdGh3LVx1MDAzZXVudGFnID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdGFuZGFsb25lO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IGI1M192bGFuIHZsID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGI1M192bGFuIGh3O1xuIFx0c3RydWN0IGI1M192bGFuICp2O1xuIFx0aW50IGksIGRlZl92aWQ7XG4gXHR1MTYgdmlkO1xuQEAgLTkzNywyMCAmIzQzOzk3OSwyMyBAQCBpbnQgYjUzX2NvbmZpZ3VyZV92bGFuKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIGRlZl92aWQsIFx1MDAyNnZsKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcbi1cdFx0LyogVXBvbiBpbml0aWFsIGNhbGwgd2UgaGF2ZSBub3Qgc2V0LXVwIGFueSBWTEFOcywgYnV0IHVwb25cbi1cdFx0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXG4tXHRcdCAqL1xuLVx0XHRmb3IgKHZpZCA9IGRlZl92aWQgJiM0MzsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7XG4tXHRcdFx0diA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuJiM0MztcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4mIzQzO1x0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCBcdTAwM2MgZGV2LVx1MDAzZW51bV92bGFuczsgdmlkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0diA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuIFxuLVx0XHRcdGlmICghdi1cdTAwM2VtZW1iZXJzKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIXYtXHUwMDNlbWVtYmVycylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTtcbi1cdFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHYsIFx1MDAyNmh3KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFx1MDAyNmh3KTtcbiYjNDM7XHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcbiBcdFx0YjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBpKSB7XG4gXHRcdFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKVxuIFx0XHRcdFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLFxuQEAgLTE3MjAsNiAmIzQzOzE3NjUsNyBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuIFx0Ym9vbCBwdmlkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEO1xuJiM0MztcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4gXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xuIFx0aW50IGVycjtcbkBAIC0xNzUxLDEzICYjNDM7MTc5NywxNCBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRlbHNlXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbiBcbi1cdGlmICghZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKVxuJiM0MztcdGlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcdTAwMjZodykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi1cdTAwM2V2aWQsIHZsKTtcbiYjNDM7XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgXHUwMDI2aHcpO1xuIFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVx1MDAzZXZpZCk7XG4gXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4gXHRcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLFxuIFx0XHRcdCAgICBuZXdfcHZpZCk7XG4gXHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgb2xkX3B2aWQpO1xuQEAgLTE3NzIsNyAmIzQzOzE4MTksOSBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4ge1xuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbiYjNDM7XHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4gXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xuJiM0MztcdGJvb2wgbmVlZHNfaHc7XG4gXHR1MTYgcHZpZDtcbiBcbiBcdGlmICh2bGFuLVx1MDAzZXZpZCA9PSAwKVxuQEAgLTE3ODIsNiAmIzQzOzE4MzEsOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXG4gXHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2bGFuLVx1MDAzZXZpZF07XG4gXG4mIzQzO1x0bmVlZHNfaHcgPSBiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbiYjNDM7XG4gXHR2bC1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbiBcbiBcdGlmIChwdmlkID09IHZsYW4tXHUwMDNldmlkKVxuQEAgLTE3OTEsMTQgJiM0MzsxODQyLDE4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGlmICh1bnRhZ2dlZCBcdTAwMjZcdTAwMjYgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfihCSVQocG9ydCkpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4mIzQzO1x0aWYgKCFuZWVkc19odylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgdmwpO1xuJiM0MztcdGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuJiM0MztcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCBcdTAwMjZodyk7XG4gXHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tXHUwMDNldmlkKTtcbiBcbi1cdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcbi1cdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZykge1xuJiM0MztcdFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksXG4mIzQzO1x0XHRcdCAgICBwdmlkKTtcbiYjNDM7XHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNjEsNiAmIzQzOzIzMTYsMjggQEAgaW50IGI1M19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGI1M192bGFuIGh3O1xuJiM0MztcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4mIzQzO1x0dTE2IHZpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICh2aWQgPSBiNTNfZGVmYXVsdF9wdmlkKGRldikgJiM0MzsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHZsLVx1MDAzZW1lbWJlcnMgXHUwMDI2IEJJVChwb3J0KSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuJiM0MztcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCBcdTAwMjZodyk7XG4mIzQzO1x0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4gXHRcdGJvb2wgKnR4X2Z3ZF9vZmZsb2FkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuQEAgLTIzMjQsNiAmIzQzOzI0MDEsOCBAQCBpbnQgYjUzX2JyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuIFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfUFZMQU5fUEFHRSwgQjUzX1BWTEFOX1BPUlRfTUFTSyhwb3J0KSwgcHZsYW4pO1xuIFx0ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLnZsYW5fY3RsX21hc2sgPSBwdmxhbjtcbiBcbiYjNDM7XHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX2JyX2pvaW4pO1xuQEAgLTIzNzYsNiAmIzQzOzI0NTUsOCBAQCB2b2lkIGI1M19icl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXG4gXHRcdHZsLVx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xuIFx0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBwdmlkLCB2bCk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKGRzLCBwb3J0KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfYnJfbGVhdmUpO1xuIFxuQEAgLTMyMTMsNiAmIzQzOzMyOTQsNyBAQCBzdHJ1Y3QgYjUzX2RldmljZSAqYjUzX3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuIFx0ICogZGV2aWNlcy4gKG5vdCBoYXJkd2FyZSBzdXBwb3J0ZWQpXG4gXHQgKi9cbiBcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1x0ZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzX211dGV4KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi42N2EwMWZjNWY4MWVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtNDA1LDYgJiM0Mzs0MDUsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaCB7XG4gXHQvKiBLZWVwIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQgb24gcG9ydHMgbm90IG9mZmxvYWRpbmcgYW55IHVwcGVyICovXG4gXHR1MzJcdFx0XHRuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nOjE7XG4gXG4mIzQzO1x0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xuJiM0MztcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOjE7XG4mIzQzO1xuIFx0LyogUGFzcyAucG9ydF92bGFuX2FkZCBhbmQgLnBvcnRfdmxhbl9kZWwgdG8gZHJpdmVycyBldmVuIGZvciBicmlkZ2VzXG4gXHQgKiB0aGF0IGhhdmUgdmxhbl9maWx0ZXJpbmc9MC4gQWxsIGRyaXZlcnMgc2hvdWxkIGlkZWFsbHkgc2V0IHRoaXMgKGFuZFxuIFx0ICogdGhlbiB0aGUgb3B0aW9uIHdvdWxkIGdldCByZW1vdmVkKSwgYnV0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9wb3J0LmMgYi9uZXQvZHNhL3BvcnQuY1xuaW5kZXggMWY1NTM2YzBkZmZjMi4uZTYxYWJjN2M3NGY3MyAxMDA2NDRcbi0tLSBhL25ldC9kc2EvcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3BvcnQuY1xuQEAgLTgzMSw2ICYjNDM7ODMxLDkgQEAgaW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4gXHRcdFx0aWYgKCF1c2VyKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsXG4gXHRcdFx0XHRcdFx0XHQgICAgIHZsYW5fZmlsdGVyaW5nKTtcbiBcdFx0XHRpZiAoZXJyKVxuQEAgLTgzOSwxMCAmIzQzOzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcbiBcdH0gZWxzZSB7XG4gXHRcdGRwLVx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XG4gXG4tXHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLVx0XHRcdFx0XHRcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHRcdGlmICghZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRwLVx1MDAzZXVzZXIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0NSwxMCAmIzQzOzE0NTAsMTMgQEAgaW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuIFxuIFx0LyogVGhlIHBvcnQgbWlnaHQgc3RpbGwgYmUgVkxBTiBmaWx0ZXJpbmcgZXZlbiBpZiBpdCYjMzk7cyBubyBsb25nZXJcbiBcdCAqIHVuZGVyIGEgYnJpZGdlLCBlaXRoZXIgZHVlIHRvIGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCBvclxuLVx0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZy4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zXG4tXHQgKiBvbiB0aGUgQ1BVIHBvcnQuXG4mIzQzO1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZywgYW5kIGV2ZXJ5IHBvcnQgb2YgYVxuJiM0MztcdCAqIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkIHN3aXRjaCBrZWVwcyBpdHMgODAyMXEgdXBwZXJcbiYjNDM7XHQgKiBWTEFOcyB3aGV0aGVyIGJyaWRnZWQgb3Igbm90LiBJbiB0dXJuIHRoaXMgbWVhbnMgVkxBTnMgb24gdGhlXG4mIzQzO1x0ICogQ1BVIHBvcnQuXG4gXHQgKi9cbi1cdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApO1xuJiM0MztcdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApIHx8XG4mIzQzO1x0XHRcdCBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDtcbiBcdGlmICh2bGFuX2ZpbHRlcmluZykge1xuIFx0XHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZGV2LCBmYWxzZSk7XG4gXHRcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mZGE2YmE0ZmRkMTNkIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMTk0Niw2ICYjNDM7MTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxuICAqXG4gICogLSBJZiBzdGFuZGFsb25lICh0aGlzIGluY2x1ZGVzIHNvZnR3YXJlIGJyaWRnZSwgc29mdHdhcmUgTEFHKTpcbiAgKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbiYjNDM7ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxuICAqICAgICAgIChkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xuICAqICAgICAgIHRoaXMgc3dpdGNoIGNoaXAgd2hpY2ggaGF2ZSB2bGFuX2ZpbHRlcmluZz0xKVxuICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnNcbkBAIC0yNzE3LDcgJiM0MzsyNzE4LDggQEAgdm9pZCBkc2FfdXNlcl9zZXR1cF90YWdnZXIoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXIpXG4gXHR1c2VyLVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXHRpZiAodXNlci1cdTAwM2VuZWVkZWRfdGFpbHJvb20pXG4gXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUKTtcbi1cdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nKVxuJiM0MztcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XG4mIzQzO1x0ICAgIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxuIFx0XHR1c2VyLVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbiBcdHVzZXItXHUwMDNlbGx0eCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCBkcml2ZXIgKGI1MykgYW5kIGNvcmUgRFNBIGNvZGUuIFRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBnYXRlZCBieSB0aGUgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBmbGFnLCB3aGljaCBpcyBvbmx5IHNldCBieSB0aGUgYjUzIGRyaXZlci4gU2luY2UgYjUzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE4OjE5OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwppbmRleCAwODgwMzEwYzljZTNmLi5jNGM4NTEzYWU0ODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwpAQCAtODk4LDEwICYjNDM7ODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAlyZXR1cm4gZHAtJmd0O2JyaWRnZSA9PSBOVUxMOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLAomIzQzOwkJCSAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CWJvb2wgc3RhbmRhbG9uZSA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsKJiM0MzsJKmh3ID0gKnZsOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlody0mZ3Q7bWVtYmVycyA9IDA7CiYjNDM7CWh3LSZndDt1bnRhZyA9IDA7CiYjNDM7CiYjNDM7CWI1M19mb3JfZWFjaF9wb3J0KGRldiwgcG9ydCkgewomIzQzOwkJaWYgKCEodmwtJmd0O21lbWJlcnMgJmFtcDsgQklUKHBvcnQpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwomIzQzOwomIzQzOwkJaWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKSB7CiYjNDM7CQkJaWYgKGRwLSZndDticmlkZ2UpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXN0YW5kYWxvbmUgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaHctJmd0O21lbWJlcnMgfD0gQklUKHBvcnQpOwomIzQzOwkJaHctJmd0O3VudGFnIHw9IHZsLSZndDt1bnRhZyAmYW1wOyBCSVQocG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFzdGFuZGFsb25lKSB7CiYjNDM7CQlody0mZ3Q7bWVtYmVycyA9IDA7CiYjNDM7CQlody0mZ3Q7dW50YWcgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzdGFuZGFsb25lOwomIzQzO30KJiM0MzsKIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewogCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKIAlzdHJ1Y3QgYjUzX3ZsYW4gdmwgPSB7IDAgfTsKJiM0MzsJc3RydWN0IGI1M192bGFuIGh3OwogCXN0cnVjdCBiNTNfdmxhbiAqdjsKIAlpbnQgaSwgZGVmX3ZpZDsKIAl1MTYgdmlkOwpAQCAtOTM3LDIwICYjNDM7OTc5LDIzIEBAIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCX0KIAliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCAmYW1wO3ZsKTsKIAotCWlmIChkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKSB7Ci0JCS8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uCi0JCSAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLgotCQkgKi8KLQkJZm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCAmbHQ7IGRldi0mZ3Q7bnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7Ci0JCQl2ID0gJmFtcDtkZXYtJmd0O3ZsYW5zW3ZpZF07CiYjNDM7CS8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uCiYjNDM7CSAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLgomIzQzOwkgKi8KJiM0MzsJZm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCAmbHQ7IGRldi0mZ3Q7bnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7CiYjNDM7CQl2ID0gJmFtcDtkZXYtJmd0O3ZsYW5zW3ZpZF07CiAKLQkJCWlmICghdi0mZ3Q7bWVtYmVycykKLQkJCQljb250aW51ZTsKJiM0MzsJCWlmICghdi0mZ3Q7bWVtYmVycykKJiM0MzsJCQljb250aW51ZTsKIAotCQkJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTsKLQkJCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTsKLQkJfQomIzQzOwkJaWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdiwgJmFtcDtodykpCiYjNDM7CQkJY29udGludWU7CiAKJiM0MzsJCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgJmFtcDtodyk7CiYjNDM7CQliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dmxhbl9maWx0ZXJpbmcpIHsKIAkJYjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBpKSB7CiAJCQlpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgaSkpCiAJCQkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLApAQCAtMTcyMCw2ICYjNDM7MTc2NSw3IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiAJYm9vbCB1bnRhZ2dlZCA9IHZsYW4tJmd0O2ZsYWdzICZhbXA7IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQ7CiAJYm9vbCBwdmlkID0gdmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19QVklEOwomIzQzOwlzdHJ1Y3QgYjUzX3ZsYW4gaHc7CiAJc3RydWN0IGI1M192bGFuICp2bDsKIAl1MTYgb2xkX3B2aWQsIG5ld19wdmlkOwogCWludCBlcnI7CkBAIC0xNzUxLDEzICYjNDM7MTc5NywxNCBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJZWxzZQogCQl2bC0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiAKLQlpZiAoIWRldi0mZ3Q7dmxhbl9maWx0ZXJpbmcpCiYjNDM7CWlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCAmYW1wO2h3KSkKIAkJcmV0dXJuIDA7CiAKLQliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLSZndDt2aWQsIHZsKTsKJiM0MzsJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi0mZ3Q7dmlkLCAmYW1wO2h3KTsKIAliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tJmd0O3ZpZCk7CiAKLQlpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgJmFtcDsmYW1wOyBuZXdfcHZpZCAhPSBvbGRfcHZpZCkgewomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSAmYW1wOyZhbXA7IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7CiAJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLAogCQkJICAgIG5ld19wdmlkKTsKIAkJYjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBvbGRfcHZpZCk7CkBAIC0xNzcyLDcgJiM0MzsxODE5LDkgQEAgaW50IGI1M192bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogewogCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKIAlib29sIHVudGFnZ2VkID0gdmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDsKJiM0MzsJc3RydWN0IGI1M192bGFuIGh3OwogCXN0cnVjdCBiNTNfdmxhbiAqdmw7CiYjNDM7CWJvb2wgbmVlZHNfaHc7CiAJdTE2IHB2aWQ7CiAKIAlpZiAodmxhbi0mZ3Q7dmlkID09IDApCkBAIC0xNzgyLDYgJiM0MzsxODMxLDggQEAgaW50IGI1M192bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCiAJdmwgPSAmYW1wO2Rldi0mZ3Q7dmxhbnNbdmxhbi0mZ3Q7dmlkXTsKIAomIzQzOwluZWVkc19odyA9IGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgJmFtcDtodyk7CiYjNDM7CiAJdmwtJmd0O21lbWJlcnMgJmFtcDs9IH5CSVQocG9ydCk7CiAKIAlpZiAocHZpZCA9PSB2bGFuLSZndDt2aWQpCkBAIC0xNzkxLDE0ICYjNDM7MTg0MiwxOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJaWYgKHVudGFnZ2VkICZhbXA7JmFtcDsgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpCiAJCXZsLSZndDt1bnRhZyAmYW1wOz0gfihCSVQocG9ydCkpOwogCi0JaWYgKCFkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKQomIzQzOwlpZiAoIW5lZWRzX2h3KQogCQlyZXR1cm4gMDsKIAotCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tJmd0O3ZpZCwgdmwpOwomIzQzOwliNTNfdmxhbl9od19lbnRyeShkcywgdmwsICZhbXA7aHcpOwomIzQzOwliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLSZndDt2aWQsICZhbXA7aHcpOwogCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmxhbi0mZ3Q7dmlkKTsKIAotCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTsKLQliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHB2aWQpOwomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZykgewomIzQzOwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksCiYjNDM7CQkJICAgIHB2aWQpOwomIzQzOwkJYjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjYxLDYgJiM0MzsyMzE2LDI4IEBAIGludCBiNTNfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogfQogRVhQT1JUX1NZTUJPTChiNTNfbWRiX2RlbCk7CiAKJiM0MztzdGF0aWMgdm9pZCBiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgYjUzX3ZsYW4gaHc7CiYjNDM7CXN0cnVjdCBiNTNfdmxhbiAqdmw7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKHZpZCA9IGI1M19kZWZhdWx0X3B2aWQoZGV2KSAmIzQzOyAxOyB2aWQgJmx0OyBkZXYtJmd0O251bV92bGFuczsgdmlkJiM0MzsmIzQzOykgewomIzQzOwkJdmwgPSAmYW1wO2Rldi0mZ3Q7dmxhbnNbdmlkXTsKJiM0MzsKJiM0MzsJCWlmICghKHZsLSZndDttZW1iZXJzICZhbXA7IEJJVChwb3J0KSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQliNTNfdmxhbl9od19lbnRyeShkcywgdmwsICZhbXA7aHcpOwomIzQzOwkJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCAmYW1wO2h3KTsKJiM0MzsJCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsCiAJCWJvb2wgKnR4X2Z3ZF9vZmZsb2FkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CkBAIC0yMzI0LDYgJiM0MzsyNDAxLDggQEAgaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSwKIAliNTNfd3JpdGUxNihkZXYsIEI1M19QVkxBTl9QQUdFLCBCNTNfUFZMQU5fUE9SVF9NQVNLKHBvcnQpLCBwdmxhbik7CiAJZGV2LSZndDtwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47CiAKJiM0MzsJYjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChiNTNfYnJfam9pbik7CkBAIC0yMzc2LDYgJiM0MzsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKQogCQl2bC0mZ3Q7bWVtYmVycyB8PSBCSVQocG9ydCk7CiAJCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHB2aWQsIHZsKTsKIAl9CiYjNDM7CiYjNDM7CWI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKGRzLCBwb3J0KTsKIH0KIEVYUE9SVF9TWU1CT0woYjUzX2JyX2xlYXZlKTsKIApAQCAtMzIxMyw2ICYjNDM7MzI5NCw3IEBAIHN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsCiAJICogZGV2aWNlcy4gKG5vdCBoYXJkd2FyZSBzdXBwb3J0ZWQpCiAJICovCiAJZHMtJmd0O3ZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7CiYjNDM7CWRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7CiAKIAltdXRleF9pbml0KCZhbXA7ZGV2LSZndDtyZWdfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtkZXYtJmd0O3N0YXRzX211dGV4KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uNjdhMDFmYzVmODFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTQwNSw2ICYjNDM7NDA1LDkgQEAgc3RydWN0IGRzYV9zd2l0Y2ggewogCS8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi8KIAl1MzIJCQluZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nOjE7CiAKJiM0MzsJLyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqLwomIzQzOwl1MzIJCQluZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDoxOwomIzQzOwogCS8qIFBhc3MgLnBvcnRfdmxhbl9hZGQgYW5kIC5wb3J0X3ZsYW5fZGVsIHRvIGRyaXZlcnMgZXZlbiBmb3IgYnJpZGdlcwogCSAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kCiAJICogdGhlbiB0aGUgb3B0aW9uIHdvdWxkIGdldCByZW1vdmVkKSwgYnV0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGlzCmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jCmluZGV4IDFmNTUzNmMwZGZmYzIuLmU2MWFiYzdjNzRmNzMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvcG9ydC5jCkBAIC04MzEsNiAmIzQzOzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLAogCQkJaWYgKCF1c2VyKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcodXNlciwKIAkJCQkJCQkgICAgIHZsYW5fZmlsdGVyaW5nKTsKIAkJCWlmIChlcnIpCkBAIC04MzksMTAgJiM0Mzs4NDIsMTIgQEAgaW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsCiAJfSBlbHNlIHsKIAkJZHAtJmd0O3ZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7CiAKLQkJZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRwLSZndDt1c2VyLAotCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHJlc3RvcmU7CiYjNDM7CQlpZiAoIWRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkgewomIzQzOwkJCWVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC0mZ3Q7dXNlciwKJiM0MzsJCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byByZXN0b3JlOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMTQ0NSwxMCAmIzQzOzE0NTAsMTMgQEAgaW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LAogCiAJLyogVGhlIHBvcnQgbWlnaHQgc3RpbGwgYmUgVkxBTiBmaWx0ZXJpbmcgZXZlbiBpZiBpdCYjMzk7cyBubyBsb25nZXIKIAkgKiB1bmRlciBhIGJyaWRnZSwgZWl0aGVyIGR1ZSB0byBkcy0mZ3Q7dmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsIG9yCi0JICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcwotCSAqIG9uIHRoZSBDUFUgcG9ydC4KJiM0MzsJICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcsIGFuZCBldmVyeSBwb3J0IG9mIGEKJiM0MzsJICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkIHN3aXRjaCBrZWVwcyBpdHMgODAyMXEgdXBwZXIKJiM0MzsJICogVkxBTnMgd2hldGhlciBicmlkZ2VkIG9yIG5vdC4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zIG9uIHRoZQomIzQzOwkgKiBDUFUgcG9ydC4KIAkgKi8KLQl2bGFuX2ZpbHRlcmluZyA9IGRzYV9wb3J0X2lzX3ZsYW5fZmlsdGVyaW5nKGRwKTsKJiM0MzsJdmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHwKJiM0MzsJCQkgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOwogCWlmICh2bGFuX2ZpbHRlcmluZykgewogCQllcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZGV2LCBmYWxzZSk7CiAJCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmMKaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDQKLS0tIGEvbmV0L2RzYS91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS91c2VyLmMKQEAgLTE5NDYsNiAmIzQzOzE5NDYsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX2NsZWFyX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYsIGludCB2aWQsIHZvaWQgKmFyZykKICAqCiAgKiAtIElmIHN0YW5kYWxvbmUgKHRoaXMgaW5jbHVkZXMgc29mdHdhcmUgYnJpZGdlLCBzb2Z0d2FyZSBMQUcpOgogICogICAgIC0gaWYgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcgPSB0cnVlLCBPUiBpZgomIzQzOyAqICAgICAgIGRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmCiAgKiAgICAgICAoZHMtJmd0O3ZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWUgQU5EIHRoZXJlIGFyZSBicmlkZ2VzIHNwYW5uaW5nCiAgKiAgICAgICB0aGlzIHN3aXRjaCBjaGlwIHdoaWNoIGhhdmUgdmxhbl9maWx0ZXJpbmc9MSkKICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnMKQEAgLTI3MTcsNyAmIzQzOzI3MTgsOCBAQCB2b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcikKIAl1c2VyLSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDOwogCWlmICh1c2VyLSZndDtuZWVkZWRfdGFpbHJvb20pCiAJCXVzZXItJmd0O2ZlYXR1cmVzICZhbXA7PSB+KE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUKTsKLQlpZiAoZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcpCiYjNDM7CWlmIChkcy0mZ3Q7bmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fAomIzQzOwkgICAgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKQogCQl1c2VyLSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7CiAKIAl1c2VyLSZndDtsbHR4ID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIERTQSBWTEFOIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIGluIHRoZSBgZHNhX3N3aXRjaGAgc3RydWN0dXJlIGFuZCB0aGVuIG1vZGlmaWVzIGEgYnVuY2ggb2YgcmVsYXRlZCBmdW5jdGlvbnMgaW4gY29yZSBEU0EgY29kZSBhbmQgdGhlIGBiNTNgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBEU0EgaXMsIGFmdGVyIGFsbCwgYWJvdXQgRXRoZXJuZXQgc3dpdGNoZXMuCgpJIGtub3cgdGhlcmUmIzM5O3MgYSBgZHNhX2xvb3BgIGRyaXZlciwgd2hpY2ggaXMgYSBtb2NrIERTQSBpbXBsZW1lbnRhdGlvbiwgYnV0IGBiNTNgIGlzIHNwZWNpZmljYWxseSBmb3IgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2hlcy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkgaGFzIG1lIHRoaW5raW5nLiBDb3VsZCBhIG1vY2sgZHJpdmVyIHNvbWVob3cgaGl0IHRoZXNlIGNoYW5nZXM/CgpJIHJlYWxpemUgdGhlIGNvcmUgRFNBIG1vZGlmaWNhdGlvbnMgYXJlIGdhdGVkIGJlaGluZCBgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCwgd2hpY2ggbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IHNldCBpbiBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIGBiNTNfY29tbW9uLmNgLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIEkgZXZlbiBnZXQgYGI1M2AgdG8gaW5zdGFudGlhdGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT8KCmBiNTNgIGhhcyBzZXZlcmFsIGZyb250ZW5kIG9wdGlvbnM6IGBiNTNfbW1hcC5jYCwgYGI1M19tZGlvLmNgLCBgYjUzX3NwaS5jYCwgYGI1M19zcmFiLmNgLiAgQ291bGQgSSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/ICBVbmZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSB0aGUgaGFyZHdhcmUgZm9yIHRoZXNlIEJyb2FkY29tIHN3aXRjaGVzLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGBiNTNgIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBjb250ZXh0LgoKQnV0LCB3YWl0Li4uIGlzIHRoZXJlIGEgd2F5IHRvIHByb2JlIGBiNTNgIHZpYSBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZz8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBkbyB0aGF0IHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBzZXR1cCwgdGhvdWdoIGl0ICpkb2VzKiBoYXZlIHNvbWUgdmlydHVhbCBkZXZpY2UgY2FwYWJpbGl0aWVzLiBCdXQgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIuLi4gVGhpcyBmZWVscyBsaWtlIGEgZGVhZCBlbmQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBJcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIsIGFueXdoZXJlLCB0aGF0IHNldHMgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYD8gSSBzaG91bGQgcHJvYmFibHkgcnVuIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk2LVx0ZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyOTc6XHRkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk4LVxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTM4NT1zdHJ1Y3QgZHNhX3N3aXRjaCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtNDA4LVx0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xuaW5jbHVkZS9uZXQvZHNhLmg6NDA5Olx0dTMyXHRcdFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ6MTtcbmluY2x1ZGUvbmV0L2RzYS5oLTQxMC1cbi0tXG5uZXQvZHNhL3BvcnQuYz03OTE9aW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4tLVxubmV0L2RzYS9wb3J0LmMtODMzLVxubmV0L2RzYS9wb3J0LmM6ODM0Olx0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbm5ldC9kc2EvcG9ydC5jLTgzNS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9kc2EvcG9ydC5jLTg0NC1cbm5ldC9kc2EvcG9ydC5jOjg0NTpcdFx0aWYgKCFkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xubmV0L2RzYS9wb3J0LmMtODQ2LVx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLS1cbm5ldC9kc2EvcG9ydC5jPTE0MzI9aW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvcG9ydC5jLTE0NTMtXHQgKiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nLCBhbmQgZXZlcnkgcG9ydCBvZiBhXG5uZXQvZHNhL3BvcnQuYzoxNDU0Olx0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgc3dpdGNoIGtlZXBzIGl0cyA4MDIxcSB1cHBlclxubmV0L2RzYS9wb3J0LmMtMTQ1NS1cdCAqIFZMQU5zIHdoZXRoZXIgYnJpZGdlZCBvciBub3QuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcyBvbiB0aGVcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNDU4LVx0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcbm5ldC9kc2EvcG9ydC5jOjE0NTk6XHRcdFx0IGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkO1xubmV0L2RzYS9wb3J0LmMtMTQ2MC1cdGlmICh2bGFuX2ZpbHRlcmluZykge1xuLS1cbm5ldC9kc2EvdXNlci5jPTE5Mjk9c3RhdGljIGludCBkc2FfdXNlcl9jbGVhcl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbm5ldC9kc2EvdXNlci5jOjE5NDk6ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxubmV0L2RzYS91c2VyLmMtMTk1MC0gKiAgICAgICAoZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNjk4PXZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxuLS1cbm5ldC9kc2EvdXNlci5jLTI3MjEtXHRpZiAoZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fFxubmV0L2RzYS91c2VyLmM6MjcyMjpcdCAgICBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbm5ldC9kc2EvdXNlci5jLTI3MjMtXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBiNTMgRHJpdmVyIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgaXMgZXhjbHVzaXZlbHkgc2V0IHdpdGhpbiB0aGUgYGI1M19jb21tb24uY2AgZmlsZS4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGBiNTNgIGRyaXZlciBpcyBldmVuIGFjY2Vzc2libGUgb3IgcmVsZXZhbnQgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIE15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG9mIHRoZSB2aXJ0dWFsIGRyaXZlcnMgdGhhdCBTeXprYWxsZXIgdGVzdHMgdXNlIGBiNTNfc3dpdGNoX2FsbG9jYC4gSWYgdGhleSBkbywgdGhhdCYjMzk7cyBhIGRpcmVjdCBpbmRpY2F0aW9uIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSByZWFjaCB0aGUgcmVsZXZhbnQgY29kZS4gVGhpcyBjaGVjayB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgYSBjcnVjaWFsIGFuc3dlciBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1M19zd2l0Y2hfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MzE3Mz1zdGF0aWMgaW50IGI1M19zd2l0Y2hfaW5pdChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyNjMtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMjY0OnN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjY1LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBiNTNfaW9fb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzMwNC19XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMzA1OkVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9hbGxvYyk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMzA2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0yOTI9c3RhdGljIGludCBiNTNfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTMzNC1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozMzU6XHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcdTAwMjZiNTNfbWRpb19vcHMsIG1kaW9kZXYtXHUwMDNlYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zMzYtXHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM9NDA1PXN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQ0MjpcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNmI1M19tbWFwX29wcywgcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQzLVx0aWYgKCFkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiNTNfbWF4X2FybF9lbnRyaWVzKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTI3OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODA6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0yODEtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGI1M19pb19vcHMgKm9wcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYz0yOTY9c3RhdGljIGludCBiNTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzAwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzAxOlx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZzcGktXHUwMDNlZGV2LCBcdTAwMjZiNTNfc3BpX29wcywgc3BpKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwMi1cdGlmICghZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYz02MTg9c3RhdGljIGludCBiNTNfc3JhYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYy02NDQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmM6NjQ1Olx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2YjUzX3NyYWJfb3BzLCBwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYy02NDYtXHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jPTEzNjU9c3RhdGljIGludCBiY21fc2YyX3N3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy0xMzg5LVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzoxMzkwOlx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2YmNtX3NmMl9pb19vcHMsIHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy0xMzkxLVx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBiNTNgIERyaXZlciYjMzk7cyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGI1M2AgZHJpdmVyIOKAkyBpdCYjMzk7cyBmb3IgaGFyZHdhcmUgc3dpdGNoZXMsIHJpZ2h0PyBJdCByZWxpZXMgb24gTURJTywgTU1BUCwgU1BJLCBTUkFCLCBhbmQgdGhlIGBiY21fc2YyYCBwbGF0Zm9ybSBkZXZpY2UgdG8gcHJvYmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBtZXRob2RzIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8KClR5cGljYWxseSwgcGxhdGZvcm0gZGV2aWNlcyAqY2FuKiBiZSBpbnN0YW50aWF0ZWQgaWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBlbnRyeSBvciBtYW51YWwgcmVnaXN0cmF0aW9uLCBidXQgc3RhbmRhcmQgc3l6a2FsbGVyIGlzbiYjMzk7dCBzZXQgdXAgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcHNldWRvLWRldmljZSBpbiBzeXprYWxsZXIsIG9yIGEgbW9kdWxlIHRoYXQgZG9lcyBpdC4gSG1tLCBob2xkIG9uLi4uIGBiNTNfbW1hcGAgaXMgKmFsc28qIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcGF0aHdheSB0byB0cmlnZ2VyIGBiNTNfc3dpdGNoX2FsbG9jYCB3aXRoaW4gUUVNVS4KCkkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIGlmIGl0JiMzOTtzIGNvbmZpZ3VyZWQsIGJ1dCB0aGF0JiMzOTtzIG5vdCBzdGFuZGFyZCBmb3IgYGI1M2AuIEJ1dCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIHNvbWUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkuIFRoZXNlIERTQSBjaGFuZ2Vz4oCmIGxldCYjMzk7cyBsb29rOgoKYGBgYwpAQCAtODMxLDYgJiM0Mzs4MzEsOSBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZywKIAkJCWlmICghdXNlcikKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkcy0mZ3Q7bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsCiAJCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7CmBgYAoKT2theSwgc28gdGhlc2UgY2hhbmdlcyBpbiBEU0EgYXJlIG9ubHkgKmV4ZWN1dGVkKiBpZiBgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBpcyB0cnVlLiBCdXQgaXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIHRoYXQgc2V0cyBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgPyBJIGFscmVhZHkgZ3JlcHBlZCBmb3IgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBhbmQgaXQmIzM5O3Mgb25seSBzZXQgaW4gYGRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jYC4gU28gdGhlc2UgRFNBIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGRlYWQgY29kZSB1bmxlc3MgdGhlIGBiNTNgIHN3aXRjaCBpcyAqcHJlc2VudCouCgpBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyLCBpc24mIzM5O3QgaXQ/IFRoZSBgYjUzYCBkcml2ZXIgaXMgZm9yIEJyb2FkY29tIHN3aXRjaGVzOyBpdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBydW4sIG9yIGEgZGV2aWNlIHRyZWUgbm9kZSB0aGF0JiMzOTtzIGdvaW5nIHRvIGJpbmQgdG8gaXQsIGJ1dCB0aGVuLCB3aXRob3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGl0JiMzOTtzIGp1c3QgZ29pbmcgdG8gZmFpbCBkdXJpbmcgcHJvYmluZy4gTURJTyByZWFkcyB3aWxsIGZhaWwsIE1NQVAgd2lsbCBmYWlsIHRvIG1hcCBvciByZWFkIHRoZSBjb3JyZWN0IElEIHJlZ2lzdGVycywgeW91IG5hbWUgaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgY2hlY2sgb3V0IGBiNTNfbW1hcF9wcm9iZWAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2hhbmNlIGl0IGNhbiBzdWNjZWVkICp3aXRob3V0KiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX21tYXBfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTM0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGI1M19pb19vcHMgYjUzX21tYXBfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjAtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6MzYxOnN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmVfb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjItXHRcdFx0ICAgICBzdHJ1Y3QgYjUzX3BsYXRmb3JtX2RhdGEgKipwcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQwNC1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0MDU6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQwNi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQxMy1cdGlmICghcGRhdGEgXHUwMDI2XHUwMDI2IG5wKSB7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDE0Olx0XHRyZXQgPSBiNTNfbW1hcF9wcm9iZV9vZihwZGV2LCBcdTAwMjZwZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDE1LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiNTNfbW1hcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDk4Olx0LnByb2JlID0gYjUzX21tYXBfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDk5LVx0LnJlbW92ZSA9IGI1M19tbWFwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYjUzX21tYXBfcHJvYmVgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYjUzX21tYXBfcHJvYmVgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyByb3V0aW5lIGhhbmRsZXMgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIE1NVSwgYW5kIHBhcnRpY3VsYXJseSBob3cgaXQgYWNjb3VudHMgZm9yIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIG9mIHRoZSBCQ001M3h4JiMzOTtzIG1lbW9yeSBsYXlvdXQsIGdpdmVuIGl0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGNvbmN1cnJlbnRseS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgcGFnZSBhbGlnbm1lbnQsIHBlcm1pc3Npb24gc2V0dGluZyAocmVhZCwgd3JpdGUsIGV4ZWN1dGUpLCBhbmQgZXJyb3IgY2hlY2tpbmcuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBwbGF0Zm9ybSYjMzk7cyBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgcm9idXN0IGFuZCBzYWZlLiBJJiMzOTtsbCBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhZGRyZXNzIHNwYWNlIGNvbmZsaWN0cywgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA1Olx0c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDQwNjpcdHtcbiA0MDc6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDQwODpcdFx0c3RydWN0IGI1M19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG4gNDA5Olx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdjtcbiA0MTA6XHRcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXY7XG4gNDExOlx0XHRpbnQgcmV0O1xuIDQxMjpcdFxuIDQxMzpcdFx0aWYgKCFwZGF0YSBcdTAwMjZcdTAwMjYgbnApIHtcbiA0MTQ6XHRcdFx0cmV0ID0gYjUzX21tYXBfcHJvYmVfb2YocGRldiwgXHUwMDI2cGRhdGEpO1xuIDQxNTpcdFx0XHRpZiAocmV0KSB7XG4gNDE2Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7T0YgcHJvYmUgZXJyb3JcXG5cJiMzNDspO1xuIDQxNzpcdFx0XHRcdHJldHVybiByZXQ7XG4gNDE4Olx0XHRcdH1cbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdGlmICghcGRhdGEpXG4gNDIyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQyMzpcdFxuIDQyNDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4gNDI1Olx0XHRpZiAoIXByaXYpXG4gNDI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQyNzpcdFxuIDQyODpcdFx0cHJpdi1cdTAwM2VyZWdzID0gcGRhdGEtXHUwMDNlcmVncztcbiA0Mjk6XHRcbiA0MzA6XHRcdHByaXYtXHUwMDNlZ3Bpb19jdHJsID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgXCYjMzQ7YnJjbSxncGlvLWN0cmxcJiMzNDspO1xuIDQzMTpcdFx0aWYgKCFJU19FUlIocHJpdi1cdTAwM2VncGlvX2N0cmwpKSB7XG4gNDMyOlx0XHRcdGlmIChwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzMThfREVWSUNFX0lEIHx8XG4gNDMzOlx0XHRcdCAgICBwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzMjhfREVWSUNFX0lEIHx8XG4gNDM0Olx0XHRcdCAgICBwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzNjJfREVWSUNFX0lEKVxuIDQzNTpcdFx0XHRcdHByaXYtXHUwMDNlcGh5X2luZm8gPSBcdTAwMjZiY202MzE4X2VwaHlfaW5mbztcbiA0MzY6XHRcdFx0ZWxzZSBpZiAocGRhdGEtXHUwMDNlY2hpcF9pZCA9PSBCQ002MzY4X0RFVklDRV9JRClcbiA0Mzc6XHRcdFx0XHRwcml2LVx1MDAzZXBoeV9pbmZvID0gXHUwMDI2YmNtNjM2OF9lcGh5X2luZm87XG4gNDM4Olx0XHRcdGVsc2UgaWYgKHBkYXRhLVx1MDAzZWNoaXBfaWQgPT0gQkNNNjMyNjhfREVWSUNFX0lEKVxuIDQzOTpcdFx0XHRcdHByaXYtXHUwMDNlcGh5X2luZm8gPSBcdTAwMjZiY202MzI2OF9lcGh5X2luZm87XG4gNDQwOlx0XHR9XG4gNDQxOlx0XG4gNDQyOlx0XHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZiNTNfbW1hcF9vcHMsIHByaXYpO1xuIDQ0MzpcdFx0aWYgKCFkZXYpXG4gNDQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ0NTpcdFxuIDQ0NjpcdFx0ZGV2LVx1MDAzZXBkYXRhID0gcGRhdGE7XG4gNDQ3Olx0XG4gNDQ4Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0cmV0dXJuIGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbiA0NTE6XHR9XG4gNDUyOlx0XG4gNDUzOlx0c3RhdGljIHZvaWQgYjUzX21tYXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNDU0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQjUzIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gdGhlIGNvZGUgc25pcHBldCBpcyBjYWxsaW5nIGBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldilgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgdGhpcyBCNTMgc3dpdGNoIGRyaXZlciB1cCBhbmQgcnVubmluZywgcmlnaHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYjUzX3N3aXRjaF9yZWdpc3RlcmAgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX3N3aXRjaF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0zMzg4PUVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9kZXRlY3QpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM4OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMzOTA6aW50IGI1M19zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGI1M19kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMzOTEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTM0MTAtfVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzQxMTpFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzQxMi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MjkyPXN0YXRpYyBpbnQgYjUzX21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNDQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzQ1Olx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM0Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQwNT1zdGF0aWMgaW50IGI1M19tbWFwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ0OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0NTA6XHRyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ1MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI4ND1pbnQgYjUzX3N3aXRjaF9kZXRlY3Qoc3RydWN0IGI1M19kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjg1LVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjI4NjppbnQgYjUzX3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0yODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM9Mjk2PXN0YXRpYyBpbnQgYjUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwNy1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjMwODpcdHJldCA9IGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jPTYxOD1zdGF0aWMgaW50IGI1M19zcmFiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY1Ni1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYzo2NTc6XHRyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY1OC19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz0xMzY1PXN0YXRpYyBpbnQgYmNtX3NmMl9zd19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU0OC1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6MTU0OTpcdHJldCA9IGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU1MC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGI1M19zd2l0Y2hfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYjUzX3N3aXRjaF9yZWdpc3RlcmAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHMuIElzIHRoaXMgYSBuZXR3b3JrIGRldmljZT8gQSBoYXJkd2FyZSBwZXJpcGhlcmFsPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBzb21lIGZvcm0gb2Ygc3dpdGNoaW5nIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBiaXQgZmllbGRzLCBjb250cm9sIHNpZ25hbHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBNeSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlPyBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkYXRhIHdpZHRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBsaWtlIHJlZ2lzdGVyIGFjY2VzcyBwcm90ZWN0aW9ucz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgbG9va2luZyBmb3IgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcsIE1BQyBhZGRyZXNzIGhhbmRsaW5nLCBWTEFOIGNvbmZpZ3VyYXRpb24gKGlmIHJlbGV2YW50KSwgYW5kIGVycm9yIHN0YXR1cyBiaXRzLiBNeSBtaW5kIGlzIGFscmVhZHkgcGFyc2luZyB0aGUgcG9zc2libGUgdXNlIGNhc2Ugc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM5MDpcdGludCBiNTNfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4zMzkxOlx0e1xuMzM5MjpcdFx0aW50IHJldDtcbjMzOTM6XHRcbjMzOTQ6XHRcdGlmIChkZXYtXHUwMDNlcGRhdGEpIHtcbjMzOTU6XHRcdFx0ZGV2LVx1MDAzZWNoaXBfaWQgPSBkZXYtXHUwMDNlcGRhdGEtXHUwMDNlY2hpcF9pZDtcbjMzOTY6XHRcdFx0ZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMgPSBkZXYtXHUwMDNlcGRhdGEtXHUwMDNlZW5hYmxlZF9wb3J0cztcbjMzOTc6XHRcdH1cbjMzOTg6XHRcbjMzOTk6XHRcdGlmICghZGV2LVx1MDAzZWNoaXBfaWQgXHUwMDI2XHUwMDI2IGI1M19zd2l0Y2hfZGV0ZWN0KGRldikpXG4zNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzQwMTpcdFxuMzQwMjpcdFx0cmV0ID0gYjUzX3N3aXRjaF9pbml0KGRldik7XG4zNDAzOlx0XHRpZiAocmV0KVxuMzQwNDpcdFx0XHRyZXR1cm4gcmV0O1xuMzQwNTpcdFxuMzQwNjpcdFx0ZGV2X2luZm8oZGV2LVx1MDAzZWRldiwgXCYjMzQ7Zm91bmQgc3dpdGNoOiAlcywgcmV2ICVpXFxuXCYjMzQ7LFxuMzQwNzpcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIGRldi1cdTAwM2Vjb3JlX3Jldik7XG4zNDA4Olx0XG4zNDA5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkZXYtXHUwMDNlZHMpO1xuMzQxMDpcdH1cbjM0MTE6XHRFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfcmVnaXN0ZXIpO1xuMzQxMjpcdFxuMzQxMzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgR29yc2tpIFx1MDAzY2pvZ29Ab3BlbndydC5vcmdcdTAwM2VcJiMzNDspO1xuMzQxNDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtCNTMgc3dpdGNoIGxpYnJhcnlcJiMzNDspO1xuMzQxNTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDc3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQjUzIFN3aXRjaCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgQjUzIHN3aXRjaC4gVGhlIGtleSBpcyBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgYGNoaXBfaWRgLiBJdCBzZWVtcyB0byBwcmlvcml0aXplIGEgZmV3IGFwcHJvYWNoZXMsIHdoaWNoIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlIGZvciBmbGV4aWJpbGl0eS4KCklmIHRoZSBgZGV2LSZndDtjaGlwX2lkYCBpc24mIzM5O3QgYWxyZWFkeSBwb3B1bGF0ZWQsIGl0IGNhbGxzIGBiNTNfc3dpdGNoX2RldGVjdChkZXYpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgc29tZSBoYXJkd2FyZSBwcm9iaW5nIG9yIG90aGVyIGRldGVjdGlvbiBtZXRob2QgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBjaGlwIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIElmIHRoZSBwbGF0Zm9ybSBkYXRhLCBgZGV2LSZndDtwZGF0YWAsICppcyogc2V0LCB0aGVuIGl0IGdyYWJzIHRoZSBgY2hpcF9pZGAgZnJvbSB0aGVyZSBpbnN0ZWFkLiBUaGF0IHN1Z2dlc3RzIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIGVpdGhlciBhdXRvLWRldGVjdGlvbiBvciBib2FyZC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KClVsdGltYXRlbHksIGl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hlcmUgdGhlIGBjaGlwX2lkYCBjb21lcyBmcm9tLCB0aGUgbmV4dCBrZXkgb3BlcmF0aW9uIGlzIGBiNTNfc3dpdGNoX2luaXQoZGV2KWAuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hhdCBoYXBwZW5zIGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYW5kIHNldHVwIG9jY3Vycy4gTGV04oCZcyBkaXZlIGludG8gYGI1M19zd2l0Y2hfaW5pdGAgbm93IHRvIHVuZGVyc3RhbmQgdGhlIG1lYXQgb2YgdGhlIGRyaXZlcuKAmXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE3MzpcdHN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4zMTc0Olx0e1xuMzE3NTpcdFx0dTMyIGNoaXBfaWQgPSBkZXYtXHUwMDNlY2hpcF9pZDtcbjMxNzY6XHRcdHVuc2lnbmVkIGludCBpO1xuMzE3NzpcdFxuMzE3ODpcdFx0aWYgKGlzNjN4eChkZXYpKVxuMzE3OTpcdFx0XHRjaGlwX2lkID0gQkNNNjNYWF9ERVZJQ0VfSUQ7XG4zMTgwOlx0XG4zMTgxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGI1M19zd2l0Y2hfY2hpcHMpOyBpJiM0MzsmIzQzOykge1xuMzE4MjpcdFx0XHRjb25zdCBzdHJ1Y3QgYjUzX2NoaXBfZGF0YSAqY2hpcCA9IFx1MDAyNmI1M19zd2l0Y2hfY2hpcHNbaV07XG4zMTgzOlx0XG4zMTg0Olx0XHRcdGlmIChjaGlwLVx1MDAzZWNoaXBfaWQgPT0gY2hpcF9pZCkge1xuMzE4NTpcdFx0XHRcdGlmICghZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMpXG4zMTg2Olx0XHRcdFx0XHRkZXYtXHUwMDNlZW5hYmxlZF9wb3J0cyA9IGNoaXAtXHUwMDNlZW5hYmxlZF9wb3J0cztcbjMxODc6XHRcdFx0XHRkZXYtXHUwMDNlbmFtZSA9IGNoaXAtXHUwMDNlZGV2X25hbWU7XG4zMTg4Olx0XHRcdFx0ZGV2LVx1MDAzZWR1cGxleF9yZWcgPSBjaGlwLVx1MDAzZWR1cGxleF9yZWc7XG4zMTg5Olx0XHRcdFx0ZGV2LVx1MDAzZXZ0YV9yZWdzWzBdID0gY2hpcC1cdTAwM2V2dGFfcmVnc1swXTtcbjMxOTA6XHRcdFx0XHRkZXYtXHUwMDNldnRhX3JlZ3NbMV0gPSBjaGlwLVx1MDAzZXZ0YV9yZWdzWzFdO1xuMzE5MTpcdFx0XHRcdGRldi1cdTAwM2V2dGFfcmVnc1syXSA9IGNoaXAtXHUwMDNldnRhX3JlZ3NbMl07XG4zMTkyOlx0XHRcdFx0ZGV2LVx1MDAzZWp1bWJvX3BtX3JlZyA9IGNoaXAtXHUwMDNlanVtYm9fcG1fcmVnO1xuMzE5MzpcdFx0XHRcdGRldi1cdTAwM2VpbXBfcG9ydCA9IGNoaXAtXHUwMDNlaW1wX3BvcnQ7XG4zMTk0Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV92bGFucyA9IGNoaXAtXHUwMDNldmxhbnM7XG4zMTk1Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV9hcmxfYmlucyA9IGNoaXAtXHUwMDNlYXJsX2JpbnM7XG4zMTk2Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV9hcmxfYnVja2V0cyA9IGNoaXAtXHUwMDNlYXJsX2J1Y2tldHM7XG4zMTk3Olx0XHRcdFx0ZGV2LVx1MDAzZWFybF9vcHMgPSBjaGlwLVx1MDAzZWFybF9vcHM7XG4zMTk4Olx0XHRcdFx0YnJlYWs7XG4zMTk5Olx0XHRcdH1cbjMyMDA6XHRcdH1cbjMyMDE6XHRcbjMyMDI6XHRcdC8qIGNoZWNrIHdoaWNoIEJDTTUzMjV4IHZlcnNpb24gd2UgaGF2ZSAqL1xuMzIwMzpcdFx0aWYgKGlzNTMyNShkZXYpKSB7XG4zMjA0Olx0XHRcdHU4IHZjNDtcbjMyMDU6XHRcbjMyMDY6XHRcdFx0YjUzX3JlYWQ4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDRfMjUsIFx1MDAyNnZjNCk7XG4zMjA3Olx0XG4zMjA4Olx0XHRcdC8qIGNoZWNrIHJlc2VydmVkIGJpdHMgKi9cbjMyMDk6XHRcdFx0c3dpdGNoICh2YzQgXHUwMDI2IDMpIHtcbjMyMTA6XHRcdFx0Y2FzZSAxOlxuMzIxMTpcdFx0XHRcdC8qIEJDTTUzMjVFICovXG4zMjEyOlx0XHRcdFx0YnJlYWs7XG4zMjEzOlx0XHRcdGNhc2UgMzpcbjMyMTQ6XHRcdFx0XHQvKiBCQ001MzI1RiAtIGRvIG5vdCB1c2UgcG9ydCA0ICovXG4zMjE1Olx0XHRcdFx0ZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMgXHUwMDI2PSB+QklUKDQpO1xuMzIxNjpcdFx0XHRcdGJyZWFrO1xuMzIxNzpcdFx0XHRkZWZhdWx0OlxuMzIxODpcdC8qIE9uIHRoZSBCQ000N1hYIFNvQ3MgdGhpcyBpcyB0aGUgc3VwcG9ydGVkIGludGVybmFsIHN3aXRjaC4qL1xuMzIxOTpcdCNpZm5kZWYgQ09ORklHX0JDTTQ3WFhcbjMyMjA6XHRcdFx0XHQvKiBCQ001MzI1TSAqL1xuMzIyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzIyMjpcdCNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEI1MyBEcml2ZXIgQ29kZSBpbiBhIFN5emthbGxlciBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kLCBpbml0aWFsbHksIGBiNTNfc3dpdGNoX2luaXRgIGlzIGNvbmNlcm5pbmcuIEl0IHJlYWRzIGhhcmR3YXJlLCB3aGljaCBtZWFucyBpdCB3aWxsIHByb2JhYmx5IGNyYXNoIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudC4gQnV0IHdoYXQgaWYgYGlzNTMyNShkZXYpYCBpcyBmYWxzZT8gVGhlbiB3ZSBtb3ZlIG9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gd2UgZ2V0IHRvIGBiNTNfbW1hcF9wcm9iZWAgdmlhIGZ1enppbmc/CgpTeXprYWxsZXIgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgaXNuJiMzOTt0IHN0cmFpZ2h0Zm9yd2FyZC4gQW5kIHRoZSBjcnVjaWFsIERTQSBjaGFuZ2VzIGRlcGVuZCBvbiBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGJlaW5nIHRydWUsIHdoaWNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBleGNsdXNpdmVseSBzZXQgYnkgYGI1M2AuIElmIGBiNTNgIGlzIHVucmVhY2hhYmxlLCB0aGVzZSBEU0EgcGFydHMgYXJlIGFsc28gb3V0IG9mIHJlYWNoLiBDb3VsZCB3ZSBwcm9iZSBgYjUzYCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uPyBOb3Qgd2l0aCBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXBzIChHQ0UvUUVNVSksIGFzIGl0IGRvZXNuJiMzOTt0IHN1cHBvcnQgb24tdGhlLWZseSBkZXZpY2UgdHJlZSBub2RlIGluamVjdGlvbi4gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIHNvIEkmIzM5O20gY2VydGFpbiBgYjUzX2NvbW1vbi5jYCBpcyB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBzZXQuCgpGdW5jdGlvbnMgbGlrZSBgYjUzX3ZsYW5fYWRkYCwgYGI1M192bGFuX2RlbGAsIGBiNTNfYnJfam9pbmAsIGFuZCB0aGUgcmVzdCBhcmUgYWxzbyBkZWZpbmVkIHdpdGhpbiBgYjUzX2NvbW1vbi5jYC4gVGhlcmVmb3JlLCB0aGUgZW50aXJlIHBhdGNoIHNlZW1zIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGBiNTNgIGRyaXZlci4gU2luY2UgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSB0aGF0IGhhcmR3YXJlIGluIFFFTVUvR0NFLCBpdCYjMzk7cyB2aXJ0dWFsbHkgdW5yZWFjaGFibGUuCgpJcyB0aGVyZSBzb21lIGR1bW15IGRyaXZlciBvciBhIG1vY2sgdGhhdCB1c2VzIGBiNTNgPyBObywgaXQmIzM5O3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSXMgdGhlIGBiNTNgIGRyaXZlciBldmVuIGNvbXBpbGVkIGludG8gdGhlIFN5emthbGxlciBrZXJuZWxzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZywgYnV0IGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIGl0IHdvbiYjMzk7dCBwcm9iZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4KCk5vdywgYGI1M19tbWFwYCB1c2VzIHBsYXRmb3JtIGRhdGEgb3IgZGV2aWNlIHRyZWUuIENhbiB3ZSByZWdpc3RlciBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcz8gV2UgY2FuJiMzOTt0IHVzZSBgL3N5cy9idXMvcGxhdGZvcm0vZHJpdmVycy9iNTMtbW1hcC9iaW5kYCBiZWNhdXNlIHRoZXJlIG5lZWRzIHRvIGJlIGEgZGV2aWNlIGFscmVhZHkuIFdlIGNhbiYjMzk7dCBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlOyB0aGVyZSBpc24mIzM5O3QgYSBkcml2ZXIgbGlrZSBhICYjMzk7cGxhdGZvcm0tZGV2aWNlLWNyZWF0b3ImIzM5Oy4gU3l6a2FsbGVyIGhhcyB1dGlsaXRpZXMgZm9yIGdlbmV0bGluayBhbmQgb3RoZXIgdGhpbmdzLCBidXQgbm90IGZvciBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24uCgpXYWl0LCB3aGF0IGFib3V0IGBiY21fc2YyYD8gVGhhdCYjMzk7cyBhbHNvIGEgcGxhdGZvcm0gZHJpdmVyLiBBbmQgYGI1M19tZGlvYD8gSXQmIzM5O3MgYW4gTURJTyBkcml2ZXIuIFN5emthbGxlciBzb21ldGltZXMgaGFuZGxlcyBNRElPIGRldmljZXMgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIE1ESU8gYnVzIChgZHNhX2xvb3BgLCBgbWFjYmAsIGV0Yy4pLiBIb3dldmVyLCBgYjUzX21kaW9gIGRlbWFuZHMgc3BlY2lmaWMgUEhZIElEcywgb3IgZGV2aWNlIHRyZWUuIEkgbmVlZCB0byBleGFtaW5lIGBiNTNfbWRpb19kcml2ZXJgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX21kaW9fZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zODk9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYjUzX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zOTAtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzkxOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgYjUzX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Mi1cdC5wcm9iZVx0PSBiNTNfbWRpb19wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk5LX07XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6NDAwOm1kaW9fbW9kdWxlX2RyaXZlcihiNTNfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTQwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGI1M19tZGlvX3Byb2JlYCBmdW5jdGlvbiB3b3Jrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGl0IGFuZCB0aGUgYXNzb2NpYXRlZCBtYXRjaCB0YWJsZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGludGVudCBhbmQgY2FwYWJpbGl0aWVzLiBJdCYjMzk7cyBsaWtlbHkgdGhlIG1hdGNoIHRhYmxlIHdpbGwgcmV2ZWFsIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoLCB3aGljaCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXN0IG9mIHRoZSBwcm9iZSByb3V0aW5lLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHByb2JlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWdpc3RlciBhY2Nlc3MsIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX29mX21hdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zNjM9c3RhdGljIHZvaWQgYjUzX21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNzQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzc1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGI1M19vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM3Ni1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGJjbTUzMjVcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzg4LX07XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzg5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGI1M19vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzkwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jPTM5MT1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGI1M19tZGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk2LVx0XHQubmFtZSA9IFwmIzM0O2JjbTUzeHhcJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzk3Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBiNTNfb2ZfbWF0Y2gsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRGV2aWNlIFRyZWUgQ29tcGF0aWJpbGl0eSBhbmQgQ292ZXJhZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgc2l0dWF0aW9uLCBhbmQgdGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUga2V5ZWQgdG8gbWF0Y2hpbmcgb24gY29tcGF0aWJsZSBzdHJpbmdzIHdpdGhpbiB0aGUgZGV2aWNlIHRyZWUgaXRzZWxmLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSByZWdhcmRpbmcgZnV6emluZy4gU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgZG9lc24mIzM5O3QgZ2VuZXJhdGUgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBkb2VzIGl0PyBUaGF0JiMzOTtzIGEgaHVnZSBmYWN0b3IgdG8gY29uc2lkZXIgYmVjYXVzZSBpdCBtZWFucyBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gdGhlIERULCB0aGUgZnV6emluZyBjb3ZlcmFnZSBpcyBsaW1pdGVkLgoKSSBuZWVkIHRvIGV4cGxvcmUgc3BlY2lmaWMgZXhhbXBsZXMuIE5vdywgd2hhdCBhYm91dCB0aGUgYGI1M19zcGlgIGRyaXZlcj8gSG93IGRvZXMgKnRoYXQqIGRyaXZlciBoYW5kbGUgdGhpbmdzPyBUaGUgYGI1M19zcGlgIGlzIGEgY29tbW9ubHkgdXNlZCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5ncyBpdCB1dGlsaXplcyBpcyBlc3NlbnRpYWwgZm9yIGNvdmVyYWdlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhhdCBvbmUuIEkgd29uZGVyIGhvdyB0aGUgc2l0dWF0aW9uIHdpbGwgY2hhbmdlIGlmIG90aGVyIHBsYXRmb3JtcyB1dGlsaXplIGRldmljZSB0cmVlIGVudHJpZXM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1M19zcGlfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTM1OT1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgYjUzX3NwaV9pZHMpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzYwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzYxOnN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBiNTNfc3BpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2Mi1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzcxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzcyOm1vZHVsZV9zcGlfZHJpdmVyKGI1M19zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM3My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYjUzIGFuZCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyBSZWxhdGlvbnNoaXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIHRoZSBkZXZpY2UgdHJlZSBvciBzb21lIGJvYXJkIGNvZGUuIFRoZSBpbXBsaWNhdGlvbiBpcywgYmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgdGhhdCBgYjUzYCBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgdGhhdCBwYXRoIGlzIHVuYXZhaWxhYmxlLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgYSBiYWNrZG9vcj8gQ2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZ2Agd2l0aCB0aGF0IGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZyBhY3RpdmUgd2l0aG91dCBuZWVkaW5nIGBiNTNgPyBObywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gd29yay4gTXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZDogdGhhdCBmbGFnJiMzOTtzIG9ubHkgc2V0IGR1cmluZyBgYjUzX3N3aXRjaF9hbGxvY2AuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4uIExldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBvdGhlciBmaWxlcyB0byB2ZXJpZnkgdGhhdCBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWUgc2Vjb25kYXJ5IG1lY2hhbmlzbSBmb3Igc2V0dGluZyBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk2LVx0ZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyOTc6XHRkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk4LVxuLS1cbm5ldC9kc2EvdXNlci5jPTE5Mjk9c3RhdGljIGludCBkc2FfdXNlcl9jbGVhcl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbm5ldC9kc2EvdXNlci5jOjE5NDk6ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxubmV0L2RzYS91c2VyLmMtMTk1MC0gKiAgICAgICAoZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MzcKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKioKCk9rYXksIHNvIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlIGlzIHRoZSBrZXkgaGVyZS4gSSBrbm93IHRoYXQmIzM5O3MgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgdGhlIGNydWNpYWwgZmxhZyBpcyBzZXQuIFRoaW5raW5nIGFib3V0IGl0LCBgYjUzYCBpcyBkZWZpbml0ZWx5IGEgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIGRyaXZlci4gSXQgd291bGRuJiMzOTt0IGluc3RhbnRpYXRlIG9yIGZ1bmN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIG5vIGNoYW5jZSwgbm90IHdpdGhvdXQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIGNhcmVmdWxseSBjcmFmdGVkIGRldmljZSB0cmVlIGluamVjdGlvbiwgd2hpY2ggc3l6a2FsbGVyIHdvdWxkbiYjMzk7dCBiZSBkb2luZy4gU28sIGFueSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUgaW4gcGxhY2VzIGxpa2UgR0NFIG9yIFFFTVUuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlLXJlYWQgdGhlIGluc3RydWN0aW9ucy4uLiBSaWdodCwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBpbnZvbHZlOgoKKiAgIFBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgQ29kZSB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMuCgpBbmQgdGhpcyAqaXMqIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgKEJyb2FkY29tIEJDTTUzeHgpLiBJdCBleHBsaWNpdGx5IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGJpbmRpbmcgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBsb2NrZWQgYmVoaW5kIGEgZmxhZyB0aGF0IG9ubHkgdGhpcyBkcml2ZXIgY2FuIHNldC4gR2l2ZW4gYWxsIHRoYXQsIGl0JiMzOTtzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTowMi42OTQ5NjE5MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMzM4NzY0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MDIuNjk0OTcxMTg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODg4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxODoxOTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXFxuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXFxuQEAgLTg5OCwxMCArODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4gXFx0cmV0dXJuIGRwLVxcdTAwM2VicmlkZ2UgPT0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYjUzX3ZsYW4gKmh3KVxcbit7XFxuK1xcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBzdGFuZGFsb25lID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXG4rXFx0Kmh3ID0gKnZsO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aHctXFx1MDAzZW1lbWJlcnMgPSAwO1xcbitcXHRody1cXHUwMDNldW50YWcgPSAwO1xcbitcXG4rXFx0YjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBwb3J0KSB7XFxuK1xcdFxcdGlmICghKHZsLVxcdTAwM2VtZW1iZXJzIFxcdTAwMjYgQklUKHBvcnQpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFxuK1xcdFxcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRcXHRpZiAoZHAtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRzdGFuZGFsb25lID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aHctXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbitcXHRcXHRody1cXHUwMDNldW50YWcgfD0gdmwtXFx1MDAzZXVudGFnIFxcdTAwMjYgQklUKHBvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXN0YW5kYWxvbmUpIHtcXG4rXFx0XFx0aHctXFx1MDAzZW1lbWJlcnMgPSAwO1xcbitcXHRcXHRody1cXHUwMDNldW50YWcgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc3RhbmRhbG9uZTtcXG4rfVxcbitcXG4gaW50IGI1M19jb25maWd1cmVfdmxhbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gdmwgPSB7IDAgfTtcXG4rXFx0c3RydWN0IGI1M192bGFuIGh3O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gKnY7XFxuIFxcdGludCBpLCBkZWZfdmlkO1xcbiBcXHR1MTYgdmlkO1xcbkBAIC05MzcsMjAgKzk3OSwyMyBAQCBpbnQgYjUzX2NvbmZpZ3VyZV92bGFuKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0fVxcbiBcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCBcXHUwMDI2dmwpO1xcbiBcXG4tXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcXG4tXFx0XFx0LyogVXBvbiBpbml0aWFsIGNhbGwgd2UgaGF2ZSBub3Qgc2V0LXVwIGFueSBWTEFOcywgYnV0IHVwb25cXG4tXFx0XFx0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRmb3IgKHZpZCA9IGRlZl92aWQgKyAxOyB2aWQgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV92bGFuczsgdmlkKyspIHtcXG4tXFx0XFx0XFx0diA9IFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5zW3ZpZF07XFxuK1xcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXFxuK1xcdCAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fdmxhbnM7IHZpZCsrKSB7XFxuK1xcdFxcdHYgPSBcXHUwMDI2ZGV2LVxcdTAwM2V2bGFuc1t2aWRdO1xcbiBcXG4tXFx0XFx0XFx0aWYgKCF2LVxcdTAwM2VtZW1iZXJzKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCF2LVxcdTAwM2VtZW1iZXJzKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgdik7XFxuLVxcdFxcdFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIWI1M192bGFuX2h3X2VudHJ5KGRzLCB2LCBcXHUwMDI2aHcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgXFx1MDAyNmh3KTtcXG4rXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2aWQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZykge1xcbiBcXHRcXHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIGkpIHtcXG4gXFx0XFx0XFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKVxcbiBcXHRcXHRcXHRcXHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsXFxuQEAgLTE3MjAsNiArMTc2NSw3IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRib29sIHVudGFnZ2VkID0gdmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xcbiBcXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG4rXFx0c3RydWN0IGI1M192bGFuIGh3O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xcbiBcXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNzUxLDEzICsxNzk3LDE0IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHR2bC1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4gXFxuLVxcdGlmICghZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZylcXG4rXFx0aWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFxcdTAwMjZodykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi1cXHUwMDNldmlkLCB2bCk7XFxuK1xcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXFx1MDAzZXZpZCwgXFx1MDAyNmh3KTtcXG4gXFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVxcdTAwM2V2aWQpO1xcbiBcXG4tXFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpIFxcdTAwMjZcXHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XFxuK1xcdGlmIChkZXYtXFx1MDAzZXZsYW5fZmlsdGVyaW5nIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSBcXHUwMDI2XFx1MDAyNiBuZXdfcHZpZCAhPSBvbGRfcHZpZCkge1xcbiBcXHRcXHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX1BPUlRfREVGX1RBRyhwb3J0KSxcXG4gXFx0XFx0XFx0ICAgIG5ld19wdmlkKTtcXG4gXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBvbGRfcHZpZCk7XFxuQEAgLTE3NzIsNyArMTgxOSw5IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4ge1xcbiBcXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuIFxcdGJvb2wgdW50YWdnZWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQ7XFxuK1xcdHN0cnVjdCBiNTNfdmxhbiBodztcXG4gXFx0c3RydWN0IGI1M192bGFuICp2bDtcXG4rXFx0Ym9vbCBuZWVkc19odztcXG4gXFx0dTE2IHB2aWQ7XFxuIFxcbiBcXHRpZiAodmxhbi1cXHUwMDNldmlkID09IDApXFxuQEAgLTE3ODIsNiArMTgzMSw4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFxuIFxcdHZsID0gXFx1MDAyNmRldi1cXHUwMDNldmxhbnNbdmxhbi1cXHUwMDNldmlkXTtcXG4gXFxuK1xcdG5lZWRzX2h3ID0gYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXG4gXFx0dmwtXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4gXFxuIFxcdGlmIChwdmlkID09IHZsYW4tXFx1MDAzZXZpZClcXG5AQCAtMTc5MSwxNCArMTg0MiwxOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdGlmICh1bnRhZ2dlZCBcXHUwMDI2XFx1MDAyNiAhYjUzX3ZsYW5fcG9ydF9uZWVkc19mb3JjZWRfdGFnZ2VkKGRzLCBwb3J0KSlcXG4gXFx0XFx0dmwtXFx1MDAzZXVudGFnIFxcdTAwMjY9IH4oQklUKHBvcnQpKTtcXG4gXFxuLVxcdGlmICghZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZylcXG4rXFx0aWYgKCFuZWVkc19odylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVxcdTAwM2V2aWQsIHZsKTtcXG4rXFx0YjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVxcdTAwM2V2aWQsIFxcdTAwMjZodyk7XFxuIFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmxhbi1cXHUwMDNldmlkKTtcXG4gXFxuLVxcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcXG4tXFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcXG4rXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcXG4rXFx0XFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksXFxuK1xcdFxcdFxcdCAgICBwdmlkKTtcXG4rXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjI2MSw2ICsyMzE2LDI4IEBAIGludCBiNTNfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xcbiBcXG4rc3RhdGljIHZvaWQgYjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBiNTNfdmxhbiBodztcXG4rXFx0c3RydWN0IGI1M192bGFuICp2bDtcXG4rXFx0dTE2IHZpZDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZXZsYW5fZmlsdGVyaW5nKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKHZpZCA9IGI1M19kZWZhdWx0X3B2aWQoZGV2KSArIDE7IHZpZCBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xcbitcXHRcXHR2bCA9IFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5zW3ZpZF07XFxuK1xcbitcXHRcXHRpZiAoISh2bC1cXHUwMDNlbWVtYmVycyBcXHUwMDI2IEJJVChwb3J0KSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0YjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXHRcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFxcdTAwMjZodyk7XFxuK1xcdFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgYjUzX2JyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxcbiBcXHRcXHRib29sICp0eF9md2Rfb2ZmbG9hZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuQEAgLTIzMjQsNiArMjQwMSw4IEBAIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuIFxcdGI1M193cml0ZTE2KGRldiwgQjUzX1BWTEFOX1BBR0UsIEI1M19QVkxBTl9QT1JUX01BU0socG9ydCksIHB2bGFuKTtcXG4gXFx0ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47XFxuIFxcbitcXHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGI1M19icl9qb2luKTtcXG5AQCAtMjM3Niw2ICsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxcbiBcXHRcXHR2bC1cXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XFxuIFxcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHB2aWQsIHZsKTtcXG4gXFx0fVxcbitcXG4rXFx0YjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woYjUzX2JyX2xlYXZlKTtcXG4gXFxuQEAgLTMyMTMsNiArMzI5NCw3IEBAIHN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXFxuIFxcdCAqIGRldmljZXMuIChub3QgaGFyZHdhcmUgc3VwcG9ydGVkKVxcbiBcXHQgKi9cXG4gXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuK1xcdGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZ19tdXRleCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlc3RhdHNfbXV0ZXgpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uNjdhMDFmYzVmODFlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTQwNSw2ICs0MDUsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaCB7XFxuIFxcdC8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi9cXG4gXFx0dTMyXFx0XFx0XFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZzoxO1xcbiBcXG4rXFx0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xcbitcXHR1MzJcXHRcXHRcXHRuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDoxO1xcbitcXG4gXFx0LyogUGFzcyAucG9ydF92bGFuX2FkZCBhbmQgLnBvcnRfdmxhbl9kZWwgdG8gZHJpdmVycyBldmVuIGZvciBicmlkZ2VzXFxuIFxcdCAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kXFxuIFxcdCAqIHRoZW4gdGhlIG9wdGlvbiB3b3VsZCBnZXQgcmVtb3ZlZCksIGJ1dCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhpc1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jXFxuaW5kZXggMWY1NTM2YzBkZmZjMi4uZTYxYWJjN2M3NGY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3BvcnQuY1xcbisrKyBiL25ldC9kc2EvcG9ydC5jXFxuQEAgLTgzMSw2ICs4MzEsOSBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcXG4gXFx0XFx0XFx0aWYgKCF1c2VyKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbkBAIC04MzksMTAgKzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHAtXFx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XFxuIFxcbi1cXHRcXHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZHAtXFx1MDAzZXVzZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcdFxcdGlmICghZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKSB7XFxuK1xcdFxcdFxcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cXHUwMDNldXNlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ0NSwxMCArMTQ1MCwxMyBAQCBpbnQgZHNhX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXFxuIFxcbiBcXHQvKiBUaGUgcG9ydCBtaWdodCBzdGlsbCBiZSBWTEFOIGZpbHRlcmluZyBldmVuIGlmIGl0J3Mgbm8gbG9uZ2VyXFxuIFxcdCAqIHVuZGVyIGEgYnJpZGdlLCBlaXRoZXIgZHVlIHRvIGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgb3JcXG4tXFx0ICogZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOc1xcbi1cXHQgKiBvbiB0aGUgQ1BVIHBvcnQuXFxuK1xcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nLCBhbmQgZXZlcnkgcG9ydCBvZiBhXFxuK1xcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCBzd2l0Y2gga2VlcHMgaXRzIDgwMjFxIHVwcGVyXFxuK1xcdCAqIFZMQU5zIHdoZXRoZXIgYnJpZGdlZCBvciBub3QuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcyBvbiB0aGVcXG4rXFx0ICogQ1BVIHBvcnQuXFxuIFxcdCAqL1xcbi1cXHR2bGFuX2ZpbHRlcmluZyA9IGRzYV9wb3J0X2lzX3ZsYW5fZmlsdGVyaW5nKGRwKTtcXG4rXFx0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcXG4rXFx0XFx0XFx0IGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDtcXG4gXFx0aWYgKHZsYW5fZmlsdGVyaW5nKSB7XFxuIFxcdFxcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkZXYsIGZhbHNlKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXFxuaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3VzZXIuY1xcbisrKyBiL25ldC9kc2EvdXNlci5jXFxuQEAgLTE5NDYsNiArMTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbiAgKlxcbiAgKiAtIElmIHN0YW5kYWxvbmUgKHRoaXMgaW5jbHVkZXMgc29mdHdhcmUgYnJpZGdlLCBzb2Z0d2FyZSBMQUcpOlxcbiAgKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxuKyAqICAgICAgIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmXFxuICAqICAgICAgIChkcy1cXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcXG4gICogICAgICAgdGhpcyBzd2l0Y2ggY2hpcCB3aGljaCBoYXZlIHZsYW5fZmlsdGVyaW5nPTEpXFxuICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnNcXG5AQCAtMjcxNyw3ICsyNzE4LDggQEAgdm9pZCBkc2FfdXNlcl9zZXR1cF90YWdnZXIoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXIpXFxuIFxcdHVzZXItXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XFxuIFxcdGlmICh1c2VyLVxcdTAwM2VuZWVkZWRfdGFpbHJvb20pXFxuIFxcdFxcdHVzZXItXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QpO1xcbi1cXHRpZiAoZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcpXFxuK1xcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fFxcbitcXHQgICAgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxcbiBcXHRcXHR1c2VyLVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbiBcXHR1c2VyLVxcdTAwM2VsbHR4ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MDQuMjAxOTEzMzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcxODI2ODkyNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE4OjE5OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuQEAgLTg5OCwxMCArODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiBcdHJldHVybiBkcC1cdTAwM2VicmlkZ2UgPT0gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpXG4re1xuK1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRib29sIHN0YW5kYWxvbmUgPSBmYWxzZTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcbitcdCpodyA9ICp2bDtcbitcbitcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aHctXHUwMDNlbWVtYmVycyA9IDA7XG4rXHRody1cdTAwM2V1bnRhZyA9IDA7XG4rXG4rXHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIHBvcnQpIHtcbitcdFx0aWYgKCEodmwtXHUwMDNlbWVtYmVycyBcdTAwMjYgQklUKHBvcnQpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4rXG4rXHRcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuK1x0XHRcdGlmIChkcC1cdTAwM2VicmlkZ2UpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRzdGFuZGFsb25lID0gdHJ1ZTtcbitcdFx0fVxuK1xuK1x0XHRody1cdTAwM2VtZW1iZXJzIHw9IEJJVChwb3J0KTtcbitcdFx0aHctXHUwMDNldW50YWcgfD0gdmwtXHUwMDNldW50YWcgXHUwMDI2IEJJVChwb3J0KTtcbitcdH1cbitcbitcdGlmICghc3RhbmRhbG9uZSkge1xuK1x0XHRody1cdTAwM2VtZW1iZXJzID0gMDtcbitcdFx0aHctXHUwMDNldW50YWcgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHN0YW5kYWxvbmU7XG4rfVxuK1xuIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IGI1M192bGFuIHZsID0geyAwIH07XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4gXHRzdHJ1Y3QgYjUzX3ZsYW4gKnY7XG4gXHRpbnQgaSwgZGVmX3ZpZDtcbiBcdHUxNiB2aWQ7XG5AQCAtOTM3LDIwICs5NzksMjMgQEAgaW50IGI1M19jb25maWd1cmVfdmxhbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCBcdTAwMjZ2bCk7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSB7XG4tXHRcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4tXHRcdCAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLlxuLVx0XHQgKi9cbi1cdFx0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuLVx0XHRcdHYgPSBcdTAwMjZkZXYtXHUwMDNldmxhbnNbdmlkXTtcbitcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4rXHQgKiBzeXN0ZW0gcmVzdW1lLCB3ZSBuZWVkIHRvIHJlc3RvcmUgYWxsIFZMQU4gZW50cmllcy5cbitcdCAqL1xuK1x0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuK1x0XHR2ID0gXHUwMDI2ZGV2LVx1MDAzZXZsYW5zW3ZpZF07XG4gXG4tXHRcdFx0aWYgKCF2LVx1MDAzZW1lbWJlcnMpXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCF2LVx1MDAzZW1lbWJlcnMpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTtcbi1cdFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4tXHRcdH1cbitcdFx0aWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdiwgXHUwMDI2aHcpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFx1MDAyNmh3KTtcbitcdFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2aWQpO1xuK1x0fVxuK1xuK1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZykge1xuIFx0XHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIGkpIHtcbiBcdFx0XHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgaSkpXG4gXHRcdFx0XHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsXG5AQCAtMTcyMCw2ICsxNzY1LDcgQEAgaW50IGI1M192bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbiBcdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbitcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4gXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xuIFx0aW50IGVycjtcbkBAIC0xNzUxLDEzICsxNzk3LDE0IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGVsc2VcbiBcdFx0dmwtXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRpZiAoIWI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCB2bCk7XG4rXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgXHUwMDI2aHcpO1xuIFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVx1MDAzZXZpZCk7XG4gXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4rXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpIFx1MDAyNlx1MDAyNiBuZXdfcHZpZCAhPSBvbGRfcHZpZCkge1xuIFx0XHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX1BPUlRfREVGX1RBRyhwb3J0KSxcbiBcdFx0XHQgICAgbmV3X3B2aWQpO1xuIFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIG9sZF9wdmlkKTtcbkBAIC0xNzcyLDcgKzE4MTksOSBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4ge1xuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbitcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4rXHRib29sIG5lZWRzX2h3O1xuIFx0dTE2IHB2aWQ7XG4gXG4gXHRpZiAodmxhbi1cdTAwM2V2aWQgPT0gMClcbkBAIC0xNzgyLDYgKzE4MzEsOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXG4gXHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2bGFuLVx1MDAzZXZpZF07XG4gXG4rXHRuZWVkc19odyA9IGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuK1xuIFx0dmwtXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4gXG4gXHRpZiAocHZpZCA9PSB2bGFuLVx1MDAzZXZpZClcbkBAIC0xNzkxLDE0ICsxODQyLDE4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGlmICh1bnRhZ2dlZCBcdTAwMjZcdTAwMjYgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfihCSVQocG9ydCkpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRpZiAoIW5lZWRzX2h3KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCB2bCk7XG4rXHRiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbitcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCBcdTAwMjZodyk7XG4gXHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tXHUwMDNldmlkKTtcbiBcbi1cdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcbi1cdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4rXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSB7XG4rXHRcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLFxuK1x0XHRcdCAgICBwdmlkKTtcbitcdFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMjYxLDYgKzIzMTYsMjggQEAgaW50IGI1M19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xuIFxuK3N0YXRpYyB2b2lkIGI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xuK1x0dTE2IHZpZDtcbitcbitcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAodmlkID0gYjUzX2RlZmF1bHRfcHZpZChkZXYpICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuK1x0XHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuK1xuK1x0XHRpZiAoISh2bC1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQocG9ydCkpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbitcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCBcdTAwMjZodyk7XG4rXHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcbitcdH1cbit9XG4rXG4gaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSxcbiBcdFx0Ym9vbCAqdHhfZndkX29mZmxvYWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5AQCAtMjMyNCw2ICsyNDAxLDggQEAgaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSxcbiBcdGI1M193cml0ZTE2KGRldiwgQjUzX1BWTEFOX1BBR0UsIEI1M19QVkxBTl9QT1JUX01BU0socG9ydCksIHB2bGFuKTtcbiBcdGRldi1cdTAwM2Vwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47XG4gXG4rXHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfYnJfam9pbik7XG5AQCAtMjM3Niw2ICsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuIFx0XHR2bC1cdTAwM2VtZW1iZXJzIHw9IEJJVChwb3J0KTtcbiBcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgcHZpZCwgdmwpO1xuIFx0fVxuK1xuK1x0YjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGI1M19icl9sZWF2ZSk7XG4gXG5AQCAtMzIxMyw2ICszMjk0LDcgQEAgc3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbiBcdCAqIGRldmljZXMuIChub3QgaGFyZHdhcmUgc3VwcG9ydGVkKVxuIFx0ICovXG4gXHRkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlO1xuK1x0ZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzX211dGV4KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi42N2EwMWZjNWY4MWVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtNDA1LDYgKzQwNSw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoIHtcbiBcdC8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi9cbiBcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmc6MTtcbiBcbitcdC8qIE9mZmxvYWQgODAyMXEgdXBwZXJzIG9mIHN0YW5kYWxvbmUgcG9ydHMgZXZlbiB3aGVuIG5vdCBmaWx0ZXJpbmcgKi9cbitcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOjE7XG4rXG4gXHQvKiBQYXNzIC5wb3J0X3ZsYW5fYWRkIGFuZCAucG9ydF92bGFuX2RlbCB0byBkcml2ZXJzIGV2ZW4gZm9yIGJyaWRnZXNcbiBcdCAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kXG4gXHQgKiB0aGVuIHRoZSBvcHRpb24gd291bGQgZ2V0IHJlbW92ZWQpLCBidXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoaXNcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jXG5pbmRleCAxZjU1MzZjMGRmZmMyLi5lNjFhYmM3Yzc0ZjczIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9wb3J0LmNcbisrKyBiL25ldC9kc2EvcG9ydC5jXG5AQCAtODMxLDYgKzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLFxuIFx0XHRcdGlmICghdXNlcilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyh1c2VyLFxuIFx0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4gXHRcdFx0aWYgKGVycilcbkBAIC04MzksMTAgKzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcbiBcdH0gZWxzZSB7XG4gXHRcdGRwLVx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XG4gXG4tXHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLVx0XHRcdFx0XHRcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gcmVzdG9yZTtcbitcdFx0aWYgKCFkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xuK1x0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuK1x0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gcmVzdG9yZTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0NSwxMCArMTQ1MCwxMyBAQCBpbnQgZHNhX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4gXG4gXHQvKiBUaGUgcG9ydCBtaWdodCBzdGlsbCBiZSBWTEFOIGZpbHRlcmluZyBldmVuIGlmIGl0J3Mgbm8gbG9uZ2VyXG4gXHQgKiB1bmRlciBhIGJyaWRnZSwgZWl0aGVyIGR1ZSB0byBkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgb3Jcbi1cdCAqIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOc1xuLVx0ICogb24gdGhlIENQVSBwb3J0LlxuK1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZywgYW5kIGV2ZXJ5IHBvcnQgb2YgYVxuK1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgc3dpdGNoIGtlZXBzIGl0cyA4MDIxcSB1cHBlclxuK1x0ICogVkxBTnMgd2hldGhlciBicmlkZ2VkIG9yIG5vdC4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zIG9uIHRoZVxuK1x0ICogQ1BVIHBvcnQuXG4gXHQgKi9cbi1cdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApO1xuK1x0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcbitcdFx0XHQgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ7XG4gXHRpZiAodmxhbl9maWx0ZXJpbmcpIHtcbiBcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRldiwgZmFsc2UpO1xuIFx0XHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE5NDYsNiArMTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxuICAqXG4gICogLSBJZiBzdGFuZGFsb25lICh0aGlzIGluY2x1ZGVzIHNvZnR3YXJlIGJyaWRnZSwgc29mdHdhcmUgTEFHKTpcbiAgKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbisgKiAgICAgICBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmXG4gICogICAgICAgKGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWUgQU5EIHRoZXJlIGFyZSBicmlkZ2VzIHNwYW5uaW5nXG4gICogICAgICAgdGhpcyBzd2l0Y2ggY2hpcCB3aGljaCBoYXZlIHZsYW5fZmlsdGVyaW5nPTEpXG4gICogICAgICAgICAtIHRoZSA4MDIxcSB1cHBlciBWTEFOc1xuQEAgLTI3MTcsNyArMjcxOCw4IEBAIHZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxuIFx0dXNlci1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFx0aWYgKHVzZXItXHUwMDNlbmVlZGVkX3RhaWxyb29tKVxuIFx0XHR1c2VyLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCk7XG4tXHRpZiAoZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZylcbitcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XG4rXHQgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXG4gXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuIFx0dXNlci1cdTAwM2VsbHR4ID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjA0LjIwMTkxNjA1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5ODY3OTg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBEU0EgVkxBTiBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgZmxhZywgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCwgaW4gdGhlIGBkc2Ffc3dpdGNoYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gbW9kaWZpZXMgYSBidW5jaCBvZiByZWxhdGVkIGZ1bmN0aW9ucyBpbiBjb3JlIERTQSBjb2RlIGFuZCB0aGUgYGI1M2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBpcywgYWZ0ZXIgYWxsLCBhYm91dCBFdGhlcm5ldCBzd2l0Y2hlcy5cblxuSSBrbm93IHRoZXJlJ3MgYSBgZHNhX2xvb3BgIGRyaXZlciwgd2hpY2ggaXMgYSBtb2NrIERTQSBpbXBsZW1lbnRhdGlvbiwgYnV0IGBiNTNgIGlzIHNwZWNpZmljYWxseSBmb3IgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2hlcy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkgaGFzIG1lIHRoaW5raW5nLiBDb3VsZCBhIG1vY2sgZHJpdmVyIHNvbWVob3cgaGl0IHRoZXNlIGNoYW5nZXM/XG5cbkkgcmVhbGl6ZSB0aGUgY29yZSBEU0EgbW9kaWZpY2F0aW9ucyBhcmUgZ2F0ZWQgYmVoaW5kIGBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBvbmx5IHNldCBpbiBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIGBiNTNfY29tbW9uLmNgLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIEkgZXZlbiBnZXQgYGI1M2AgdG8gaW5zdGFudGlhdGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT9cblxuYGI1M2AgaGFzIHNldmVyYWwgZnJvbnRlbmQgb3B0aW9uczogYGI1M19tbWFwLmNgLCBgYjUzX21kaW8uY2AsIGBiNTNfc3BpLmNgLCBgYjUzX3NyYWIuY2AuICBDb3VsZCBJIGZ1enogdGhpcyB3aXRoIHN5emthbGxlcj8gIFVuZm9ydHVuYXRlbHksIHN5emthbGxlciBkb2Vzbid0IGhhdmUgdGhlIGhhcmR3YXJlIGZvciB0aGVzZSBCcm9hZGNvbSBzd2l0Y2hlcy4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGBiNTNgIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBjb250ZXh0LlxuXG5CdXQsIHdhaXQuLi4gaXMgdGhlcmUgYSB3YXkgdG8gcHJvYmUgYGI1M2AgdmlhIGEgZGV2aWNlIHRyZWUgb3Igc29tZXRoaW5nPyBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZG8gdGhhdCB1bmxlc3MgdGhlcmUncyBhIGN1c3RvbSBzZXR1cCwgdGhvdWdoIGl0ICpkb2VzKiBoYXZlIHNvbWUgdmlydHVhbCBkZXZpY2UgY2FwYWJpbGl0aWVzLiBCdXQgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIuLi4gVGhpcyBmZWVscyBsaWtlIGEgZGVhZCBlbmQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyLCBhbnl3aGVyZSwgdGhhdCBzZXRzIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGA/IEkgc2hvdWxkIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjE0LjE4ODcxNzUzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA3NTEwMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTYtXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzI5NzpcXHRkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTgtXFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaD0zODU9c3RydWN0IGRzYV9zd2l0Y2gge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtNDA4LVxcdC8qIE9mZmxvYWQgODAyMXEgdXBwZXJzIG9mIHN0YW5kYWxvbmUgcG9ydHMgZXZlbiB3aGVuIG5vdCBmaWx0ZXJpbmcgKi9cXG5pbmNsdWRlL25ldC9kc2EuaDo0MDk6XFx0dTMyXFx0XFx0XFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ6MTtcXG5pbmNsdWRlL25ldC9kc2EuaC00MTAtXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz03OTE9aW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy04MzMtXFxubmV0L2RzYS9wb3J0LmM6ODM0OlxcdFxcdFxcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXFxubmV0L2RzYS9wb3J0LmMtODM1LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtODQ0LVxcbm5ldC9kc2EvcG9ydC5jOjg0NTpcXHRcXHRpZiAoIWRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xcbm5ldC9kc2EvcG9ydC5jLTg0Ni1cXHRcXHRcXHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZHAtXFx1MDAzZXVzZXIsXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz0xNDMyPWludCBkc2FfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE0NTMtXFx0ICogZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcsIGFuZCBldmVyeSBwb3J0IG9mIGFcXG5uZXQvZHNhL3BvcnQuYzoxNDU0OlxcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCBzd2l0Y2gga2VlcHMgaXRzIDgwMjFxIHVwcGVyXFxubmV0L2RzYS9wb3J0LmMtMTQ1NS1cXHQgKiBWTEFOcyB3aGV0aGVyIGJyaWRnZWQgb3Igbm90LiBJbiB0dXJuIHRoaXMgbWVhbnMgVkxBTnMgb24gdGhlXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xNDU4LVxcdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApIHx8XFxubmV0L2RzYS9wb3J0LmM6MTQ1OTpcXHRcXHRcXHQgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkO1xcbm5ldC9kc2EvcG9ydC5jLTE0NjAtXFx0aWYgKHZsYW5fZmlsdGVyaW5nKSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xOTI5PXN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxubmV0L2RzYS91c2VyLmM6MTk0OTogKiAgICAgICBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxcbm5ldC9kc2EvdXNlci5jLTE5NTAtICogICAgICAgKGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xcbi0tXFxubmV0L2RzYS91c2VyLmM9MjY5OD12b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI3MjEtXFx0aWYgKGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XFxubmV0L2RzYS91c2VyLmM6MjcyMjpcXHQgICAgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxcbm5ldC9kc2EvdXNlci5jLTI3MjMtXFx0XFx0dXNlci1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOToxNi42OTYyMzQxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTA1NjI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYjUzIERyaXZlciBpbiBhIFN5emthbGxlciBDb250ZXh0KipcblxuT2theSwgc28gSSd2ZSBub3RpY2VkIHRoYXQgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBpcyBleGNsdXNpdmVseSBzZXQgd2l0aGluIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgYjUzYCBkcml2ZXIgaXMgZXZlbiBhY2Nlc3NpYmxlIG9yIHJlbGV2YW50IHdpdGhpbiB0aGUgU3l6a2FsbGVyIGVudmlyb25tZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvZiB0aGUgdmlydHVhbCBkcml2ZXJzIHRoYXQgU3l6a2FsbGVyIHRlc3RzIHVzZSBgYjUzX3N3aXRjaF9hbGxvY2AuIElmIHRoZXkgZG8sIHRoYXQncyBhIGRpcmVjdCBpbmRpY2F0aW9uIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSByZWFjaCB0aGUgcmVsZXZhbnQgY29kZS4gVGhpcyBjaGVjayB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgYSBjcnVjaWFsIGFuc3dlciBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MjEuNTg2Nzk5MDk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk0MjIwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzX3N3aXRjaF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0zMTczPXN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjYzLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyNjQ6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjY1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzMwNC19XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzMwNTpFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMzMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MjkyPXN0YXRpYyBpbnQgYjUzX21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTMzNC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzM1OlxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19tZGlvX29wcywgbWRpb2Rldi1cXHUwMDNlYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzM2LVxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQwNT1zdGF0aWMgaW50IGI1M19tbWFwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQxLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0NDI6XFx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2YjUzX21tYXBfb3BzLCBwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQzLVxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiNTNfbWF4X2FybF9lbnRyaWVzKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjc5LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODA6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjgxLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM9Mjk2PXN0YXRpYyBpbnQgYjUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzAwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjMwMTpcXHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgXFx1MDAyNmI1M19zcGlfb3BzLCBzcGkpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwMi1cXHRpZiAoIWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYz02MTg9c3RhdGljIGludCBiNTNfc3JhYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY0NC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmM6NjQ1OlxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19zcmFiX29wcywgcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY0Ni1cXHRpZiAoIWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9MTM2NT1zdGF0aWMgaW50IGJjbV9zZjJfc3dfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjEzOTA6XFx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2YmNtX3NmMl9pb19vcHMsIHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTM5MS1cXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MjMuNzc2MjI2NDk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MjQ3MTI3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYjUzYCBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBiNTNgIGRyaXZlciDigJMgaXQncyBmb3IgaGFyZHdhcmUgc3dpdGNoZXMsIHJpZ2h0PyBJdCByZWxpZXMgb24gTURJTywgTU1BUCwgU1BJLCBTUkFCLCBhbmQgdGhlIGBiY21fc2YyYCBwbGF0Zm9ybSBkZXZpY2UgdG8gcHJvYmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBtZXRob2RzIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT9cblxuVHlwaWNhbGx5LCBwbGF0Zm9ybSBkZXZpY2VzICpjYW4qIGJlIGluc3RhbnRpYXRlZCBpZiB0aGVyZSdzIGEgZGV2aWNlIHRyZWUgZW50cnkgb3IgbWFudWFsIHJlZ2lzdHJhdGlvbiwgYnV0IHN0YW5kYXJkIHN5emthbGxlciBpc24ndCBzZXQgdXAgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gVW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGluIHN5emthbGxlciwgb3IgYSBtb2R1bGUgdGhhdCBkb2VzIGl0LiBIbW0sIGhvbGQgb24uLi4gYGI1M19tbWFwYCBpcyAqYWxzbyogYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgY2hhbmdlcyB0aGluZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBhdGh3YXkgdG8gdHJpZ2dlciBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIFFFTVUuXG5cbkkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIGlmIGl0J3MgY29uZmlndXJlZCwgYnV0IHRoYXQncyBub3Qgc3RhbmRhcmQgZm9yIGBiNTNgLiBCdXQgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBzb21lIGNvcmUgRFNBIGNvZGUgKGBuZXQvZHNhL3BvcnQuY2AsIGBuZXQvZHNhL3VzZXIuY2ApLiBUaGVzZSBEU0EgY2hhbmdlc+KApiBsZXQncyBsb29rOlxuXG5gYGBjXG5AQCAtODMxLDYgKzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLFxuIFx0XHRcdGlmICghdXNlcilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyh1c2VyLFxuIFx0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG5gYGBcblxuT2theSwgc28gdGhlc2UgY2hhbmdlcyBpbiBEU0EgYXJlIG9ubHkgKmV4ZWN1dGVkKiBpZiBgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGlzIHRydWUuIEJ1dCBpcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIgdGhhdCBzZXRzIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGA/IEkgYWxyZWFkeSBncmVwcGVkIGZvciBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGFuZCBpdCdzIG9ubHkgc2V0IGluIGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AuIFNvIHRoZXNlIERTQSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBgYjUzYCBzd2l0Y2ggaXMgKnByZXNlbnQqLlxuXG5BbmQgdGhhdCdzIHRoZSBraWNrZXIsIGlzbid0IGl0PyBUaGUgYGI1M2AgZHJpdmVyIGlzIGZvciBCcm9hZGNvbSBzd2l0Y2hlczsgaXQgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gcnVuLCBvciBhIGRldmljZSB0cmVlIG5vZGUgdGhhdCdzIGdvaW5nIHRvIGJpbmQgdG8gaXQsIGJ1dCB0aGVuLCB3aXRob3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGl0J3MganVzdCBnb2luZyB0byBmYWlsIGR1cmluZyBwcm9iaW5nLiBNRElPIHJlYWRzIHdpbGwgZmFpbCwgTU1BUCB3aWxsIGZhaWwgdG8gbWFwIG9yIHJlYWQgdGhlIGNvcnJlY3QgSUQgcmVnaXN0ZXJzLCB5b3UgbmFtZSBpdC5cblxuQWxyaWdodCwgbGV0J3MgZ28gYmFjayBhbmQgY2hlY2sgb3V0IGBiNTNfbW1hcF9wcm9iZWAgYW5kIHNlZSBpZiB0aGVyZSdzIGFueSBjaGFuY2UgaXQgY2FuIHN1Y2NlZWQgKndpdGhvdXQqIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQxOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTozNS41MDA5NDE4MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MjkzODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfbW1hcF9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM9MzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyBiNTNfbW1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzozNjE6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZV9vZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYjUzX3BsYXRmb3JtX2RhdGEgKipwcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0MDU6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy00MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQxMy1cXHRpZiAoIXBkYXRhIFxcdTAwMjZcXHUwMDI2IG5wKSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQxNDpcXHRcXHRyZXQgPSBiNTNfbW1hcF9wcm9iZV9vZihwZGV2LCBcXHUwMDI2cGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy00MTUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiNTNfbW1hcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQ5ODpcXHQucHJvYmUgPSBiNTNfbW1hcF9wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDk5LVxcdC5yZW1vdmUgPSBiNTNfbW1hcF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjM4LjU1Mzg4NDg2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzY3NDg0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYjUzX21tYXBfcHJvYmVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBiNTNfbW1hcF9wcm9iZWAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB0aGlzIHJvdXRpbmUgaGFuZGxlcyBtZW1vcnkgbWFwcGluZy4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBNTVUsIGFuZCBwYXJ0aWN1bGFybHkgaG93IGl0IGFjY291bnRzIGZvciB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBvZiB0aGUgQkNNNTN4eCdzIG1lbW9yeSBsYXlvdXQsIGdpdmVuIGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5hdHVyZS4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIEknbGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgcGFnZSBhbGlnbm1lbnQsIHBlcm1pc3Npb24gc2V0dGluZyAocmVhZCwgd3JpdGUsIGV4ZWN1dGUpLCBhbmQgZXJyb3IgY2hlY2tpbmcuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHBsYXRmb3JtJ3MgaW50ZXJydXB0IGhhbmRsaW5nLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYWxsIHJvYnVzdCBhbmQgc2FmZS4gSSdsbCBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhZGRyZXNzIHNwYWNlIGNvbmZsaWN0cywgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjQ1LjIzMDYzNjA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdHN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gNDA4OlxcdFxcdHN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LVxcdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcXG4gNDA5OlxcdFxcdHN0cnVjdCBiNTNfbW1hcF9wcml2ICpwcml2O1xcbiA0MTA6XFx0XFx0c3RydWN0IGI1M19kZXZpY2UgKmRldjtcXG4gNDExOlxcdFxcdGludCByZXQ7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlmICghcGRhdGEgXFx1MDAyNlxcdTAwMjYgbnApIHtcXG4gNDE0OlxcdFxcdFxcdHJldCA9IGI1M19tbWFwX3Byb2JlX29mKHBkZXYsIFxcdTAwMjZwZGF0YSk7XFxuIDQxNTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJPRiBwcm9iZSBlcnJvclxcXFxuXFxcIik7XFxuIDQxNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTg6XFx0XFx0XFx0fVxcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRpZiAoIXBkYXRhKVxcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDQyNTpcXHRcXHRpZiAoIXByaXYpXFxuIDQyNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0cHJpdi1cXHUwMDNlcmVncyA9IHBkYXRhLVxcdTAwM2VyZWdzO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRwcml2LVxcdTAwM2VncGlvX2N0cmwgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCBcXFwiYnJjbSxncGlvLWN0cmxcXFwiKTtcXG4gNDMxOlxcdFxcdGlmICghSVNfRVJSKHByaXYtXFx1MDAzZWdwaW9fY3RybCkpIHtcXG4gNDMyOlxcdFxcdFxcdGlmIChwZGF0YS1cXHUwMDNlY2hpcF9pZCA9PSBCQ002MzE4X0RFVklDRV9JRCB8fFxcbiA0MzM6XFx0XFx0XFx0ICAgIHBkYXRhLVxcdTAwM2VjaGlwX2lkID09IEJDTTYzMjhfREVWSUNFX0lEIHx8XFxuIDQzNDpcXHRcXHRcXHQgICAgcGRhdGEtXFx1MDAzZWNoaXBfaWQgPT0gQkNNNjM2Ml9ERVZJQ0VfSUQpXFxuIDQzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHlfaW5mbyA9IFxcdTAwMjZiY202MzE4X2VwaHlfaW5mbztcXG4gNDM2OlxcdFxcdFxcdGVsc2UgaWYgKHBkYXRhLVxcdTAwM2VjaGlwX2lkID09IEJDTTYzNjhfREVWSUNFX0lEKVxcbiA0Mzc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2luZm8gPSBcXHUwMDI2YmNtNjM2OF9lcGh5X2luZm87XFxuIDQzODpcXHRcXHRcXHRlbHNlIGlmIChwZGF0YS1cXHUwMDNlY2hpcF9pZCA9PSBCQ002MzI2OF9ERVZJQ0VfSUQpXFxuIDQzOTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHlfaW5mbyA9IFxcdTAwMjZiY202MzI2OF9lcGh5X2luZm87XFxuIDQ0MDpcXHRcXHR9XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19tbWFwX29wcywgcHJpdik7XFxuIDQ0MzpcXHRcXHRpZiAoIWRldilcXG4gNDQ0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRkZXYtXFx1MDAzZXBkYXRhID0gcGRhdGE7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdHJldHVybiBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuIDQ1MTpcXHR9XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdHN0YXRpYyB2b2lkIGI1M19tbWFwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA0NTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTo0NS4yMzA3NzE2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTU1MTY0NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCNTMgU3dpdGNoIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBjb2RlIHNuaXBwZXQgaXMgY2FsbGluZyBgYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgdGhpcyBCNTMgc3dpdGNoIGRyaXZlciB1cCBhbmQgcnVubmluZywgcmlnaHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIwOjA0Ljc4MjQyMTMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MDcwNzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfc3dpdGNoX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMzODg9RVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX2RldGVjdCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM4OS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMzkwOmludCBiNTNfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zNDEwLX1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozNDExOkVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzQxMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0yOTI9c3RhdGljIGludCBiNTNfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozNDU6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNDYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYz00MDU9c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ0OS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDUwOlxcdHJldHVybiBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ1MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg9Mjg0PWludCBiNTNfc3dpdGNoX2RldGVjdChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjg1LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODY6aW50IGI1M19zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGI1M19kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTI4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTI5Nj1zdGF0aWMgaW50IGI1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwNy1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYzozMDg6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jPTYxOD1zdGF0aWMgaW50IGI1M19zcmFiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmMtNjU2LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYzo2NTc6XFx0cmV0dXJuIGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmMtNjU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9MTM2NT1zdGF0aWMgaW50IGJjbV9zZjJfc3dfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU0OC1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjE1NDk6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU1MC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDowNy40NjMxMzQ4ODFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NjgzMTYwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGNvbnRleHRzLiBJcyB0aGlzIGEgbmV0d29yayBkZXZpY2U/IEEgaGFyZHdhcmUgcGVyaXBoZXJhbD8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIHN3aXRjaGluZyBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBiaXQgZmllbGRzLCBjb250cm9sIHNpZ25hbHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBNeSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBXaGF0J3MgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU/IFdoYXQncyB0aGUgZXhwZWN0ZWQgZGF0YSB3aWR0aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSByZWdpc3RlciBhY2Nlc3MgcHJvdGVjdGlvbnM/IEknbSBhbnRpY2lwYXRpbmcgbG9va2luZyBmb3IgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcsIE1BQyBhZGRyZXNzIGhhbmRsaW5nLCBWTEFOIGNvbmZpZ3VyYXRpb24gKGlmIHJlbGV2YW50KSwgYW5kIGVycm9yIHN0YXR1cyBiaXRzLiBNeSBtaW5kIGlzIGFscmVhZHkgcGFyc2luZyB0aGUgcG9zc2libGUgdXNlIGNhc2Ugc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjgsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDoxOS45MzE0NTUxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM5MDpcXHRpbnQgYjUzX3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KVxcbjMzOTE6XFx0e1xcbjMzOTI6XFx0XFx0aW50IHJldDtcXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlcGRhdGEpIHtcXG4zMzk1OlxcdFxcdFxcdGRldi1cXHUwMDNlY2hpcF9pZCA9IGRldi1cXHUwMDNlcGRhdGEtXFx1MDAzZWNoaXBfaWQ7XFxuMzM5NjpcXHRcXHRcXHRkZXYtXFx1MDAzZWVuYWJsZWRfcG9ydHMgPSBkZXYtXFx1MDAzZXBkYXRhLVxcdTAwM2VlbmFibGVkX3BvcnRzO1xcbjMzOTc6XFx0XFx0fVxcbjMzOTg6XFx0XFxuMzM5OTpcXHRcXHRpZiAoIWRldi1cXHUwMDNlY2hpcF9pZCBcXHUwMDI2XFx1MDAyNiBiNTNfc3dpdGNoX2RldGVjdChkZXYpKVxcbjM0MDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzQwMTpcXHRcXG4zNDAyOlxcdFxcdHJldCA9IGI1M19zd2l0Y2hfaW5pdChkZXYpO1xcbjM0MDM6XFx0XFx0aWYgKHJldClcXG4zNDA0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzQwNTpcXHRcXG4zNDA2OlxcdFxcdGRldl9pbmZvKGRldi1cXHUwMDNlZGV2LCBcXFwiZm91bmQgc3dpdGNoOiAlcywgcmV2ICVpXFxcXG5cXFwiLFxcbjM0MDc6XFx0XFx0XFx0IGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2Vjb3JlX3Jldik7XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRldi1cXHUwMDNlZHMpO1xcbjM0MTA6XFx0fVxcbjM0MTE6XFx0RVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX3JlZ2lzdGVyKTtcXG4zNDEyOlxcdFxcbjM0MTM6XFx0TU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgR29yc2tpIFxcdTAwM2Nqb2dvQG9wZW53cnQub3JnXFx1MDAzZVxcXCIpO1xcbjM0MTQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJCNTMgc3dpdGNoIGxpYnJhcnlcXFwiKTtcXG4zNDE1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjA6MTkuOTMxNjQ2MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwMTAyMDU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQjUzIFN3aXRjaCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIGl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIEI1MyBzd2l0Y2guIFRoZSBrZXkgaXMgaG93IGl0IGRldGVybWluZXMgdGhlIGBjaGlwX2lkYC4gSXQgc2VlbXMgdG8gcHJpb3JpdGl6ZSBhIGZldyBhcHByb2FjaGVzLCB3aGljaCBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSBmb3IgZmxleGliaWxpdHkuXG5cbklmIHRoZSBgZGV2LVx1MDAzZWNoaXBfaWRgIGlzbid0IGFscmVhZHkgcG9wdWxhdGVkLCBpdCBjYWxscyBgYjUzX3N3aXRjaF9kZXRlY3QoZGV2KWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgdXNpbmcgc29tZSBoYXJkd2FyZSBwcm9iaW5nIG9yIG90aGVyIGRldGVjdGlvbiBtZXRob2QgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBjaGlwIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSWYgdGhlIHBsYXRmb3JtIGRhdGEsIGBkZXYtXHUwMDNlcGRhdGFgLCAqaXMqIHNldCwgdGhlbiBpdCBncmFicyB0aGUgYGNoaXBfaWRgIGZyb20gdGhlcmUgaW5zdGVhZC4gVGhhdCBzdWdnZXN0cyB0aGUgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBlaXRoZXIgYXV0by1kZXRlY3Rpb24gb3IgYm9hcmQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cblVsdGltYXRlbHksIGl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hlcmUgdGhlIGBjaGlwX2lkYCBjb21lcyBmcm9tLCB0aGUgbmV4dCBrZXkgb3BlcmF0aW9uIGlzIGBiNTNfc3dpdGNoX2luaXQoZGV2KWAuIEknbSBrZWVuIHRvIHNlZSB3aGF0IGhhcHBlbnMgaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBzd2l0Y2ggY29uZmlndXJhdGlvbiBhbmQgc2V0dXAgb2NjdXJzLiBMZXTigJlzIGRpdmUgaW50byBgYjUzX3N3aXRjaF9pbml0YCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgbWVhdCBvZiB0aGUgZHJpdmVy4oCZcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjA6MzQuOTQxODU1MjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTczLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTczOlxcdHN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuMzE3NDpcXHR7XFxuMzE3NTpcXHRcXHR1MzIgY2hpcF9pZCA9IGRldi1cXHUwMDNlY2hpcF9pZDtcXG4zMTc2OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjMxNzc6XFx0XFxuMzE3ODpcXHRcXHRpZiAoaXM2M3h4KGRldikpXFxuMzE3OTpcXHRcXHRcXHRjaGlwX2lkID0gQkNNNjNYWF9ERVZJQ0VfSUQ7XFxuMzE4MDpcXHRcXG4zMTgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGI1M19zd2l0Y2hfY2hpcHMpOyBpKyspIHtcXG4zMTgyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBiNTNfY2hpcF9kYXRhICpjaGlwID0gXFx1MDAyNmI1M19zd2l0Y2hfY2hpcHNbaV07XFxuMzE4MzpcXHRcXG4zMTg0OlxcdFxcdFxcdGlmIChjaGlwLVxcdTAwM2VjaGlwX2lkID09IGNoaXBfaWQpIHtcXG4zMTg1OlxcdFxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzKVxcbjMxODY6XFx0XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzID0gY2hpcC1cXHUwMDNlZW5hYmxlZF9wb3J0cztcXG4zMTg3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSA9IGNoaXAtXFx1MDAzZWRldl9uYW1lO1xcbjMxODg6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VkdXBsZXhfcmVnID0gY2hpcC1cXHUwMDNlZHVwbGV4X3JlZztcXG4zMTg5OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMF0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1swXTtcXG4zMTkwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMV0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1sxXTtcXG4zMTkxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMl0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1syXTtcXG4zMTkyOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlanVtYm9fcG1fcmVnID0gY2hpcC1cXHUwMDNlanVtYm9fcG1fcmVnO1xcbjMxOTM6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VpbXBfcG9ydCA9IGNoaXAtXFx1MDAzZWltcF9wb3J0O1xcbjMxOTQ6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VudW1fdmxhbnMgPSBjaGlwLVxcdTAwM2V2bGFucztcXG4zMTk1OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbnVtX2FybF9iaW5zID0gY2hpcC1cXHUwMDNlYXJsX2JpbnM7XFxuMzE5NjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZW51bV9hcmxfYnVja2V0cyA9IGNoaXAtXFx1MDAzZWFybF9idWNrZXRzO1xcbjMxOTc6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2Vhcmxfb3BzID0gY2hpcC1cXHUwMDNlYXJsX29wcztcXG4zMTk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxOTk6XFx0XFx0XFx0fVxcbjMyMDA6XFx0XFx0fVxcbjMyMDE6XFx0XFxuMzIwMjpcXHRcXHQvKiBjaGVjayB3aGljaCBCQ001MzI1eCB2ZXJzaW9uIHdlIGhhdmUgKi9cXG4zMjAzOlxcdFxcdGlmIChpczUzMjUoZGV2KSkge1xcbjMyMDQ6XFx0XFx0XFx0dTggdmM0O1xcbjMyMDU6XFx0XFxuMzIwNjpcXHRcXHRcXHRiNTNfcmVhZDgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNF8yNSwgXFx1MDAyNnZjNCk7XFxuMzIwNzpcXHRcXG4zMjA4OlxcdFxcdFxcdC8qIGNoZWNrIHJlc2VydmVkIGJpdHMgKi9cXG4zMjA5OlxcdFxcdFxcdHN3aXRjaCAodmM0IFxcdTAwMjYgMykge1xcbjMyMTA6XFx0XFx0XFx0Y2FzZSAxOlxcbjMyMTE6XFx0XFx0XFx0XFx0LyogQkNNNTMyNUUgKi9cXG4zMjEyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyMTM6XFx0XFx0XFx0Y2FzZSAzOlxcbjMyMTQ6XFx0XFx0XFx0XFx0LyogQkNNNTMyNUYgLSBkbyBub3QgdXNlIHBvcnQgNCAqL1xcbjMyMTU6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzIFxcdTAwMjY9IH5CSVQoNCk7XFxuMzIxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjE3OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMzIxODpcXHQvKiBPbiB0aGUgQkNNNDdYWCBTb0NzIHRoaXMgaXMgdGhlIHN1cHBvcnRlZCBpbnRlcm5hbCBzd2l0Y2guKi9cXG4zMjE5OlxcdCNpZm5kZWYgQ09ORklHX0JDTTQ3WFhcXG4zMjIwOlxcdFxcdFxcdFxcdC8qIEJDTTUzMjVNICovXFxuMzIyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjIyOlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIwOjM0Ljk0MjAxNTQ1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDg2NDQ4OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBCNTMgRHJpdmVyIENvZGUgaW4gYSBTeXprYWxsZXIgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGluaXRpYWxseSwgYGI1M19zd2l0Y2hfaW5pdGAgaXMgY29uY2VybmluZy4gSXQgcmVhZHMgaGFyZHdhcmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcHJvYmFibHkgY3Jhc2ggaWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQuIEJ1dCB3aGF0IGlmIGBpczUzMjUoZGV2KWAgaXMgZmFsc2U/IFRoZW4gd2UgbW92ZSBvbi4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIGdldCB0byBgYjUzX21tYXBfcHJvYmVgIHZpYSBmdXp6aW5nP1xuXG5TeXprYWxsZXIgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgaXNuJ3Qgc3RyYWlnaHRmb3J3YXJkLiBBbmQgdGhlIGNydWNpYWwgRFNBIGNoYW5nZXMgZGVwZW5kIG9uIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgYmVpbmcgdHJ1ZSwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBgYjUzYC4gSWYgYGI1M2AgaXMgdW5yZWFjaGFibGUsIHRoZXNlIERTQSBwYXJ0cyBhcmUgYWxzbyBvdXQgb2YgcmVhY2guIENvdWxkIHdlIHByb2JlIGBiNTNgIHZpYSBkZXZpY2UgdHJlZSBpbmplY3Rpb24/IE5vdCB3aXRoIHN0YW5kYXJkIFN5emthbGxlciBzZXR1cHMgKEdDRS9RRU1VKSwgYXMgaXQgZG9lc24ndCBzdXBwb3J0IG9uLXRoZS1mbHkgZGV2aWNlIHRyZWUgbm9kZSBpbmplY3Rpb24uIEkgYWxyZWFkeSBncmVwcGVkIGZvciBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgLCBzbyBJJ20gY2VydGFpbiBgYjUzX2NvbW1vbi5jYCBpcyB0aGUgb25seSBwbGFjZSBpdCdzIHNldC5cblxuRnVuY3Rpb25zIGxpa2UgYGI1M192bGFuX2FkZGAsIGBiNTNfdmxhbl9kZWxgLCBgYjUzX2JyX2pvaW5gLCBhbmQgdGhlIHJlc3QgYXJlIGFsc28gZGVmaW5lZCB3aXRoaW4gYGI1M19jb21tb24uY2AuIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBwYXRjaCBzZWVtcyBpbmV4dHJpY2FibHkgbGlua2VkIHRvIHRoZSBgYjUzYCBkcml2ZXIuIFNpbmNlIGBiNTNgIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyBhbmQgd2UgZG9uJ3QgaGF2ZSB0aGF0IGhhcmR3YXJlIGluIFFFTVUvR0NFLCBpdCdzIHZpcnR1YWxseSB1bnJlYWNoYWJsZS5cblxuSXMgdGhlcmUgc29tZSBkdW1teSBkcml2ZXIgb3IgYSBtb2NrIHRoYXQgdXNlcyBgYjUzYD8gTm8sIGl0J3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSXMgdGhlIGBiNTNgIGRyaXZlciBldmVuIGNvbXBpbGVkIGludG8gdGhlIFN5emthbGxlciBrZXJuZWxzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZywgYnV0IGV2ZW4gaWYgaXQncyB0aGVyZSwgaXQgd29uJ3QgcHJvYmUgd2l0aG91dCB0aGUgaGFyZHdhcmUuXG5cbk5vdywgYGI1M19tbWFwYCB1c2VzIHBsYXRmb3JtIGRhdGEgb3IgZGV2aWNlIHRyZWUuIENhbiB3ZSByZWdpc3RlciBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcz8gV2UgY2FuJ3QgdXNlIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL2I1My1tbWFwL2JpbmRgIGJlY2F1c2UgdGhlcmUgbmVlZHMgdG8gYmUgYSBkZXZpY2UgYWxyZWFkeS4gV2UgY2FuJ3QgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZTsgdGhlcmUgaXNuJ3QgYSBkcml2ZXIgbGlrZSBhICdwbGF0Zm9ybS1kZXZpY2UtY3JlYXRvcicuIFN5emthbGxlciBoYXMgdXRpbGl0aWVzIGZvciBnZW5ldGxpbmsgYW5kIG90aGVyIHRoaW5ncywgYnV0IG5vdCBmb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLlxuXG5XYWl0LCB3aGF0IGFib3V0IGBiY21fc2YyYD8gVGhhdCdzIGFsc28gYSBwbGF0Zm9ybSBkcml2ZXIuIEFuZCBgYjUzX21kaW9gPyBJdCdzIGFuIE1ESU8gZHJpdmVyLiBTeXprYWxsZXIgc29tZXRpbWVzIGhhbmRsZXMgTURJTyBkZXZpY2VzIGlmIHRoZXJlJ3MgYSB2aXJ0dWFsIE1ESU8gYnVzIChgZHNhX2xvb3BgLCBgbWFjYmAsIGV0Yy4pLiBIb3dldmVyLCBgYjUzX21kaW9gIGRlbWFuZHMgc3BlY2lmaWMgUEhZIElEcywgb3IgZGV2aWNlIHRyZWUuIEkgbmVlZCB0byBleGFtaW5lIGBiNTNfbWRpb19kcml2ZXJgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDo1OS44MDY1MDgyNzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTQwNDA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzX21kaW9fZHJpdmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zODk9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYjUzX29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzkwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozOTE6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBiNTNfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Mi1cXHQucHJvYmVcXHQ9IGI1M19tZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5OS19O1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzo0MDA6bWRpb19tb2R1bGVfZHJpdmVyKGI1M19tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTQwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6MDMuMDAwNTU4NzU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjM0NjYzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBQcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBiNTNfbWRpb19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgdGFrZSBhIGxvb2suIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgaXQgYW5kIHRoZSBhc3NvY2lhdGVkIG1hdGNoIHRhYmxlIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBkcml2ZXIncyBpbnRlbnQgYW5kIGNhcGFiaWxpdGllcy4gSXQncyBsaWtlbHkgdGhlIG1hdGNoIHRhYmxlIHdpbGwgcmV2ZWFsIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoLCB3aGljaCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXN0IG9mIHRoZSBwcm9iZSByb3V0aW5lLiBJJ20gZXhwZWN0aW5nIHRoaXMgcHJvYmUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcmVnaXN0ZXIgYWNjZXNzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBoYXJkd2FyZS1zcGVjaWZpYyBxdWlyayBoYW5kbGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjMxLjIzNTIyNTA4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODQxOTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfb2ZfbWF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jPTM2Mz1zdGF0aWMgdm9pZCBiNTNfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzc0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozNzU6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYjUzX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM3Ni1cXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sYmNtNTMyNVxcXCIgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zODgtfTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzg5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGI1M19vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5MC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MzkxPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgYjUzX21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Ni1cXHRcXHQubmFtZSA9IFxcXCJiY201M3h4XFxcIixcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzk3OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGI1M19vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk4LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjMzLjk1MzY0OTU5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQzNTMyNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgRGV2aWNlIFRyZWUgQ29tcGF0aWJpbGl0eSBhbmQgQ292ZXJhZ2UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIHNpdHVhdGlvbiwgYW5kIHRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSB0cmVlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHNlZW1zIHRvIGJlIGtleWVkIHRvIG1hdGNoaW5nIG9uIGNvbXBhdGlibGUgc3RyaW5ncyB3aXRoaW4gdGhlIGRldmljZSB0cmVlIGl0c2VsZi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGZ1enppbmcuIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGRvZXNuJ3QgZ2VuZXJhdGUgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBkb2VzIGl0PyBUaGF0J3MgYSBodWdlIGZhY3RvciB0byBjb25zaWRlciBiZWNhdXNlIGl0IG1lYW5zIGlmIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBEVCwgdGhlIGZ1enppbmcgY292ZXJhZ2UgaXMgbGltaXRlZC5cblxuSSBuZWVkIHRvIGV4cGxvcmUgc3BlY2lmaWMgZXhhbXBsZXMuIE5vdywgd2hhdCBhYm91dCB0aGUgYGI1M19zcGlgIGRyaXZlcj8gSG93IGRvZXMgKnRoYXQqIGRyaXZlciBoYW5kbGUgdGhpbmdzPyBUaGUgYGI1M19zcGlgIGlzIGEgY29tbW9ubHkgdXNlZCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5ncyBpdCB1dGlsaXplcyBpcyBlc3NlbnRpYWwgZm9yIGNvdmVyYWdlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhhdCBvbmUuIEkgd29uZGVyIGhvdyB0aGUgc2l0dWF0aW9uIHdpbGwgY2hhbmdlIGlmIG90aGVyIHBsYXRmb3JtcyB1dGlsaXplIGRldmljZSB0cmVlIGVudHJpZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6MzguNTk3MTg3MTczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NjIwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImI1M19zcGlfZHJpdmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTM1OT1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgYjUzX3NwaV9pZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2MC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYzozNjE6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGI1M19zcGlfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2Mi1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzcxLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjM3Mjptb2R1bGVfc3BpX2RyaXZlcihiNTNfc3BpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo0MC42NjQ4MTQzMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0ODI0NzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBiNTMgYW5kIGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nIFJlbGF0aW9uc2hpcCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gdGhlIGRldmljZSB0cmVlIG9yIHNvbWUgYm9hcmQgY29kZS4gVGhlIGltcGxpY2F0aW9uIGlzLCBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIHRoYXQgYGI1M2AgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIHRoYXQgcGF0aCBpcyB1bmF2YWlsYWJsZS4gQnV0IGhvbGQgb24sIGlzIHRoZXJlIGEgYmFja2Rvb3I/IENhbiBJIHNvbWVob3cgdHJpZ2dlciBgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmdgIHdpdGggdGhhdCBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcgYWN0aXZlIHdpdGhvdXQgbmVlZGluZyBgYjUzYD8gTm8sIHRoYXQncyBub3QgZ29pbmcgdG8gd29yay4gTXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZDogdGhhdCBmbGFnJ3Mgb25seSBzZXQgZHVyaW5nIGBiNTNfc3dpdGNoX2FsbG9jYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluLiBMZXQncyBkbyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBvdGhlciBmaWxlcyB0byB2ZXJpZnkgdGhhdCBJJ20gbm90IG1pc3Npbmcgc29tZSBzZWNvbmRhcnkgbWVjaGFuaXNtIGZvciBzZXR0aW5nIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjQ1LjgxMzA2NDU4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDU1NjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTYtXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzI5NzpcXHRkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTgtXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xOTI5PXN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxubmV0L2RzYS91c2VyLmM6MTk0OTogKiAgICAgICBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxcbm5ldC9kc2EvdXNlci5jLTE5NTAtICogICAgICAgKGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo0Ny45NTM2MjQ3MzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NTE0MjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIHNvIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlIGlzIHRoZSBrZXkgaGVyZS4gSSBrbm93IHRoYXQncyB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGUgY3J1Y2lhbCBmbGFnIGlzIHNldC4gVGhpbmtpbmcgYWJvdXQgaXQsIGBiNTNgIGlzIGRlZmluaXRlbHkgYSBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgZHJpdmVyLiBJdCB3b3VsZG4ndCBpbnN0YW50aWF0ZSBvciBmdW5jdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBubyBjaGFuY2UsIG5vdCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBjYXJlZnVsbHkgY3JhZnRlZCBkZXZpY2UgdHJlZSBpbmplY3Rpb24sIHdoaWNoIHN5emthbGxlciB3b3VsZG4ndCBiZSBkb2luZy4gU28sIGFueSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUgaW4gcGxhY2VzIGxpa2UgR0NFIG9yIFFFTVUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmUtcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIFJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGludm9sdmU6XG5cbiogICBQYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiogICBDb2RlIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycy5cblxuQW5kIHRoaXMgKmlzKiBhIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVyIChCcm9hZGNvbSBCQ001M3h4KS4gSXQgZXhwbGljaXRseSBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBiaW5kaW5nIGZvciBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBsb2NrZWQgYmVoaW5kIGEgZmxhZyB0aGF0IG9ubHkgdGhpcyBkcml2ZXIgY2FuIHNldC4gR2l2ZW4gYWxsIHRoYXQsIGl0J3MgY2xlYXI6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6NTYuMDI4NzcwNzE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCBkcml2ZXIgKGI1MykgYW5kIGNvcmUgRFNBIGNvZGUuIFRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBnYXRlZCBieSB0aGUgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBmbGFnLCB3aGljaCBpcyBvbmx5IHNldCBieSB0aGUgYjUzIGRyaXZlci4gU2luY2UgYjUzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo1Ni4wMjg4MDgxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkqjx5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 17:31:11 +0000 UTC FinishedAt: 2026-08-26 18:21:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMzYxN2RmZTJjZGEwM2NlNzdhOWEzM2IwODBjNjhiMjFmNzczNDUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTg6MTk6MDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuQEAgLTg5OCwxMCAmIzQzOzg5OCw1MiBAQCBzdGF0aWMgYm9vbCBiNTNfdmxhbl9wb3J0X21heV9qb2luX3VudGFnZ2VkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXHRyZXR1cm4gZHAtXHUwMDNlYnJpZGdlID09IE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBiNTNfdmxhbl9od19lbnRyeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGNvbnN0IHN0cnVjdCBiNTNfdmxhbiAqdmwsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiYjNDM7XHRib29sIHN0YW5kYWxvbmUgPSBmYWxzZTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHQqaHcgPSAqdmw7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aHctXHUwMDNlbWVtYmVycyA9IDA7XG4mIzQzO1x0aHctXHUwMDNldW50YWcgPSAwO1xuJiM0MztcbiYjNDM7XHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIHBvcnQpIHtcbiYjNDM7XHRcdGlmICghKHZsLVx1MDAzZW1lbWJlcnMgXHUwMDI2IEJJVChwb3J0KSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuJiM0MztcdFx0XHRpZiAoZHAtXHUwMDNlYnJpZGdlKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0c3RhbmRhbG9uZSA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHctXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XG4mIzQzO1x0XHRody1cdTAwM2V1bnRhZyB8PSB2bC1cdTAwM2V1bnRhZyBcdTAwMjYgQklUKHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFzdGFuZGFsb25lKSB7XG4mIzQzO1x0XHRody1cdTAwM2VtZW1iZXJzID0gMDtcbiYjNDM7XHRcdGh3LVx1MDAzZXVudGFnID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBzdGFuZGFsb25lO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IGI1M192bGFuIHZsID0geyAwIH07XG4mIzQzO1x0c3RydWN0IGI1M192bGFuIGh3O1xuIFx0c3RydWN0IGI1M192bGFuICp2O1xuIFx0aW50IGksIGRlZl92aWQ7XG4gXHR1MTYgdmlkO1xuQEAgLTkzNywyMCAmIzQzOzk3OSwyMyBAQCBpbnQgYjUzX2NvbmZpZ3VyZV92bGFuKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdH1cbiBcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIGRlZl92aWQsIFx1MDAyNnZsKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcbi1cdFx0LyogVXBvbiBpbml0aWFsIGNhbGwgd2UgaGF2ZSBub3Qgc2V0LXVwIGFueSBWTEFOcywgYnV0IHVwb25cbi1cdFx0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXG4tXHRcdCAqL1xuLVx0XHRmb3IgKHZpZCA9IGRlZl92aWQgJiM0MzsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7XG4tXHRcdFx0diA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuJiM0MztcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4mIzQzO1x0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCBcdTAwM2MgZGV2LVx1MDAzZW51bV92bGFuczsgdmlkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0diA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuIFxuLVx0XHRcdGlmICghdi1cdTAwM2VtZW1iZXJzKVxuLVx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoIXYtXHUwMDNlbWVtYmVycylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTtcbi1cdFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4tXHRcdH1cbiYjNDM7XHRcdGlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHYsIFx1MDAyNmh3KSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFx1MDAyNmh3KTtcbiYjNDM7XHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcbiBcdFx0YjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBpKSB7XG4gXHRcdFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKVxuIFx0XHRcdFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLFxuQEAgLTE3MjAsNiAmIzQzOzE3NjUsNyBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXHUwMDNlcHJpdjtcbiBcdGJvb2wgdW50YWdnZWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xuIFx0Ym9vbCBwdmlkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19QVklEO1xuJiM0MztcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4gXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xuIFx0aW50IGVycjtcbkBAIC0xNzUxLDEzICYjNDM7MTc5NywxNCBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRlbHNlXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfkJJVChwb3J0KTtcbiBcbi1cdGlmICghZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKVxuJiM0MztcdGlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcdTAwMjZodykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi1cdTAwM2V2aWQsIHZsKTtcbiYjNDM7XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgXHUwMDI2aHcpO1xuIFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVx1MDAzZXZpZCk7XG4gXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4gXHRcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLFxuIFx0XHRcdCAgICBuZXdfcHZpZCk7XG4gXHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgb2xkX3B2aWQpO1xuQEAgLTE3NzIsNyAmIzQzOzE4MTksOSBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4ge1xuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbiYjNDM7XHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4gXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xuJiM0MztcdGJvb2wgbmVlZHNfaHc7XG4gXHR1MTYgcHZpZDtcbiBcbiBcdGlmICh2bGFuLVx1MDAzZXZpZCA9PSAwKVxuQEAgLTE3ODIsNiAmIzQzOzE4MzEsOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXG4gXHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2bGFuLVx1MDAzZXZpZF07XG4gXG4mIzQzO1x0bmVlZHNfaHcgPSBiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbiYjNDM7XG4gXHR2bC1cdTAwM2VtZW1iZXJzIFx1MDAyNj0gfkJJVChwb3J0KTtcbiBcbiBcdGlmIChwdmlkID09IHZsYW4tXHUwMDNldmlkKVxuQEAgLTE3OTEsMTQgJiM0MzsxODQyLDE4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGlmICh1bnRhZ2dlZCBcdTAwMjZcdTAwMjYgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfihCSVQocG9ydCkpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4mIzQzO1x0aWYgKCFuZWVkc19odylcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgdmwpO1xuJiM0MztcdGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuJiM0MztcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCBcdTAwMjZodyk7XG4gXHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tXHUwMDNldmlkKTtcbiBcbi1cdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcbi1cdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZykge1xuJiM0MztcdFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksXG4mIzQzO1x0XHRcdCAgICBwdmlkKTtcbiYjNDM7XHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTIyNjEsNiAmIzQzOzIzMTYsMjggQEAgaW50IGI1M19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IGI1M192bGFuIGh3O1xuJiM0MztcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4mIzQzO1x0dTE2IHZpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yICh2aWQgPSBiNTNfZGVmYXVsdF9wdmlkKGRldikgJiM0MzsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHZsLVx1MDAzZW1lbWJlcnMgXHUwMDI2IEJJVChwb3J0KSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuJiM0MztcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCBcdTAwMjZodyk7XG4mIzQzO1x0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXG4gXHRcdGJvb2wgKnR4X2Z3ZF9vZmZsb2FkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuQEAgLTIzMjQsNiAmIzQzOzI0MDEsOCBAQCBpbnQgYjUzX2JyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuIFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfUFZMQU5fUEFHRSwgQjUzX1BWTEFOX1BPUlRfTUFTSyhwb3J0KSwgcHZsYW4pO1xuIFx0ZGV2LVx1MDAzZXBvcnRzW3BvcnRdLnZsYW5fY3RsX21hc2sgPSBwdmxhbjtcbiBcbiYjNDM7XHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX2JyX2pvaW4pO1xuQEAgLTIzNzYsNiAmIzQzOzI0NTUsOCBAQCB2b2lkIGI1M19icl9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXG4gXHRcdHZsLVx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xuIFx0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBwdmlkLCB2bCk7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKGRzLCBwb3J0KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfYnJfbGVhdmUpO1xuIFxuQEAgLTMyMTMsNiAmIzQzOzMyOTQsNyBAQCBzdHJ1Y3QgYjUzX2RldmljZSAqYjUzX3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLFxuIFx0ICogZGV2aWNlcy4gKG5vdCBoYXJkd2FyZSBzdXBwb3J0ZWQpXG4gXHQgKi9cbiBcdGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1x0ZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzX211dGV4KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi42N2EwMWZjNWY4MWVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtNDA1LDYgJiM0Mzs0MDUsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaCB7XG4gXHQvKiBLZWVwIFZMQU4gZmlsdGVyaW5nIGVuYWJsZWQgb24gcG9ydHMgbm90IG9mZmxvYWRpbmcgYW55IHVwcGVyICovXG4gXHR1MzJcdFx0XHRuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nOjE7XG4gXG4mIzQzO1x0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xuJiM0MztcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOjE7XG4mIzQzO1xuIFx0LyogUGFzcyAucG9ydF92bGFuX2FkZCBhbmQgLnBvcnRfdmxhbl9kZWwgdG8gZHJpdmVycyBldmVuIGZvciBicmlkZ2VzXG4gXHQgKiB0aGF0IGhhdmUgdmxhbl9maWx0ZXJpbmc9MC4gQWxsIGRyaXZlcnMgc2hvdWxkIGlkZWFsbHkgc2V0IHRoaXMgKGFuZFxuIFx0ICogdGhlbiB0aGUgb3B0aW9uIHdvdWxkIGdldCByZW1vdmVkKSwgYnV0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGlzXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9wb3J0LmMgYi9uZXQvZHNhL3BvcnQuY1xuaW5kZXggMWY1NTM2YzBkZmZjMi4uZTYxYWJjN2M3NGY3MyAxMDA2NDRcbi0tLSBhL25ldC9kc2EvcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3BvcnQuY1xuQEAgLTgzMSw2ICYjNDM7ODMxLDkgQEAgaW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4gXHRcdFx0aWYgKCF1c2VyKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsXG4gXHRcdFx0XHRcdFx0XHQgICAgIHZsYW5fZmlsdGVyaW5nKTtcbiBcdFx0XHRpZiAoZXJyKVxuQEAgLTgzOSwxMCAmIzQzOzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcbiBcdH0gZWxzZSB7XG4gXHRcdGRwLVx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XG4gXG4tXHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLVx0XHRcdFx0XHRcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHRcdGlmICghZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRwLVx1MDAzZXVzZXIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byByZXN0b3JlO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0NSwxMCAmIzQzOzE0NTAsMTMgQEAgaW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuIFxuIFx0LyogVGhlIHBvcnQgbWlnaHQgc3RpbGwgYmUgVkxBTiBmaWx0ZXJpbmcgZXZlbiBpZiBpdCYjMzk7cyBubyBsb25nZXJcbiBcdCAqIHVuZGVyIGEgYnJpZGdlLCBlaXRoZXIgZHVlIHRvIGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCBvclxuLVx0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZy4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zXG4tXHQgKiBvbiB0aGUgQ1BVIHBvcnQuXG4mIzQzO1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZywgYW5kIGV2ZXJ5IHBvcnQgb2YgYVxuJiM0MztcdCAqIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkIHN3aXRjaCBrZWVwcyBpdHMgODAyMXEgdXBwZXJcbiYjNDM7XHQgKiBWTEFOcyB3aGV0aGVyIGJyaWRnZWQgb3Igbm90LiBJbiB0dXJuIHRoaXMgbWVhbnMgVkxBTnMgb24gdGhlXG4mIzQzO1x0ICogQ1BVIHBvcnQuXG4gXHQgKi9cbi1cdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApO1xuJiM0MztcdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApIHx8XG4mIzQzO1x0XHRcdCBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDtcbiBcdGlmICh2bGFuX2ZpbHRlcmluZykge1xuIFx0XHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZGV2LCBmYWxzZSk7XG4gXHRcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXG5pbmRleCAwNDFmOTA2MGM4ZWYwLi5mZGE2YmE0ZmRkMTNkIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS91c2VyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdXNlci5jXG5AQCAtMTk0Niw2ICYjNDM7MTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxuICAqXG4gICogLSBJZiBzdGFuZGFsb25lICh0aGlzIGluY2x1ZGVzIHNvZnR3YXJlIGJyaWRnZSwgc29mdHdhcmUgTEFHKTpcbiAgKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbiYjNDM7ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxuICAqICAgICAgIChkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xuICAqICAgICAgIHRoaXMgc3dpdGNoIGNoaXAgd2hpY2ggaGF2ZSB2bGFuX2ZpbHRlcmluZz0xKVxuICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnNcbkBAIC0yNzE3LDcgJiM0MzsyNzE4LDggQEAgdm9pZCBkc2FfdXNlcl9zZXR1cF90YWdnZXIoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXIpXG4gXHR1c2VyLVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XG4gXHRpZiAodXNlci1cdTAwM2VuZWVkZWRfdGFpbHJvb20pXG4gXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgXHUwMDI2PSB+KE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUKTtcbi1cdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nKVxuJiM0MztcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XG4mIzQzO1x0ICAgIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxuIFx0XHR1c2VyLVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjtcbiBcbiBcdHVzZXItXHUwMDNlbGx0eCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCBkcml2ZXIgKGI1MykgYW5kIGNvcmUgRFNBIGNvZGUuIFRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBnYXRlZCBieSB0aGUgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBmbGFnLCB3aGljaCBpcyBvbmx5IHNldCBieSB0aGUgYjUzIGRyaXZlci4gU2luY2UgYjUzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE4OjE5OjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwppbmRleCAwODgwMzEwYzljZTNmLi5jNGM4NTEzYWU0ODYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYwpAQCAtODk4LDEwICYjNDM7ODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAlyZXR1cm4gZHAtJmd0O2JyaWRnZSA9PSBOVUxMOwogfQogCiYjNDM7c3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLAomIzQzOwkJCSAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CWJvb2wgc3RhbmRhbG9uZSA9IGZhbHNlOwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsKJiM0MzsJKmh3ID0gKnZsOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlody0mZ3Q7bWVtYmVycyA9IDA7CiYjNDM7CWh3LSZndDt1bnRhZyA9IDA7CiYjNDM7CiYjNDM7CWI1M19mb3JfZWFjaF9wb3J0KGRldiwgcG9ydCkgewomIzQzOwkJaWYgKCEodmwtJmd0O21lbWJlcnMgJmFtcDsgQklUKHBvcnQpKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOwomIzQzOwomIzQzOwkJaWYgKCFkc2FfcG9ydF9pc19jcHUoZHApKSB7CiYjNDM7CQkJaWYgKGRwLSZndDticmlkZ2UpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXN0YW5kYWxvbmUgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaHctJmd0O21lbWJlcnMgfD0gQklUKHBvcnQpOwomIzQzOwkJaHctJmd0O3VudGFnIHw9IHZsLSZndDt1bnRhZyAmYW1wOyBCSVQocG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFzdGFuZGFsb25lKSB7CiYjNDM7CQlody0mZ3Q7bWVtYmVycyA9IDA7CiYjNDM7CQlody0mZ3Q7dW50YWcgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzdGFuZGFsb25lOwomIzQzO30KJiM0MzsKIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewogCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKIAlzdHJ1Y3QgYjUzX3ZsYW4gdmwgPSB7IDAgfTsKJiM0MzsJc3RydWN0IGI1M192bGFuIGh3OwogCXN0cnVjdCBiNTNfdmxhbiAqdjsKIAlpbnQgaSwgZGVmX3ZpZDsKIAl1MTYgdmlkOwpAQCAtOTM3LDIwICYjNDM7OTc5LDIzIEBAIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCX0KIAliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCAmYW1wO3ZsKTsKIAotCWlmIChkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKSB7Ci0JCS8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uCi0JCSAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLgotCQkgKi8KLQkJZm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCAmbHQ7IGRldi0mZ3Q7bnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7Ci0JCQl2ID0gJmFtcDtkZXYtJmd0O3ZsYW5zW3ZpZF07CiYjNDM7CS8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uCiYjNDM7CSAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLgomIzQzOwkgKi8KJiM0MzsJZm9yICh2aWQgPSBkZWZfdmlkICYjNDM7IDE7IHZpZCAmbHQ7IGRldi0mZ3Q7bnVtX3ZsYW5zOyB2aWQmIzQzOyYjNDM7KSB7CiYjNDM7CQl2ID0gJmFtcDtkZXYtJmd0O3ZsYW5zW3ZpZF07CiAKLQkJCWlmICghdi0mZ3Q7bWVtYmVycykKLQkJCQljb250aW51ZTsKJiM0MzsJCWlmICghdi0mZ3Q7bWVtYmVycykKJiM0MzsJCQljb250aW51ZTsKIAotCQkJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTsKLQkJCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTsKLQkJfQomIzQzOwkJaWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdiwgJmFtcDtodykpCiYjNDM7CQkJY29udGludWU7CiAKJiM0MzsJCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgJmFtcDtodyk7CiYjNDM7CQliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7dmxhbl9maWx0ZXJpbmcpIHsKIAkJYjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBpKSB7CiAJCQlpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgaSkpCiAJCQkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLApAQCAtMTcyMCw2ICYjNDM7MTc2NSw3IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtJmd0O3ByaXY7CiAJYm9vbCB1bnRhZ2dlZCA9IHZsYW4tJmd0O2ZsYWdzICZhbXA7IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQ7CiAJYm9vbCBwdmlkID0gdmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19QVklEOwomIzQzOwlzdHJ1Y3QgYjUzX3ZsYW4gaHc7CiAJc3RydWN0IGI1M192bGFuICp2bDsKIAl1MTYgb2xkX3B2aWQsIG5ld19wdmlkOwogCWludCBlcnI7CkBAIC0xNzUxLDEzICYjNDM7MTc5NywxNCBAQCBpbnQgYjUzX3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJZWxzZQogCQl2bC0mZ3Q7dW50YWcgJmFtcDs9IH5CSVQocG9ydCk7CiAKLQlpZiAoIWRldi0mZ3Q7dmxhbl9maWx0ZXJpbmcpCiYjNDM7CWlmICghYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCAmYW1wO2h3KSkKIAkJcmV0dXJuIDA7CiAKLQliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLSZndDt2aWQsIHZsKTsKJiM0MzsJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi0mZ3Q7dmlkLCAmYW1wO2h3KTsKIAliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tJmd0O3ZpZCk7CiAKLQlpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgJmFtcDsmYW1wOyBuZXdfcHZpZCAhPSBvbGRfcHZpZCkgewomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSAmYW1wOyZhbXA7IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7CiAJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLAogCQkJICAgIG5ld19wdmlkKTsKIAkJYjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBvbGRfcHZpZCk7CkBAIC0xNzcyLDcgJiM0MzsxODE5LDkgQEAgaW50IGI1M192bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogewogCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy0mZ3Q7cHJpdjsKIAlib29sIHVudGFnZ2VkID0gdmxhbi0mZ3Q7ZmxhZ3MgJmFtcDsgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDsKJiM0MzsJc3RydWN0IGI1M192bGFuIGh3OwogCXN0cnVjdCBiNTNfdmxhbiAqdmw7CiYjNDM7CWJvb2wgbmVlZHNfaHc7CiAJdTE2IHB2aWQ7CiAKIAlpZiAodmxhbi0mZ3Q7dmlkID09IDApCkBAIC0xNzgyLDYgJiM0MzsxODMxLDggQEAgaW50IGI1M192bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCiAJdmwgPSAmYW1wO2Rldi0mZ3Q7dmxhbnNbdmxhbi0mZ3Q7dmlkXTsKIAomIzQzOwluZWVkc19odyA9IGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgJmFtcDtodyk7CiYjNDM7CiAJdmwtJmd0O21lbWJlcnMgJmFtcDs9IH5CSVQocG9ydCk7CiAKIAlpZiAocHZpZCA9PSB2bGFuLSZndDt2aWQpCkBAIC0xNzkxLDE0ICYjNDM7MTg0MiwxOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJaWYgKHVudGFnZ2VkICZhbXA7JmFtcDsgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpCiAJCXZsLSZndDt1bnRhZyAmYW1wOz0gfihCSVQocG9ydCkpOwogCi0JaWYgKCFkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKQomIzQzOwlpZiAoIW5lZWRzX2h3KQogCQlyZXR1cm4gMDsKIAotCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tJmd0O3ZpZCwgdmwpOwomIzQzOwliNTNfdmxhbl9od19lbnRyeShkcywgdmwsICZhbXA7aHcpOwomIzQzOwliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLSZndDt2aWQsICZhbXA7aHcpOwogCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmxhbi0mZ3Q7dmlkKTsKIAotCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTsKLQliNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHB2aWQpOwomIzQzOwlpZiAoZGV2LSZndDt2bGFuX2ZpbHRlcmluZykgewomIzQzOwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksCiYjNDM7CQkJICAgIHB2aWQpOwomIzQzOwkJYjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjYxLDYgJiM0MzsyMzE2LDI4IEBAIGludCBiNTNfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogfQogRVhQT1JUX1NZTUJPTChiNTNfbWRiX2RlbCk7CiAKJiM0MztzdGF0aWMgdm9pZCBiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQomIzQzO3sKJiM0MzsJc3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgYjUzX3ZsYW4gaHc7CiYjNDM7CXN0cnVjdCBiNTNfdmxhbiAqdmw7CiYjNDM7CXUxNiB2aWQ7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3ZsYW5fZmlsdGVyaW5nKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKHZpZCA9IGI1M19kZWZhdWx0X3B2aWQoZGV2KSAmIzQzOyAxOyB2aWQgJmx0OyBkZXYtJmd0O251bV92bGFuczsgdmlkJiM0MzsmIzQzOykgewomIzQzOwkJdmwgPSAmYW1wO2Rldi0mZ3Q7dmxhbnNbdmlkXTsKJiM0MzsKJiM0MzsJCWlmICghKHZsLSZndDttZW1iZXJzICZhbXA7IEJJVChwb3J0KSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQliNTNfdmxhbl9od19lbnRyeShkcywgdmwsICZhbXA7aHcpOwomIzQzOwkJYjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCAmYW1wO2h3KTsKJiM0MzsJCWI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsCiAJCWJvb2wgKnR4X2Z3ZF9vZmZsb2FkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CkBAIC0yMzI0LDYgJiM0MzsyNDAxLDggQEAgaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSwKIAliNTNfd3JpdGUxNihkZXYsIEI1M19QVkxBTl9QQUdFLCBCNTNfUFZMQU5fUE9SVF9NQVNLKHBvcnQpLCBwdmxhbik7CiAJZGV2LSZndDtwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47CiAKJiM0MzsJYjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpOwomIzQzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChiNTNfYnJfam9pbik7CkBAIC0yMzc2LDYgJiM0MzsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKQogCQl2bC0mZ3Q7bWVtYmVycyB8PSBCSVQocG9ydCk7CiAJCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHB2aWQsIHZsKTsKIAl9CiYjNDM7CiYjNDM7CWI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKGRzLCBwb3J0KTsKIH0KIEVYUE9SVF9TWU1CT0woYjUzX2JyX2xlYXZlKTsKIApAQCAtMzIxMyw2ICYjNDM7MzI5NCw3IEBAIHN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsCiAJICogZGV2aWNlcy4gKG5vdCBoYXJkd2FyZSBzdXBwb3J0ZWQpCiAJICovCiAJZHMtJmd0O3ZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7CiYjNDM7CWRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7CiAKIAltdXRleF9pbml0KCZhbXA7ZGV2LSZndDtyZWdfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtkZXYtJmd0O3N0YXRzX211dGV4KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmgKaW5kZXggNzUwN2Q2MzJlN2M2ZC4uNjdhMDFmYzVmODFlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmgKQEAgLTQwNSw2ICYjNDM7NDA1LDkgQEAgc3RydWN0IGRzYV9zd2l0Y2ggewogCS8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi8KIAl1MzIJCQluZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nOjE7CiAKJiM0MzsJLyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqLwomIzQzOwl1MzIJCQluZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDoxOwomIzQzOwogCS8qIFBhc3MgLnBvcnRfdmxhbl9hZGQgYW5kIC5wb3J0X3ZsYW5fZGVsIHRvIGRyaXZlcnMgZXZlbiBmb3IgYnJpZGdlcwogCSAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kCiAJICogdGhlbiB0aGUgb3B0aW9uIHdvdWxkIGdldCByZW1vdmVkKSwgYnV0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGlzCmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jCmluZGV4IDFmNTUzNmMwZGZmYzIuLmU2MWFiYzdjNzRmNzMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvcG9ydC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvcG9ydC5jCkBAIC04MzEsNiAmIzQzOzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLAogCQkJaWYgKCF1c2VyKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJaWYgKGRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiAJCQllcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcodXNlciwKIAkJCQkJCQkgICAgIHZsYW5fZmlsdGVyaW5nKTsKIAkJCWlmIChlcnIpCkBAIC04MzksMTAgJiM0Mzs4NDIsMTIgQEAgaW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsCiAJfSBlbHNlIHsKIAkJZHAtJmd0O3ZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7CiAKLQkJZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRwLSZndDt1c2VyLAotCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHJlc3RvcmU7CiYjNDM7CQlpZiAoIWRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkgewomIzQzOwkJCWVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC0mZ3Q7dXNlciwKJiM0MzsJCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJZ290byByZXN0b3JlOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMTQ0NSwxMCAmIzQzOzE0NTAsMTMgQEAgaW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LAogCiAJLyogVGhlIHBvcnQgbWlnaHQgc3RpbGwgYmUgVkxBTiBmaWx0ZXJpbmcgZXZlbiBpZiBpdCYjMzk7cyBubyBsb25nZXIKIAkgKiB1bmRlciBhIGJyaWRnZSwgZWl0aGVyIGR1ZSB0byBkcy0mZ3Q7dmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsIG9yCi0JICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcwotCSAqIG9uIHRoZSBDUFUgcG9ydC4KJiM0MzsJICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcsIGFuZCBldmVyeSBwb3J0IG9mIGEKJiM0MzsJICogZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkIHN3aXRjaCBrZWVwcyBpdHMgODAyMXEgdXBwZXIKJiM0MzsJICogVkxBTnMgd2hldGhlciBicmlkZ2VkIG9yIG5vdC4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zIG9uIHRoZQomIzQzOwkgKiBDUFUgcG9ydC4KIAkgKi8KLQl2bGFuX2ZpbHRlcmluZyA9IGRzYV9wb3J0X2lzX3ZsYW5fZmlsdGVyaW5nKGRwKTsKJiM0MzsJdmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHwKJiM0MzsJCQkgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOwogCWlmICh2bGFuX2ZpbHRlcmluZykgewogCQllcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZGV2LCBmYWxzZSk7CiAJCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9kc2EvdXNlci5jIGIvbmV0L2RzYS91c2VyLmMKaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDQKLS0tIGEvbmV0L2RzYS91c2VyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS91c2VyLmMKQEAgLTE5NDYsNiAmIzQzOzE5NDYsNyBAQCBzdGF0aWMgaW50IGRzYV91c2VyX2NsZWFyX3ZsYW4oc3RydWN0IG5ldF9kZXZpY2UgKnZkZXYsIGludCB2aWQsIHZvaWQgKmFyZykKICAqCiAgKiAtIElmIHN0YW5kYWxvbmUgKHRoaXMgaW5jbHVkZXMgc29mdHdhcmUgYnJpZGdlLCBzb2Z0d2FyZSBMQUcpOgogICogICAgIC0gaWYgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcgPSB0cnVlLCBPUiBpZgomIzQzOyAqICAgICAgIGRzLSZndDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmCiAgKiAgICAgICAoZHMtJmd0O3ZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWUgQU5EIHRoZXJlIGFyZSBicmlkZ2VzIHNwYW5uaW5nCiAgKiAgICAgICB0aGlzIHN3aXRjaCBjaGlwIHdoaWNoIGhhdmUgdmxhbl9maWx0ZXJpbmc9MSkKICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnMKQEAgLTI3MTcsNyAmIzQzOzI3MTgsOCBAQCB2b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcikKIAl1c2VyLSZndDtod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDOwogCWlmICh1c2VyLSZndDtuZWVkZWRfdGFpbHJvb20pCiAJCXVzZXItJmd0O2ZlYXR1cmVzICZhbXA7PSB+KE5FVElGX0ZfU0cgfCBORVRJRl9GX0ZSQUdMSVNUKTsKLQlpZiAoZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcpCiYjNDM7CWlmIChkcy0mZ3Q7bmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fAomIzQzOwkgICAgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKQogCQl1c2VyLSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7CiAKIAl1c2VyLSZndDtsbHR4ID0gdHJ1ZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIERTQSBWTEFOIE9mZmxvYWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGZsYWcsIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIGluIHRoZSBgZHNhX3N3aXRjaGAgc3RydWN0dXJlIGFuZCB0aGVuIG1vZGlmaWVzIGEgYnVuY2ggb2YgcmVsYXRlZCBmdW5jdGlvbnMgaW4gY29yZSBEU0EgY29kZSBhbmQgdGhlIGBiNTNgIGRyaXZlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBldmVuIGJlIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBEU0EgaXMsIGFmdGVyIGFsbCwgYWJvdXQgRXRoZXJuZXQgc3dpdGNoZXMuCgpJIGtub3cgdGhlcmUmIzM5O3MgYSBgZHNhX2xvb3BgIGRyaXZlciwgd2hpY2ggaXMgYSBtb2NrIERTQSBpbXBsZW1lbnRhdGlvbiwgYnV0IGBiNTNgIGlzIHNwZWNpZmljYWxseSBmb3IgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2hlcy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkgaGFzIG1lIHRoaW5raW5nLiBDb3VsZCBhIG1vY2sgZHJpdmVyIHNvbWVob3cgaGl0IHRoZXNlIGNoYW5nZXM/CgpJIHJlYWxpemUgdGhlIGNvcmUgRFNBIG1vZGlmaWNhdGlvbnMgYXJlIGdhdGVkIGJlaGluZCBgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCwgd2hpY2ggbG9va3MgbGlrZSBpdCYjMzk7cyBvbmx5IHNldCBpbiBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIGBiNTNfY29tbW9uLmNgLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIEkgZXZlbiBnZXQgYGI1M2AgdG8gaW5zdGFudGlhdGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT8KCmBiNTNgIGhhcyBzZXZlcmFsIGZyb250ZW5kIG9wdGlvbnM6IGBiNTNfbW1hcC5jYCwgYGI1M19tZGlvLmNgLCBgYjUzX3NwaS5jYCwgYGI1M19zcmFiLmNgLiAgQ291bGQgSSBmdXp6IHRoaXMgd2l0aCBzeXprYWxsZXI/ICBVbmZvcnR1bmF0ZWx5LCBzeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSB0aGUgaGFyZHdhcmUgZm9yIHRoZXNlIEJyb2FkY29tIHN3aXRjaGVzLiBJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGBiNTNgIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBjb250ZXh0LgoKQnV0LCB3YWl0Li4uIGlzIHRoZXJlIGEgd2F5IHRvIHByb2JlIGBiNTNgIHZpYSBhIGRldmljZSB0cmVlIG9yIHNvbWV0aGluZz8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IHR5cGljYWxseSBkbyB0aGF0IHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBzZXR1cCwgdGhvdWdoIGl0ICpkb2VzKiBoYXZlIHNvbWUgdmlydHVhbCBkZXZpY2UgY2FwYWJpbGl0aWVzLiBCdXQgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIuLi4gVGhpcyBmZWVscyBsaWtlIGEgZGVhZCBlbmQuCgpPa2F5LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBJcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIsIGFueXdoZXJlLCB0aGF0IHNldHMgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYD8gSSBzaG91bGQgcHJvYmFibHkgcnVuIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBqdXN0IHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk2LVx0ZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyOTc6XHRkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk4LVxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTM4NT1zdHJ1Y3QgZHNhX3N3aXRjaCB7XG4tLVxuaW5jbHVkZS9uZXQvZHNhLmgtNDA4LVx0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xuaW5jbHVkZS9uZXQvZHNhLmg6NDA5Olx0dTMyXHRcdFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ6MTtcbmluY2x1ZGUvbmV0L2RzYS5oLTQxMC1cbi0tXG5uZXQvZHNhL3BvcnQuYz03OTE9aW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXG4tLVxubmV0L2RzYS9wb3J0LmMtODMzLVxubmV0L2RzYS9wb3J0LmM6ODM0Olx0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbm5ldC9kc2EvcG9ydC5jLTgzNS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9kc2EvcG9ydC5jLTg0NC1cbm5ldC9kc2EvcG9ydC5jOjg0NTpcdFx0aWYgKCFkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xubmV0L2RzYS9wb3J0LmMtODQ2LVx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLS1cbm5ldC9kc2EvcG9ydC5jPTE0MzI9aW50IGRzYV9wb3J0X2NoYW5nZV9jb25kdWl0KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvcG9ydC5jLTE0NTMtXHQgKiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nLCBhbmQgZXZlcnkgcG9ydCBvZiBhXG5uZXQvZHNhL3BvcnQuYzoxNDU0Olx0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgc3dpdGNoIGtlZXBzIGl0cyA4MDIxcSB1cHBlclxubmV0L2RzYS9wb3J0LmMtMTQ1NS1cdCAqIFZMQU5zIHdoZXRoZXIgYnJpZGdlZCBvciBub3QuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcyBvbiB0aGVcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNDU4LVx0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcbm5ldC9kc2EvcG9ydC5jOjE0NTk6XHRcdFx0IGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkO1xubmV0L2RzYS9wb3J0LmMtMTQ2MC1cdGlmICh2bGFuX2ZpbHRlcmluZykge1xuLS1cbm5ldC9kc2EvdXNlci5jPTE5Mjk9c3RhdGljIGludCBkc2FfdXNlcl9jbGVhcl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbm5ldC9kc2EvdXNlci5jOjE5NDk6ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxubmV0L2RzYS91c2VyLmMtMTk1MC0gKiAgICAgICAoZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcbi0tXG5uZXQvZHNhL3VzZXIuYz0yNjk4PXZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxuLS1cbm5ldC9kc2EvdXNlci5jLTI3MjEtXHRpZiAoZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fFxubmV0L2RzYS91c2VyLmM6MjcyMjpcdCAgICBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbm5ldC9kc2EvdXNlci5jLTI3MjMtXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBiNTMgRHJpdmVyIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgbm90aWNlZCB0aGF0IGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgaXMgZXhjbHVzaXZlbHkgc2V0IHdpdGhpbiB0aGUgYGI1M19jb21tb24uY2AgZmlsZS4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gTm93IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGBiNTNgIGRyaXZlciBpcyBldmVuIGFjY2Vzc2libGUgb3IgcmVsZXZhbnQgd2l0aGluIHRoZSBTeXprYWxsZXIgZW52aXJvbm1lbnQuIE15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYW55IG9mIHRoZSB2aXJ0dWFsIGRyaXZlcnMgdGhhdCBTeXprYWxsZXIgdGVzdHMgdXNlIGBiNTNfc3dpdGNoX2FsbG9jYC4gSWYgdGhleSBkbywgdGhhdCYjMzk7cyBhIGRpcmVjdCBpbmRpY2F0aW9uIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSByZWFjaCB0aGUgcmVsZXZhbnQgY29kZS4gVGhpcyBjaGVjayB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgYSBjcnVjaWFsIGFuc3dlciBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1M19zd2l0Y2hfYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MzE3Mz1zdGF0aWMgaW50IGI1M19zd2l0Y2hfaW5pdChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyNjMtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMjY0OnN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjY1LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBiNTNfaW9fb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzMwNC19XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMzA1OkVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9hbGxvYyk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMzA2LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0yOTI9c3RhdGljIGludCBiNTNfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTMzNC1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozMzU6XHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBcdTAwMjZiNTNfbWRpb19vcHMsIG1kaW9kZXYtXHUwMDNlYnVzKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zMzYtXHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM9NDA1PXN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQ0MjpcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFx1MDAyNmI1M19tbWFwX29wcywgcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQzLVx0aWYgKCFkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiNTNfbWF4X2FybF9lbnRyaWVzKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTI3OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODA6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0yODEtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGI1M19pb19vcHMgKm9wcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYz0yOTY9c3RhdGljIGludCBiNTNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzAwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzAxOlx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZzcGktXHUwMDNlZGV2LCBcdTAwMjZiNTNfc3BpX29wcywgc3BpKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwMi1cdGlmICghZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYz02MTg9c3RhdGljIGludCBiNTNfc3JhYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYy02NDQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmM6NjQ1Olx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2YjUzX3NyYWJfb3BzLCBwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYy02NDYtXHRpZiAoIWRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jPTEzNjU9c3RhdGljIGludCBiY21fc2YyX3N3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy0xMzg5LVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYzoxMzkwOlx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXHUwMDI2YmNtX3NmMl9pb19vcHMsIHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYy0xMzkxLVx0aWYgKCFkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxOAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBiNTNgIERyaXZlciYjMzk7cyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGI1M2AgZHJpdmVyIOKAkyBpdCYjMzk7cyBmb3IgaGFyZHdhcmUgc3dpdGNoZXMsIHJpZ2h0PyBJdCByZWxpZXMgb24gTURJTywgTU1BUCwgU1BJLCBTUkFCLCBhbmQgdGhlIGBiY21fc2YyYCBwbGF0Zm9ybSBkZXZpY2UgdG8gcHJvYmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBtZXRob2RzIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8KClR5cGljYWxseSwgcGxhdGZvcm0gZGV2aWNlcyAqY2FuKiBiZSBpbnN0YW50aWF0ZWQgaWYgdGhlcmUmIzM5O3MgYSBkZXZpY2UgdHJlZSBlbnRyeSBvciBtYW51YWwgcmVnaXN0cmF0aW9uLCBidXQgc3RhbmRhcmQgc3l6a2FsbGVyIGlzbiYjMzk7dCBzZXQgdXAgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gVW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgcHNldWRvLWRldmljZSBpbiBzeXprYWxsZXIsIG9yIGEgbW9kdWxlIHRoYXQgZG9lcyBpdC4gSG1tLCBob2xkIG9uLi4uIGBiNTNfbW1hcGAgaXMgKmFsc28qIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhbnkgcGF0aHdheSB0byB0cmlnZ2VyIGBiNTNfc3dpdGNoX2FsbG9jYCB3aXRoaW4gUUVNVS4KCkkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIGlmIGl0JiMzOTtzIGNvbmZpZ3VyZWQsIGJ1dCB0aGF0JiMzOTtzIG5vdCBzdGFuZGFyZCBmb3IgYGI1M2AuIEJ1dCB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIHNvbWUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkuIFRoZXNlIERTQSBjaGFuZ2Vz4oCmIGxldCYjMzk7cyBsb29rOgoKYGBgYwpAQCAtODMxLDYgJiM0Mzs4MzEsOSBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZywKIAkJCWlmICghdXNlcikKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCWlmIChkcy0mZ3Q7bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwogCQkJZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsCiAJCQkJCQkJICAgICB2bGFuX2ZpbHRlcmluZyk7CmBgYAoKT2theSwgc28gdGhlc2UgY2hhbmdlcyBpbiBEU0EgYXJlIG9ubHkgKmV4ZWN1dGVkKiBpZiBgZHMtJmd0O25lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBpcyB0cnVlLiBCdXQgaXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIHRoYXQgc2V0cyBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgPyBJIGFscmVhZHkgZ3JlcHBlZCBmb3IgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBhbmQgaXQmIzM5O3Mgb25seSBzZXQgaW4gYGRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jYC4gU28gdGhlc2UgRFNBIGNoYW5nZXMgYXJlIGVmZmVjdGl2ZWx5IGRlYWQgY29kZSB1bmxlc3MgdGhlIGBiNTNgIHN3aXRjaCBpcyAqcHJlc2VudCouCgpBbmQgdGhhdCYjMzk7cyB0aGUga2lja2VyLCBpc24mIzM5O3QgaXQ/IFRoZSBgYjUzYCBkcml2ZXIgaXMgZm9yIEJyb2FkY29tIHN3aXRjaGVzOyBpdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZSB0byBydW4sIG9yIGEgZGV2aWNlIHRyZWUgbm9kZSB0aGF0JiMzOTtzIGdvaW5nIHRvIGJpbmQgdG8gaXQsIGJ1dCB0aGVuLCB3aXRob3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGl0JiMzOTtzIGp1c3QgZ29pbmcgdG8gZmFpbCBkdXJpbmcgcHJvYmluZy4gTURJTyByZWFkcyB3aWxsIGZhaWwsIE1NQVAgd2lsbCBmYWlsIHRvIG1hcCBvciByZWFkIHRoZSBjb3JyZWN0IElEIHJlZ2lzdGVycywgeW91IG5hbWUgaXQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgY2hlY2sgb3V0IGBiNTNfbW1hcF9wcm9iZWAgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY2hhbmNlIGl0IGNhbiBzdWNjZWVkICp3aXRob3V0KiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX21tYXBfcHJvYmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTM0ND1zdGF0aWMgY29uc3Qgc3RydWN0IGI1M19pb19vcHMgYjUzX21tYXBfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjAtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6MzYxOnN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmVfb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjItXHRcdFx0ICAgICBzdHJ1Y3QgYjUzX3BsYXRmb3JtX2RhdGEgKipwcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQwNC1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0MDU6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQwNi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQxMy1cdGlmICghcGRhdGEgXHUwMDI2XHUwMDI2IG5wKSB7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDE0Olx0XHRyZXQgPSBiNTNfbW1hcF9wcm9iZV9vZihwZGV2LCBcdTAwMjZwZGF0YSk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDE1LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiNTNfbW1hcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDk4Olx0LnByb2JlID0gYjUzX21tYXBfcHJvYmUsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDk5LVx0LnJlbW92ZSA9IGI1M19tbWFwX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYjUzX21tYXBfcHJvYmVgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgYjUzX21tYXBfcHJvYmVgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gZXhhY3RseSBob3cgdGhpcyByb3V0aW5lIGhhbmRsZXMgbWVtb3J5IG1hcHBpbmcuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBjbG9zZWx5IGF0IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB1bmRlcmx5aW5nIE1NVSwgYW5kIHBhcnRpY3VsYXJseSBob3cgaXQgYWNjb3VudHMgZm9yIHRoZSBwb3RlbnRpYWwgY29tcGxleGl0aWVzIG9mIHRoZSBCQ001M3h4JiMzOTtzIG1lbW9yeSBsYXlvdXQsIGdpdmVuIGl0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBuYXR1cmUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGNvbmN1cnJlbnRseS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgcGFnZSBhbGlnbm1lbnQsIHBlcm1pc3Npb24gc2V0dGluZyAocmVhZCwgd3JpdGUsIGV4ZWN1dGUpLCBhbmQgZXJyb3IgY2hlY2tpbmcuIEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBwbGF0Zm9ybSYjMzk7cyBpbnRlcnJ1cHQgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyBhbGwgcm9idXN0IGFuZCBzYWZlLiBJJiMzOTtsbCBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhZGRyZXNzIHNwYWNlIGNvbmZsaWN0cywgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDA1Olx0c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIDQwNjpcdHtcbiA0MDc6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LVx1MDAzZWRldi5vZl9ub2RlO1xuIDQwODpcdFx0c3RydWN0IGI1M19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XG4gNDA5Olx0XHRzdHJ1Y3QgYjUzX21tYXBfcHJpdiAqcHJpdjtcbiA0MTA6XHRcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXY7XG4gNDExOlx0XHRpbnQgcmV0O1xuIDQxMjpcdFxuIDQxMzpcdFx0aWYgKCFwZGF0YSBcdTAwMjZcdTAwMjYgbnApIHtcbiA0MTQ6XHRcdFx0cmV0ID0gYjUzX21tYXBfcHJvYmVfb2YocGRldiwgXHUwMDI2cGRhdGEpO1xuIDQxNTpcdFx0XHRpZiAocmV0KSB7XG4gNDE2Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7T0YgcHJvYmUgZXJyb3JcXG5cJiMzNDspO1xuIDQxNzpcdFx0XHRcdHJldHVybiByZXQ7XG4gNDE4Olx0XHRcdH1cbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdGlmICghcGRhdGEpXG4gNDIyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQyMzpcdFxuIDQyNDpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4gNDI1Olx0XHRpZiAoIXByaXYpXG4gNDI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQyNzpcdFxuIDQyODpcdFx0cHJpdi1cdTAwM2VyZWdzID0gcGRhdGEtXHUwMDNlcmVncztcbiA0Mjk6XHRcbiA0MzA6XHRcdHByaXYtXHUwMDNlZ3Bpb19jdHJsID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShucCwgXCYjMzQ7YnJjbSxncGlvLWN0cmxcJiMzNDspO1xuIDQzMTpcdFx0aWYgKCFJU19FUlIocHJpdi1cdTAwM2VncGlvX2N0cmwpKSB7XG4gNDMyOlx0XHRcdGlmIChwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzMThfREVWSUNFX0lEIHx8XG4gNDMzOlx0XHRcdCAgICBwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzMjhfREVWSUNFX0lEIHx8XG4gNDM0Olx0XHRcdCAgICBwZGF0YS1cdTAwM2VjaGlwX2lkID09IEJDTTYzNjJfREVWSUNFX0lEKVxuIDQzNTpcdFx0XHRcdHByaXYtXHUwMDNlcGh5X2luZm8gPSBcdTAwMjZiY202MzE4X2VwaHlfaW5mbztcbiA0MzY6XHRcdFx0ZWxzZSBpZiAocGRhdGEtXHUwMDNlY2hpcF9pZCA9PSBCQ002MzY4X0RFVklDRV9JRClcbiA0Mzc6XHRcdFx0XHRwcml2LVx1MDAzZXBoeV9pbmZvID0gXHUwMDI2YmNtNjM2OF9lcGh5X2luZm87XG4gNDM4Olx0XHRcdGVsc2UgaWYgKHBkYXRhLVx1MDAzZWNoaXBfaWQgPT0gQkNNNjMyNjhfREVWSUNFX0lEKVxuIDQzOTpcdFx0XHRcdHByaXYtXHUwMDNlcGh5X2luZm8gPSBcdTAwMjZiY202MzI2OF9lcGh5X2luZm87XG4gNDQwOlx0XHR9XG4gNDQxOlx0XG4gNDQyOlx0XHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZiNTNfbW1hcF9vcHMsIHByaXYpO1xuIDQ0MzpcdFx0aWYgKCFkZXYpXG4gNDQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDQ0NTpcdFxuIDQ0NjpcdFx0ZGV2LVx1MDAzZXBkYXRhID0gcGRhdGE7XG4gNDQ3Olx0XG4gNDQ4Olx0XHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpO1xuIDQ0OTpcdFxuIDQ1MDpcdFx0cmV0dXJuIGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbiA0NTE6XHR9XG4gNDUyOlx0XG4gNDUzOlx0c3RhdGljIHZvaWQgYjUzX21tYXBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gNDU0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIwMQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQjUzIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gdGhlIGNvZGUgc25pcHBldCBpcyBjYWxsaW5nIGBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldilgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgdGhpcyBCNTMgc3dpdGNoIGRyaXZlciB1cCBhbmQgcnVubmluZywgcmlnaHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgYjUzX3N3aXRjaF9yZWdpc3RlcmAgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nJiMzOTtzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX3N3aXRjaF9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0zMzg4PUVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9kZXRlY3QpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM4OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMzOTA6aW50IGI1M19zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGI1M19kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMzOTEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTM0MTAtfVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzQxMTpFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzQxMi1cbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MjkyPXN0YXRpYyBpbnQgYjUzX21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNDQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzQ1Olx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM0Ni1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQwNT1zdGF0aWMgaW50IGI1M19tbWFwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ0OS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0NTA6XHRyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ1MS19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI4ND1pbnQgYjUzX3N3aXRjaF9kZXRlY3Qoc3RydWN0IGI1M19kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjg1LVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjI4NjppbnQgYjUzX3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0yODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM9Mjk2PXN0YXRpYyBpbnQgYjUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwNy1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjMwODpcdHJldCA9IGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jPTYxOD1zdGF0aWMgaW50IGI1M19zcmFiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY1Ni1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYzo2NTc6XHRyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY1OC19XG4tLVxuZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYz0xMzY1PXN0YXRpYyBpbnQgYmNtX3NmMl9zd19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU0OC1cbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM6MTU0OTpcdHJldCA9IGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU1MC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDI4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgYGI1M19zd2l0Y2hfcmVnaXN0ZXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYjUzX3N3aXRjaF9yZWdpc3RlcmAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHMuIElzIHRoaXMgYSBuZXR3b3JrIGRldmljZT8gQSBoYXJkd2FyZSBwZXJpcGhlcmFsPyBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgaXQgbWlnaHQgYmUgcmVsYXRlZCB0byBzb21lIGZvcm0gb2Ygc3dpdGNoaW5nIGZ1bmN0aW9uYWxpdHksIHBlcmhhcHMgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBiaXQgZmllbGRzLCBjb250cm9sIHNpZ25hbHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBNeSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBXaGF0JiMzOTtzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlPyBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBkYXRhIHdpZHRoPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBsaWtlIHJlZ2lzdGVyIGFjY2VzcyBwcm90ZWN0aW9ucz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgbG9va2luZyBmb3IgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcsIE1BQyBhZGRyZXNzIGhhbmRsaW5nLCBWTEFOIGNvbmZpZ3VyYXRpb24gKGlmIHJlbGV2YW50KSwgYW5kIGVycm9yIHN0YXR1cyBiaXRzLiBNeSBtaW5kIGlzIGFscmVhZHkgcGFyc2luZyB0aGUgcG9zc2libGUgdXNlIGNhc2Ugc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM5MDpcdGludCBiNTNfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4zMzkxOlx0e1xuMzM5MjpcdFx0aW50IHJldDtcbjMzOTM6XHRcbjMzOTQ6XHRcdGlmIChkZXYtXHUwMDNlcGRhdGEpIHtcbjMzOTU6XHRcdFx0ZGV2LVx1MDAzZWNoaXBfaWQgPSBkZXYtXHUwMDNlcGRhdGEtXHUwMDNlY2hpcF9pZDtcbjMzOTY6XHRcdFx0ZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMgPSBkZXYtXHUwMDNlcGRhdGEtXHUwMDNlZW5hYmxlZF9wb3J0cztcbjMzOTc6XHRcdH1cbjMzOTg6XHRcbjMzOTk6XHRcdGlmICghZGV2LVx1MDAzZWNoaXBfaWQgXHUwMDI2XHUwMDI2IGI1M19zd2l0Y2hfZGV0ZWN0KGRldikpXG4zNDAwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzQwMTpcdFxuMzQwMjpcdFx0cmV0ID0gYjUzX3N3aXRjaF9pbml0KGRldik7XG4zNDAzOlx0XHRpZiAocmV0KVxuMzQwNDpcdFx0XHRyZXR1cm4gcmV0O1xuMzQwNTpcdFxuMzQwNjpcdFx0ZGV2X2luZm8oZGV2LVx1MDAzZWRldiwgXCYjMzQ7Zm91bmQgc3dpdGNoOiAlcywgcmV2ICVpXFxuXCYjMzQ7LFxuMzQwNzpcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIGRldi1cdTAwM2Vjb3JlX3Jldik7XG4zNDA4Olx0XG4zNDA5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkZXYtXHUwMDNlZHMpO1xuMzQxMDpcdH1cbjM0MTE6XHRFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfcmVnaXN0ZXIpO1xuMzQxMjpcdFxuMzQxMzpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7Sm9uYXMgR29yc2tpIFx1MDAzY2pvZ29Ab3BlbndydC5vcmdcdTAwM2VcJiMzNDspO1xuMzQxNDpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtCNTMgc3dpdGNoIGxpYnJhcnlcJiMzNDspO1xuMzQxNTpcdE1PRFVMRV9MSUNFTlNFKFwmIzM0O0R1YWwgQlNEL0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDc3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQjUzIFN3aXRjaCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgZmlyc3QgaW1wcmVzc2lvbiBpcyBpdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoaXMgQjUzIHN3aXRjaC4gVGhlIGtleSBpcyBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgYGNoaXBfaWRgLiBJdCBzZWVtcyB0byBwcmlvcml0aXplIGEgZmV3IGFwcHJvYWNoZXMsIHdoaWNoIGlzIGdlbmVyYWxseSBnb29kIHByYWN0aWNlIGZvciBmbGV4aWJpbGl0eS4KCklmIHRoZSBgZGV2LSZndDtjaGlwX2lkYCBpc24mIzM5O3QgYWxyZWFkeSBwb3B1bGF0ZWQsIGl0IGNhbGxzIGBiNTNfc3dpdGNoX2RldGVjdChkZXYpYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgcHJvYmFibHkgdXNpbmcgc29tZSBoYXJkd2FyZSBwcm9iaW5nIG9yIG90aGVyIGRldGVjdGlvbiBtZXRob2QgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBjaGlwIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIElmIHRoZSBwbGF0Zm9ybSBkYXRhLCBgZGV2LSZndDtwZGF0YWAsICppcyogc2V0LCB0aGVuIGl0IGdyYWJzIHRoZSBgY2hpcF9pZGAgZnJvbSB0aGVyZSBpbnN0ZWFkLiBUaGF0IHN1Z2dlc3RzIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIGVpdGhlciBhdXRvLWRldGVjdGlvbiBvciBib2FyZC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KClVsdGltYXRlbHksIGl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hlcmUgdGhlIGBjaGlwX2lkYCBjb21lcyBmcm9tLCB0aGUgbmV4dCBrZXkgb3BlcmF0aW9uIGlzIGBiNTNfc3dpdGNoX2luaXQoZGV2KWAuIEkmIzM5O20ga2VlbiB0byBzZWUgd2hhdCBoYXBwZW5zIGhlcmUuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgc3dpdGNoIGNvbmZpZ3VyYXRpb24gYW5kIHNldHVwIG9jY3Vycy4gTGV04oCZcyBkaXZlIGludG8gYGI1M19zd2l0Y2hfaW5pdGAgbm93IHRvIHVuZGVyc3RhbmQgdGhlIG1lYXQgb2YgdGhlIGRyaXZlcuKAmXMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNzMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE3MzpcdHN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXG4zMTc0Olx0e1xuMzE3NTpcdFx0dTMyIGNoaXBfaWQgPSBkZXYtXHUwMDNlY2hpcF9pZDtcbjMxNzY6XHRcdHVuc2lnbmVkIGludCBpO1xuMzE3NzpcdFxuMzE3ODpcdFx0aWYgKGlzNjN4eChkZXYpKVxuMzE3OTpcdFx0XHRjaGlwX2lkID0gQkNNNjNYWF9ERVZJQ0VfSUQ7XG4zMTgwOlx0XG4zMTgxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGI1M19zd2l0Y2hfY2hpcHMpOyBpJiM0MzsmIzQzOykge1xuMzE4MjpcdFx0XHRjb25zdCBzdHJ1Y3QgYjUzX2NoaXBfZGF0YSAqY2hpcCA9IFx1MDAyNmI1M19zd2l0Y2hfY2hpcHNbaV07XG4zMTgzOlx0XG4zMTg0Olx0XHRcdGlmIChjaGlwLVx1MDAzZWNoaXBfaWQgPT0gY2hpcF9pZCkge1xuMzE4NTpcdFx0XHRcdGlmICghZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMpXG4zMTg2Olx0XHRcdFx0XHRkZXYtXHUwMDNlZW5hYmxlZF9wb3J0cyA9IGNoaXAtXHUwMDNlZW5hYmxlZF9wb3J0cztcbjMxODc6XHRcdFx0XHRkZXYtXHUwMDNlbmFtZSA9IGNoaXAtXHUwMDNlZGV2X25hbWU7XG4zMTg4Olx0XHRcdFx0ZGV2LVx1MDAzZWR1cGxleF9yZWcgPSBjaGlwLVx1MDAzZWR1cGxleF9yZWc7XG4zMTg5Olx0XHRcdFx0ZGV2LVx1MDAzZXZ0YV9yZWdzWzBdID0gY2hpcC1cdTAwM2V2dGFfcmVnc1swXTtcbjMxOTA6XHRcdFx0XHRkZXYtXHUwMDNldnRhX3JlZ3NbMV0gPSBjaGlwLVx1MDAzZXZ0YV9yZWdzWzFdO1xuMzE5MTpcdFx0XHRcdGRldi1cdTAwM2V2dGFfcmVnc1syXSA9IGNoaXAtXHUwMDNldnRhX3JlZ3NbMl07XG4zMTkyOlx0XHRcdFx0ZGV2LVx1MDAzZWp1bWJvX3BtX3JlZyA9IGNoaXAtXHUwMDNlanVtYm9fcG1fcmVnO1xuMzE5MzpcdFx0XHRcdGRldi1cdTAwM2VpbXBfcG9ydCA9IGNoaXAtXHUwMDNlaW1wX3BvcnQ7XG4zMTk0Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV92bGFucyA9IGNoaXAtXHUwMDNldmxhbnM7XG4zMTk1Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV9hcmxfYmlucyA9IGNoaXAtXHUwMDNlYXJsX2JpbnM7XG4zMTk2Olx0XHRcdFx0ZGV2LVx1MDAzZW51bV9hcmxfYnVja2V0cyA9IGNoaXAtXHUwMDNlYXJsX2J1Y2tldHM7XG4zMTk3Olx0XHRcdFx0ZGV2LVx1MDAzZWFybF9vcHMgPSBjaGlwLVx1MDAzZWFybF9vcHM7XG4zMTk4Olx0XHRcdFx0YnJlYWs7XG4zMTk5Olx0XHRcdH1cbjMyMDA6XHRcdH1cbjMyMDE6XHRcbjMyMDI6XHRcdC8qIGNoZWNrIHdoaWNoIEJDTTUzMjV4IHZlcnNpb24gd2UgaGF2ZSAqL1xuMzIwMzpcdFx0aWYgKGlzNTMyNShkZXYpKSB7XG4zMjA0Olx0XHRcdHU4IHZjNDtcbjMyMDU6XHRcbjMyMDY6XHRcdFx0YjUzX3JlYWQ4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDRfMjUsIFx1MDAyNnZjNCk7XG4zMjA3Olx0XG4zMjA4Olx0XHRcdC8qIGNoZWNrIHJlc2VydmVkIGJpdHMgKi9cbjMyMDk6XHRcdFx0c3dpdGNoICh2YzQgXHUwMDI2IDMpIHtcbjMyMTA6XHRcdFx0Y2FzZSAxOlxuMzIxMTpcdFx0XHRcdC8qIEJDTTUzMjVFICovXG4zMjEyOlx0XHRcdFx0YnJlYWs7XG4zMjEzOlx0XHRcdGNhc2UgMzpcbjMyMTQ6XHRcdFx0XHQvKiBCQ001MzI1RiAtIGRvIG5vdCB1c2UgcG9ydCA0ICovXG4zMjE1Olx0XHRcdFx0ZGV2LVx1MDAzZWVuYWJsZWRfcG9ydHMgXHUwMDI2PSB+QklUKDQpO1xuMzIxNjpcdFx0XHRcdGJyZWFrO1xuMzIxNzpcdFx0XHRkZWZhdWx0OlxuMzIxODpcdC8qIE9uIHRoZSBCQ000N1hYIFNvQ3MgdGhpcyBpcyB0aGUgc3VwcG9ydGVkIGludGVybmFsIHN3aXRjaC4qL1xuMzIxOTpcdCNpZm5kZWYgQ09ORklHX0JDTTQ3WFhcbjMyMjA6XHRcdFx0XHQvKiBCQ001MzI1TSAqL1xuMzIyMTpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMzIyMjpcdCNlbHNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzAwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEI1MyBEcml2ZXIgQ29kZSBpbiBhIFN5emthbGxlciBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kLCBpbml0aWFsbHksIGBiNTNfc3dpdGNoX2luaXRgIGlzIGNvbmNlcm5pbmcuIEl0IHJlYWRzIGhhcmR3YXJlLCB3aGljaCBtZWFucyBpdCB3aWxsIHByb2JhYmx5IGNyYXNoIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudC4gQnV0IHdoYXQgaWYgYGlzNTMyNShkZXYpYCBpcyBmYWxzZT8gVGhlbiB3ZSBtb3ZlIG9uLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gd2UgZ2V0IHRvIGBiNTNfbW1hcF9wcm9iZWAgdmlhIGZ1enppbmc/CgpTeXprYWxsZXIgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgaXNuJiMzOTt0IHN0cmFpZ2h0Zm9yd2FyZC4gQW5kIHRoZSBjcnVjaWFsIERTQSBjaGFuZ2VzIGRlcGVuZCBvbiBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGJlaW5nIHRydWUsIHdoaWNoLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBpcyBleGNsdXNpdmVseSBzZXQgYnkgYGI1M2AuIElmIGBiNTNgIGlzIHVucmVhY2hhYmxlLCB0aGVzZSBEU0EgcGFydHMgYXJlIGFsc28gb3V0IG9mIHJlYWNoLiBDb3VsZCB3ZSBwcm9iZSBgYjUzYCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uPyBOb3Qgd2l0aCBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXBzIChHQ0UvUUVNVSksIGFzIGl0IGRvZXNuJiMzOTt0IHN1cHBvcnQgb24tdGhlLWZseSBkZXZpY2UgdHJlZSBub2RlIGluamVjdGlvbi4gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIHNvIEkmIzM5O20gY2VydGFpbiBgYjUzX2NvbW1vbi5jYCBpcyB0aGUgb25seSBwbGFjZSBpdCYjMzk7cyBzZXQuCgpGdW5jdGlvbnMgbGlrZSBgYjUzX3ZsYW5fYWRkYCwgYGI1M192bGFuX2RlbGAsIGBiNTNfYnJfam9pbmAsIGFuZCB0aGUgcmVzdCBhcmUgYWxzbyBkZWZpbmVkIHdpdGhpbiBgYjUzX2NvbW1vbi5jYC4gVGhlcmVmb3JlLCB0aGUgZW50aXJlIHBhdGNoIHNlZW1zIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGBiNTNgIGRyaXZlci4gU2luY2UgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIEJyb2FkY29tIHN3aXRjaGVzIGFuZCB3ZSBkb24mIzM5O3QgaGF2ZSB0aGF0IGhhcmR3YXJlIGluIFFFTVUvR0NFLCBpdCYjMzk7cyB2aXJ0dWFsbHkgdW5yZWFjaGFibGUuCgpJcyB0aGVyZSBzb21lIGR1bW15IGRyaXZlciBvciBhIG1vY2sgdGhhdCB1c2VzIGBiNTNgPyBObywgaXQmIzM5O3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSXMgdGhlIGBiNTNgIGRyaXZlciBldmVuIGNvbXBpbGVkIGludG8gdGhlIFN5emthbGxlciBrZXJuZWxzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZywgYnV0IGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIGl0IHdvbiYjMzk7dCBwcm9iZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4KCk5vdywgYGI1M19tbWFwYCB1c2VzIHBsYXRmb3JtIGRhdGEgb3IgZGV2aWNlIHRyZWUuIENhbiB3ZSByZWdpc3RlciBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcz8gV2UgY2FuJiMzOTt0IHVzZSBgL3N5cy9idXMvcGxhdGZvcm0vZHJpdmVycy9iNTMtbW1hcC9iaW5kYCBiZWNhdXNlIHRoZXJlIG5lZWRzIHRvIGJlIGEgZGV2aWNlIGFscmVhZHkuIFdlIGNhbiYjMzk7dCBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlOyB0aGVyZSBpc24mIzM5O3QgYSBkcml2ZXIgbGlrZSBhICYjMzk7cGxhdGZvcm0tZGV2aWNlLWNyZWF0b3ImIzM5Oy4gU3l6a2FsbGVyIGhhcyB1dGlsaXRpZXMgZm9yIGdlbmV0bGluayBhbmQgb3RoZXIgdGhpbmdzLCBidXQgbm90IGZvciBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRpb24uCgpXYWl0LCB3aGF0IGFib3V0IGBiY21fc2YyYD8gVGhhdCYjMzk7cyBhbHNvIGEgcGxhdGZvcm0gZHJpdmVyLiBBbmQgYGI1M19tZGlvYD8gSXQmIzM5O3MgYW4gTURJTyBkcml2ZXIuIFN5emthbGxlciBzb21ldGltZXMgaGFuZGxlcyBNRElPIGRldmljZXMgaWYgdGhlcmUmIzM5O3MgYSB2aXJ0dWFsIE1ESU8gYnVzIChgZHNhX2xvb3BgLCBgbWFjYmAsIGV0Yy4pLiBIb3dldmVyLCBgYjUzX21kaW9gIGRlbWFuZHMgc3BlY2lmaWMgUEhZIElEcywgb3IgZGV2aWNlIHRyZWUuIEkgbmVlZCB0byBleGFtaW5lIGBiNTNfbWRpb19kcml2ZXJgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX21kaW9fZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zODk9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYjUzX29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zOTAtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzkxOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgYjUzX21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Mi1cdC5wcm9iZVx0PSBiNTNfbWRpb19wcm9iZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk5LX07XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6NDAwOm1kaW9fbW9kdWxlX2RyaXZlcihiNTNfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTQwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gUHJvYmUgRnVuY3Rpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGI1M19tZGlvX3Byb2JlYCBmdW5jdGlvbiB3b3Jrcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgdGFrZSBhIGxvb2suIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGl0IGFuZCB0aGUgYXNzb2NpYXRlZCBtYXRjaCB0YWJsZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZHJpdmVyJiMzOTtzIGludGVudCBhbmQgY2FwYWJpbGl0aWVzLiBJdCYjMzk7cyBsaWtlbHkgdGhlIG1hdGNoIHRhYmxlIHdpbGwgcmV2ZWFsIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoLCB3aGljaCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXN0IG9mIHRoZSBwcm9iZSByb3V0aW5lLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHByb2JlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWdpc3RlciBhY2Nlc3MsIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBhbnkgcG90ZW50aWFsIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrIGhhbmRsaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YjUzX29mX21hdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zNjM9c3RhdGljIHZvaWQgYjUzX21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNzQtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzc1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGI1M19vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM3Ni1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDticmNtLGJjbTUzMjVcJiMzNDsgfSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzg4LX07XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzg5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGI1M19vZl9tYXRjaCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzkwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jPTM5MT1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGI1M19tZGlvX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk2LVx0XHQubmFtZSA9IFwmIzM0O2JjbTUzeHhcJiMzNDssXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzk3Olx0XHQub2ZfbWF0Y2hfdGFibGUgPSBiNTNfb2ZfbWF0Y2gsXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk4LVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgRGV2aWNlIFRyZWUgQ29tcGF0aWJpbGl0eSBhbmQgQ292ZXJhZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgc2l0dWF0aW9uLCBhbmQgdGhlIGNvcmUgaXNzdWUgaGVyZSBpcyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgc2VlbXMgdG8gYmUga2V5ZWQgdG8gbWF0Y2hpbmcgb24gY29tcGF0aWJsZSBzdHJpbmdzIHdpdGhpbiB0aGUgZGV2aWNlIHRyZWUgaXRzZWxmLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24sIG9mIGNvdXJzZSwgaXMgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSByZWdhcmRpbmcgZnV6emluZy4gU3l6a2FsbGVyLCBpbiBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgZG9lc24mIzM5O3QgZ2VuZXJhdGUgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBkb2VzIGl0PyBUaGF0JiMzOTtzIGEgaHVnZSBmYWN0b3IgdG8gY29uc2lkZXIgYmVjYXVzZSBpdCBtZWFucyBpZiBpdCYjMzk7cyBkZXBlbmRlbnQgb24gdGhlIERULCB0aGUgZnV6emluZyBjb3ZlcmFnZSBpcyBsaW1pdGVkLgoKSSBuZWVkIHRvIGV4cGxvcmUgc3BlY2lmaWMgZXhhbXBsZXMuIE5vdywgd2hhdCBhYm91dCB0aGUgYGI1M19zcGlgIGRyaXZlcj8gSG93IGRvZXMgKnRoYXQqIGRyaXZlciBoYW5kbGUgdGhpbmdzPyBUaGUgYGI1M19zcGlgIGlzIGEgY29tbW9ubHkgdXNlZCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5ncyBpdCB1dGlsaXplcyBpcyBlc3NlbnRpYWwgZm9yIGNvdmVyYWdlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhhdCBvbmUuIEkgd29uZGVyIGhvdyB0aGUgc2l0dWF0aW9uIHdpbGwgY2hhbmdlIGlmIG90aGVyIHBsYXRmb3JtcyB1dGlsaXplIGRldmljZSB0cmVlIGVudHJpZXM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2I1M19zcGlfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTM1OT1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgYjUzX3NwaV9pZHMpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzYwLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzYxOnN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBiNTNfc3BpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2Mi1cdC5kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzcxLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM6MzcyOm1vZHVsZV9zcGlfZHJpdmVyKGI1M19zcGlfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM3My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxNzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYjUzIGFuZCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyBSZWxhdGlvbnNoaXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgaXQgaGluZ2VzIG9uIHRoZSBkZXZpY2UgdHJlZSBvciBzb21lIGJvYXJkIGNvZGUuIFRoZSBpbXBsaWNhdGlvbiBpcywgYmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgdGhhdCBgYjUzYCBpcyBhIGNyaXRpY2FsIHBpZWNlLCBhbmQgdGhhdCBwYXRoIGlzIHVuYXZhaWxhYmxlLiBCdXQgaG9sZCBvbiwgaXMgdGhlcmUgYSBiYWNrZG9vcj8gQ2FuIEkgc29tZWhvdyB0cmlnZ2VyIGBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZ2Agd2l0aCB0aGF0IGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZyBhY3RpdmUgd2l0aG91dCBuZWVkaW5nIGBiNTNgPyBObywgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gd29yay4gTXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZDogdGhhdCBmbGFnJiMzOTtzIG9ubHkgc2V0IGR1cmluZyBgYjUzX3N3aXRjaF9hbGxvY2AuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNvZGUgYWdhaW4uIExldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBvdGhlciBmaWxlcyB0byB2ZXJpZnkgdGhhdCBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWUgc2Vjb25kYXJ5IG1lY2hhbmlzbSBmb3Igc2V0dGluZyBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxODoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk2LVx0ZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyOTc6XHRkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjk4LVxuLS1cbm5ldC9kc2EvdXNlci5jPTE5Mjk9c3RhdGljIGludCBkc2FfdXNlcl9jbGVhcl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICp2ZGV2LCBpbnQgdmlkLCB2b2lkICphcmcpXG4tLVxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbm5ldC9kc2EvdXNlci5jOjE5NDk6ICogICAgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxubmV0L2RzYS91c2VyLmMtMTk1MC0gKiAgICAgICAoZHMtXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MzcKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKioKCk9rYXksIHNvIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlIGlzIHRoZSBrZXkgaGVyZS4gSSBrbm93IHRoYXQmIzM5O3MgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgdGhlIGNydWNpYWwgZmxhZyBpcyBzZXQuIFRoaW5raW5nIGFib3V0IGl0LCBgYjUzYCBpcyBkZWZpbml0ZWx5IGEgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIGRyaXZlci4gSXQgd291bGRuJiMzOTt0IGluc3RhbnRpYXRlIG9yIGZ1bmN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIG5vIGNoYW5jZSwgbm90IHdpdGhvdXQgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIGNhcmVmdWxseSBjcmFmdGVkIGRldmljZSB0cmVlIGluamVjdGlvbiwgd2hpY2ggc3l6a2FsbGVyIHdvdWxkbiYjMzk7dCBiZSBkb2luZy4gU28sIGFueSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUgaW4gcGxhY2VzIGxpa2UgR0NFIG9yIFFFTVUuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlLXJlYWQgdGhlIGluc3RydWN0aW9ucy4uLiBSaWdodCwgdGhlIGluc3RydWN0aW9ucyBzcGVjaWZpY2FsbHkgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBpbnZvbHZlOgoKKiAgIFBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoqICAgQ29kZSB3aXRoaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoIGRyaXZlcnMuCgpBbmQgdGhpcyAqaXMqIGEgdmVuZG9yLXNwZWNpZmljIHN3aXRjaCBkcml2ZXIgKEJyb2FkY29tIEJDTTUzeHgpLiBJdCBleHBsaWNpdGx5IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGRldmljZSB0cmVlIGJpbmRpbmcgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBsb2NrZWQgYmVoaW5kIGEgZmxhZyB0aGF0IG9ubHkgdGhpcyBkcml2ZXIgY2FuIHNldC4gR2l2ZW4gYWxsIHRoYXQsIGl0JiMzOTtzIGNsZWFyOiBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE4OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTowMi42OTQ5NjE5MTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzMzM4NzY0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MDIuNjk0OTcxMTg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA1ODg4NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxODoxOTowMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXFxuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXFxuQEAgLTg5OCwxMCArODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4gXFx0cmV0dXJuIGRwLVxcdTAwM2VicmlkZ2UgPT0gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYjUzX3ZsYW4gKmh3KVxcbit7XFxuK1xcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBzdGFuZGFsb25lID0gZmFsc2U7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXG4rXFx0Kmh3ID0gKnZsO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0aHctXFx1MDAzZW1lbWJlcnMgPSAwO1xcbitcXHRody1cXHUwMDNldW50YWcgPSAwO1xcbitcXG4rXFx0YjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBwb3J0KSB7XFxuK1xcdFxcdGlmICghKHZsLVxcdTAwM2VtZW1iZXJzIFxcdTAwMjYgQklUKHBvcnQpKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRkcCA9IGRzYV90b19wb3J0KGRzLCBwb3J0KTtcXG4rXFxuK1xcdFxcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xcbitcXHRcXHRcXHRpZiAoZHAtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRzdGFuZGFsb25lID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aHctXFx1MDAzZW1lbWJlcnMgfD0gQklUKHBvcnQpO1xcbitcXHRcXHRody1cXHUwMDNldW50YWcgfD0gdmwtXFx1MDAzZXVudGFnIFxcdTAwMjYgQklUKHBvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXN0YW5kYWxvbmUpIHtcXG4rXFx0XFx0aHctXFx1MDAzZW1lbWJlcnMgPSAwO1xcbitcXHRcXHRody1cXHUwMDNldW50YWcgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gc3RhbmRhbG9uZTtcXG4rfVxcbitcXG4gaW50IGI1M19jb25maWd1cmVfdmxhbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gdmwgPSB7IDAgfTtcXG4rXFx0c3RydWN0IGI1M192bGFuIGh3O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gKnY7XFxuIFxcdGludCBpLCBkZWZfdmlkO1xcbiBcXHR1MTYgdmlkO1xcbkBAIC05MzcsMjAgKzk3OSwyMyBAQCBpbnQgYjUzX2NvbmZpZ3VyZV92bGFuKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0fVxcbiBcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCBcXHUwMDI2dmwpO1xcbiBcXG4tXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcXG4tXFx0XFx0LyogVXBvbiBpbml0aWFsIGNhbGwgd2UgaGF2ZSBub3Qgc2V0LXVwIGFueSBWTEFOcywgYnV0IHVwb25cXG4tXFx0XFx0ICogc3lzdGVtIHJlc3VtZSwgd2UgbmVlZCB0byByZXN0b3JlIGFsbCBWTEFOIGVudHJpZXMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRmb3IgKHZpZCA9IGRlZl92aWQgKyAxOyB2aWQgXFx1MDAzYyBkZXYtXFx1MDAzZW51bV92bGFuczsgdmlkKyspIHtcXG4tXFx0XFx0XFx0diA9IFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5zW3ZpZF07XFxuK1xcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXFxuK1xcdCAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLlxcbitcXHQgKi9cXG4rXFx0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fdmxhbnM7IHZpZCsrKSB7XFxuK1xcdFxcdHYgPSBcXHUwMDI2ZGV2LVxcdTAwM2V2bGFuc1t2aWRdO1xcbiBcXG4tXFx0XFx0XFx0aWYgKCF2LVxcdTAwM2VtZW1iZXJzKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCF2LVxcdTAwM2VtZW1iZXJzKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgdik7XFxuLVxcdFxcdFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIWI1M192bGFuX2h3X2VudHJ5KGRzLCB2LCBcXHUwMDI2aHcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZpZCwgXFx1MDAyNmh3KTtcXG4rXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2aWQpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZykge1xcbiBcXHRcXHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIGkpIHtcXG4gXFx0XFx0XFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKVxcbiBcXHRcXHRcXHRcXHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsXFxuQEAgLTE3MjAsNiArMTc2NSw3IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVxcdTAwM2Vwcml2O1xcbiBcXHRib29sIHVudGFnZ2VkID0gdmxhbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VEO1xcbiBcXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG4rXFx0c3RydWN0IGI1M192bGFuIGh3O1xcbiBcXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xcbiBcXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNzUxLDEzICsxNzk3LDE0IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0ZWxzZVxcbiBcXHRcXHR2bC1cXHUwMDNldW50YWcgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4gXFxuLVxcdGlmICghZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZylcXG4rXFx0aWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFxcdTAwMjZodykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmxhbi1cXHUwMDNldmlkLCB2bCk7XFxuK1xcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXFx1MDAzZXZpZCwgXFx1MDAyNmh3KTtcXG4gXFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVxcdTAwM2V2aWQpO1xcbiBcXG4tXFx0aWYgKCFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpIFxcdTAwMjZcXHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XFxuK1xcdGlmIChkZXYtXFx1MDAzZXZsYW5fZmlsdGVyaW5nIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSBcXHUwMDI2XFx1MDAyNiBuZXdfcHZpZCAhPSBvbGRfcHZpZCkge1xcbiBcXHRcXHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX1BPUlRfREVGX1RBRyhwb3J0KSxcXG4gXFx0XFx0XFx0ICAgIG5ld19wdmlkKTtcXG4gXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBvbGRfcHZpZCk7XFxuQEAgLTE3NzIsNyArMTgxOSw5IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4ge1xcbiBcXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuIFxcdGJvb2wgdW50YWdnZWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQ7XFxuK1xcdHN0cnVjdCBiNTNfdmxhbiBodztcXG4gXFx0c3RydWN0IGI1M192bGFuICp2bDtcXG4rXFx0Ym9vbCBuZWVkc19odztcXG4gXFx0dTE2IHB2aWQ7XFxuIFxcbiBcXHRpZiAodmxhbi1cXHUwMDNldmlkID09IDApXFxuQEAgLTE3ODIsNiArMTgzMSw4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFxuIFxcdHZsID0gXFx1MDAyNmRldi1cXHUwMDNldmxhbnNbdmxhbi1cXHUwMDNldmlkXTtcXG4gXFxuK1xcdG5lZWRzX2h3ID0gYjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXG4gXFx0dmwtXFx1MDAzZW1lbWJlcnMgXFx1MDAyNj0gfkJJVChwb3J0KTtcXG4gXFxuIFxcdGlmIChwdmlkID09IHZsYW4tXFx1MDAzZXZpZClcXG5AQCAtMTc5MSwxNCArMTg0MiwxOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuIFxcdGlmICh1bnRhZ2dlZCBcXHUwMDI2XFx1MDAyNiAhYjUzX3ZsYW5fcG9ydF9uZWVkc19mb3JjZWRfdGFnZ2VkKGRzLCBwb3J0KSlcXG4gXFx0XFx0dmwtXFx1MDAzZXVudGFnIFxcdTAwMjY9IH4oQklUKHBvcnQpKTtcXG4gXFxuLVxcdGlmICghZGV2LVxcdTAwM2V2bGFuX2ZpbHRlcmluZylcXG4rXFx0aWYgKCFuZWVkc19odylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVxcdTAwM2V2aWQsIHZsKTtcXG4rXFx0YjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVxcdTAwM2V2aWQsIFxcdTAwMjZodyk7XFxuIFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmxhbi1cXHUwMDNldmlkKTtcXG4gXFxuLVxcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcXG4tXFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcXG4rXFx0aWYgKGRldi1cXHUwMDNldmxhbl9maWx0ZXJpbmcpIHtcXG4rXFx0XFx0YjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9QT1JUX0RFRl9UQUcocG9ydCksXFxuK1xcdFxcdFxcdCAgICBwdmlkKTtcXG4rXFx0XFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjI2MSw2ICsyMzE2LDI4IEBAIGludCBiNTNfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xcbiBcXG4rc3RhdGljIHZvaWQgYjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gZHMtXFx1MDAzZXByaXY7XFxuK1xcdHN0cnVjdCBiNTNfdmxhbiBodztcXG4rXFx0c3RydWN0IGI1M192bGFuICp2bDtcXG4rXFx0dTE2IHZpZDtcXG4rXFxuK1xcdGlmIChkZXYtXFx1MDAzZXZsYW5fZmlsdGVyaW5nKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKHZpZCA9IGI1M19kZWZhdWx0X3B2aWQoZGV2KSArIDE7IHZpZCBcXHUwMDNjIGRldi1cXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xcbitcXHRcXHR2bCA9IFxcdTAwMjZkZXYtXFx1MDAzZXZsYW5zW3ZpZF07XFxuK1xcbitcXHRcXHRpZiAoISh2bC1cXHUwMDNlbWVtYmVycyBcXHUwMDI2IEJJVChwb3J0KSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0YjUzX3ZsYW5faHdfZW50cnkoZHMsIHZsLCBcXHUwMDI2aHcpO1xcbitcXHRcXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFxcdTAwMjZodyk7XFxuK1xcdFxcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgYjUzX2JyX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxcbiBcXHRcXHRib29sICp0eF9md2Rfb2ZmbG9hZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuQEAgLTIzMjQsNiArMjQwMSw4IEBAIGludCBiNTNfYnJfam9pbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuIFxcdGI1M193cml0ZTE2KGRldiwgQjUzX1BWTEFOX1BBR0UsIEI1M19QVkxBTl9QT1JUX01BU0socG9ydCksIHB2bGFuKTtcXG4gXFx0ZGV2LVxcdTAwM2Vwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47XFxuIFxcbitcXHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGI1M19icl9qb2luKTtcXG5AQCAtMjM3Niw2ICsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxcbiBcXHRcXHR2bC1cXHUwMDNlbWVtYmVycyB8PSBCSVQocG9ydCk7XFxuIFxcdFxcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHB2aWQsIHZsKTtcXG4gXFx0fVxcbitcXG4rXFx0YjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woYjUzX2JyX2xlYXZlKTtcXG4gXFxuQEAgLTMyMTMsNiArMzI5NCw3IEBAIHN0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsXFxuIFxcdCAqIGRldmljZXMuIChub3QgaGFyZHdhcmUgc3VwcG9ydGVkKVxcbiBcXHQgKi9cXG4gXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuK1xcdGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWU7XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZXJlZ19tdXRleCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmRldi1cXHUwMDNlc3RhdHNfbXV0ZXgpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNzUwN2Q2MzJlN2M2ZC4uNjdhMDFmYzVmODFlYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTQwNSw2ICs0MDUsOSBAQCBzdHJ1Y3QgZHNhX3N3aXRjaCB7XFxuIFxcdC8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi9cXG4gXFx0dTMyXFx0XFx0XFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZzoxO1xcbiBcXG4rXFx0LyogT2ZmbG9hZCA4MDIxcSB1cHBlcnMgb2Ygc3RhbmRhbG9uZSBwb3J0cyBldmVuIHdoZW4gbm90IGZpbHRlcmluZyAqL1xcbitcXHR1MzJcXHRcXHRcXHRuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDoxO1xcbitcXG4gXFx0LyogUGFzcyAucG9ydF92bGFuX2FkZCBhbmQgLnBvcnRfdmxhbl9kZWwgdG8gZHJpdmVycyBldmVuIGZvciBicmlkZ2VzXFxuIFxcdCAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kXFxuIFxcdCAqIHRoZW4gdGhlIG9wdGlvbiB3b3VsZCBnZXQgcmVtb3ZlZCksIGJ1dCBpdCBpcyB1bmtub3duIHdoZXRoZXIgdGhpc1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jXFxuaW5kZXggMWY1NTM2YzBkZmZjMi4uZTYxYWJjN2M3NGY3MyAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3BvcnQuY1xcbisrKyBiL25ldC9kc2EvcG9ydC5jXFxuQEAgLTgzMSw2ICs4MzEsOSBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcXG4gXFx0XFx0XFx0aWYgKCF1c2VyKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0XFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKHVzZXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbkBAIC04MzksMTAgKzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0ZHAtXFx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XFxuIFxcbi1cXHRcXHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZHAtXFx1MDAzZXVzZXIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xcbi1cXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRnb3RvIHJlc3RvcmU7XFxuK1xcdFxcdGlmICghZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKSB7XFxuK1xcdFxcdFxcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cXHUwMDNldXNlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XFxuK1xcdFxcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTQ0NSwxMCArMTQ1MCwxMyBAQCBpbnQgZHNhX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXFxuIFxcbiBcXHQvKiBUaGUgcG9ydCBtaWdodCBzdGlsbCBiZSBWTEFOIGZpbHRlcmluZyBldmVuIGlmIGl0J3Mgbm8gbG9uZ2VyXFxuIFxcdCAqIHVuZGVyIGEgYnJpZGdlLCBlaXRoZXIgZHVlIHRvIGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgb3JcXG4tXFx0ICogZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOc1xcbi1cXHQgKiBvbiB0aGUgQ1BVIHBvcnQuXFxuK1xcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nLCBhbmQgZXZlcnkgcG9ydCBvZiBhXFxuK1xcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCBzd2l0Y2gga2VlcHMgaXRzIDgwMjFxIHVwcGVyXFxuK1xcdCAqIFZMQU5zIHdoZXRoZXIgYnJpZGdlZCBvciBub3QuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOcyBvbiB0aGVcXG4rXFx0ICogQ1BVIHBvcnQuXFxuIFxcdCAqL1xcbi1cXHR2bGFuX2ZpbHRlcmluZyA9IGRzYV9wb3J0X2lzX3ZsYW5fZmlsdGVyaW5nKGRwKTtcXG4rXFx0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcXG4rXFx0XFx0XFx0IGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZDtcXG4gXFx0aWYgKHZsYW5fZmlsdGVyaW5nKSB7XFxuIFxcdFxcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkZXYsIGZhbHNlKTtcXG4gXFx0XFx0aWYgKGVycikge1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3VzZXIuYyBiL25ldC9kc2EvdXNlci5jXFxuaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL3VzZXIuY1xcbisrKyBiL25ldC9kc2EvdXNlci5jXFxuQEAgLTE5NDYsNiArMTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbiAgKlxcbiAgKiAtIElmIHN0YW5kYWxvbmUgKHRoaXMgaW5jbHVkZXMgc29mdHdhcmUgYnJpZGdlLCBzb2Z0d2FyZSBMQUcpOlxcbiAgKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxuKyAqICAgICAgIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmXFxuICAqICAgICAgIChkcy1cXHUwMDNldmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsID0gdHJ1ZSBBTkQgdGhlcmUgYXJlIGJyaWRnZXMgc3Bhbm5pbmdcXG4gICogICAgICAgdGhpcyBzd2l0Y2ggY2hpcCB3aGljaCBoYXZlIHZsYW5fZmlsdGVyaW5nPTEpXFxuICAqICAgICAgICAgLSB0aGUgODAyMXEgdXBwZXIgVkxBTnNcXG5AQCAtMjcxNyw3ICsyNzE4LDggQEAgdm9pZCBkc2FfdXNlcl9zZXR1cF90YWdnZXIoc3RydWN0IG5ldF9kZXZpY2UgKnVzZXIpXFxuIFxcdHVzZXItXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVEM7XFxuIFxcdGlmICh1c2VyLVxcdTAwM2VuZWVkZWRfdGFpbHJvb20pXFxuIFxcdFxcdHVzZXItXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjY9IH4oTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QpO1xcbi1cXHRpZiAoZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcpXFxuK1xcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyB8fFxcbitcXHQgICAgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxcbiBcXHRcXHR1c2VyLVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuIFxcbiBcXHR1c2VyLVxcdTAwM2VsbHR4ID0gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MDQuMjAxOTEzMzQ2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTcxODI2ODkyNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2ggZHJpdmVyIChiNTMpIGFuZCBjb3JlIERTQSBjb2RlLiBUaGUgY29yZSBEU0EgY2hhbmdlcyBhcmUgc3RyaWN0bHkgZ2F0ZWQgYnkgdGhlIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgZmxhZywgd2hpY2ggaXMgb25seSBzZXQgYnkgdGhlIGI1MyBkcml2ZXIuIFNpbmNlIGI1MyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEJyb2FkY29tIHN3aXRjaCBoYXJkd2FyZSBvciBzcGVjaWZpYyBkZXZpY2UgdHJlZSBiaW5kaW5ncyBub3QgcHJlc2VudCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIHRoZXNlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTM2MTdkZmUyY2RhMDNjZTc3YTlhMzNiMDgwYzY4YjIxZjc3MzQ1MlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE4OjE5OjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuaW5kZXggMDg4MDMxMGM5Y2UzZi4uYzRjODUxM2FlNDg2MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1xuQEAgLTg5OCwxMCArODk4LDUyIEBAIHN0YXRpYyBib29sIGI1M192bGFuX3BvcnRfbWF5X2pvaW5fdW50YWdnZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiBcdHJldHVybiBkcC1cdTAwM2VicmlkZ2UgPT0gTlVMTDtcbiB9XG4gXG4rc3RhdGljIGJvb2wgYjUzX3ZsYW5faHdfZW50cnkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgYjUzX3ZsYW4gKnZsLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBiNTNfdmxhbiAqaHcpXG4re1xuK1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRib29sIHN0YW5kYWxvbmUgPSBmYWxzZTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXHR1bnNpZ25lZCBpbnQgcG9ydDtcbitcbitcdCpodyA9ICp2bDtcbitcbitcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aHctXHUwMDNlbWVtYmVycyA9IDA7XG4rXHRody1cdTAwM2V1bnRhZyA9IDA7XG4rXG4rXHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIHBvcnQpIHtcbitcdFx0aWYgKCEodmwtXHUwMDNlbWVtYmVycyBcdTAwMjYgQklUKHBvcnQpKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0ZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4rXG4rXHRcdGlmICghZHNhX3BvcnRfaXNfY3B1KGRwKSkge1xuK1x0XHRcdGlmIChkcC1cdTAwM2VicmlkZ2UpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRzdGFuZGFsb25lID0gdHJ1ZTtcbitcdFx0fVxuK1xuK1x0XHRody1cdTAwM2VtZW1iZXJzIHw9IEJJVChwb3J0KTtcbitcdFx0aHctXHUwMDNldW50YWcgfD0gdmwtXHUwMDNldW50YWcgXHUwMDI2IEJJVChwb3J0KTtcbitcdH1cbitcbitcdGlmICghc3RhbmRhbG9uZSkge1xuK1x0XHRody1cdTAwM2VtZW1iZXJzID0gMDtcbitcdFx0aHctXHUwMDNldW50YWcgPSAwO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHN0YW5kYWxvbmU7XG4rfVxuK1xuIGludCBiNTNfY29uZmlndXJlX3ZsYW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIHtcbiBcdHN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IGI1M192bGFuIHZsID0geyAwIH07XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4gXHRzdHJ1Y3QgYjUzX3ZsYW4gKnY7XG4gXHRpbnQgaSwgZGVmX3ZpZDtcbiBcdHUxNiB2aWQ7XG5AQCAtOTM3LDIwICs5NzksMjMgQEAgaW50IGI1M19jb25maWd1cmVfdmxhbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gXHR9XG4gXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBkZWZfdmlkLCBcdTAwMjZ2bCk7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSB7XG4tXHRcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4tXHRcdCAqIHN5c3RlbSByZXN1bWUsIHdlIG5lZWQgdG8gcmVzdG9yZSBhbGwgVkxBTiBlbnRyaWVzLlxuLVx0XHQgKi9cbi1cdFx0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuLVx0XHRcdHYgPSBcdTAwMjZkZXYtXHUwMDNldmxhbnNbdmlkXTtcbitcdC8qIFVwb24gaW5pdGlhbCBjYWxsIHdlIGhhdmUgbm90IHNldC11cCBhbnkgVkxBTnMsIGJ1dCB1cG9uXG4rXHQgKiBzeXN0ZW0gcmVzdW1lLCB3ZSBuZWVkIHRvIHJlc3RvcmUgYWxsIFZMQU4gZW50cmllcy5cbitcdCAqL1xuK1x0Zm9yICh2aWQgPSBkZWZfdmlkICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuK1x0XHR2ID0gXHUwMDI2ZGV2LVx1MDAzZXZsYW5zW3ZpZF07XG4gXG4tXHRcdFx0aWYgKCF2LVx1MDAzZW1lbWJlcnMpXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCF2LVx1MDAzZW1lbWJlcnMpXG4rXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCB2KTtcbi1cdFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZpZCk7XG4tXHRcdH1cbitcdFx0aWYgKCFiNTNfdmxhbl9od19lbnRyeShkcywgdiwgXHUwMDI2aHcpKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2aWQsIFx1MDAyNmh3KTtcbitcdFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2aWQpO1xuK1x0fVxuK1xuK1x0aWYgKGRldi1cdTAwM2V2bGFuX2ZpbHRlcmluZykge1xuIFx0XHRiNTNfZm9yX2VhY2hfcG9ydChkZXYsIGkpIHtcbiBcdFx0XHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgaSkpXG4gXHRcdFx0XHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsXG5AQCAtMTcyMCw2ICsxNzY1LDcgQEAgaW50IGI1M192bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbiBcdGJvb2wgcHZpZCA9IHZsYW4tXHUwMDNlZmxhZ3MgXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcbitcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4gXHR1MTYgb2xkX3B2aWQsIG5ld19wdmlkO1xuIFx0aW50IGVycjtcbkBAIC0xNzUxLDEzICsxNzk3LDE0IEBAIGludCBiNTNfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGVsc2VcbiBcdFx0dmwtXHUwMDNldW50YWcgXHUwMDI2PSB+QklUKHBvcnQpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRpZiAoIWI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCB2bCk7XG4rXHRiNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCB2bGFuLVx1MDAzZXZpZCwgXHUwMDI2aHcpO1xuIFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCB2bGFuLVx1MDAzZXZpZCk7XG4gXG4tXHRpZiAoIWRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkgXHUwMDI2XHUwMDI2IG5ld19wdmlkICE9IG9sZF9wdmlkKSB7XG4rXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpIFx1MDAyNlx1MDAyNiBuZXdfcHZpZCAhPSBvbGRfcHZpZCkge1xuIFx0XHRiNTNfd3JpdGUxNihkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX1BPUlRfREVGX1RBRyhwb3J0KSxcbiBcdFx0XHQgICAgbmV3X3B2aWQpO1xuIFx0XHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIG9sZF9wdmlkKTtcbkBAIC0xNzcyLDcgKzE4MTksOSBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4ge1xuIFx0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4gXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbitcdHN0cnVjdCBiNTNfdmxhbiBodztcbiBcdHN0cnVjdCBiNTNfdmxhbiAqdmw7XG4rXHRib29sIG5lZWRzX2h3O1xuIFx0dTE2IHB2aWQ7XG4gXG4gXHRpZiAodmxhbi1cdTAwM2V2aWQgPT0gMClcbkBAIC0xNzgyLDYgKzE4MzEsOCBAQCBpbnQgYjUzX3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXG4gXHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2bGFuLVx1MDAzZXZpZF07XG4gXG4rXHRuZWVkc19odyA9IGI1M192bGFuX2h3X2VudHJ5KGRzLCB2bCwgXHUwMDI2aHcpO1xuK1xuIFx0dmwtXHUwMDNlbWVtYmVycyBcdTAwMjY9IH5CSVQocG9ydCk7XG4gXG4gXHRpZiAocHZpZCA9PSB2bGFuLVx1MDAzZXZpZClcbkBAIC0xNzkxLDE0ICsxODQyLDE4IEBAIGludCBiNTNfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbiBcdGlmICh1bnRhZ2dlZCBcdTAwMjZcdTAwMjYgIWI1M192bGFuX3BvcnRfbmVlZHNfZm9yY2VkX3RhZ2dlZChkcywgcG9ydCkpXG4gXHRcdHZsLVx1MDAzZXVudGFnIFx1MDAyNj0gfihCSVQocG9ydCkpO1xuIFxuLVx0aWYgKCFkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRpZiAoIW5lZWRzX2h3KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCB2bCk7XG4rXHRiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbitcdGI1M19zZXRfdmxhbl9lbnRyeShkZXYsIHZsYW4tXHUwMDNldmlkLCBcdTAwMjZodyk7XG4gXHRiNTNfZmFzdF9hZ2VfdmxhbihkZXYsIHZsYW4tXHUwMDNldmlkKTtcbiBcbi1cdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLCBwdmlkKTtcbi1cdGI1M19mYXN0X2FnZV92bGFuKGRldiwgcHZpZCk7XG4rXHRpZiAoZGV2LVx1MDAzZXZsYW5fZmlsdGVyaW5nKSB7XG4rXHRcdGI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKHBvcnQpLFxuK1x0XHRcdCAgICBwdmlkKTtcbitcdFx0YjUzX2Zhc3RfYWdlX3ZsYW4oZGV2LCBwdmlkKTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yMjYxLDYgKzIzMTYsMjggQEAgaW50IGI1M19tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gfVxuIEVYUE9SVF9TWU1CT0woYjUzX21kYl9kZWwpO1xuIFxuK3N0YXRpYyB2b2lkIGI1M19zdGFuZGFsb25lX3ZsYW5fcmVzeW5jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4re1xuK1x0c3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gaHc7XG4rXHRzdHJ1Y3QgYjUzX3ZsYW4gKnZsO1xuK1x0dTE2IHZpZDtcbitcbitcdGlmIChkZXYtXHUwMDNldmxhbl9maWx0ZXJpbmcpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAodmlkID0gYjUzX2RlZmF1bHRfcHZpZChkZXYpICsgMTsgdmlkIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3ZsYW5zOyB2aWQrKykge1xuK1x0XHR2bCA9IFx1MDAyNmRldi1cdTAwM2V2bGFuc1t2aWRdO1xuK1xuK1x0XHRpZiAoISh2bC1cdTAwM2VtZW1iZXJzIFx1MDAyNiBCSVQocG9ydCkpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRiNTNfdmxhbl9od19lbnRyeShkcywgdmwsIFx1MDAyNmh3KTtcbitcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgdmlkLCBcdTAwMjZodyk7XG4rXHRcdGI1M19mYXN0X2FnZV92bGFuKGRldiwgdmlkKTtcbitcdH1cbit9XG4rXG4gaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSxcbiBcdFx0Ym9vbCAqdHhfZndkX29mZmxvYWQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG5AQCAtMjMyNCw2ICsyNDAxLDggQEAgaW50IGI1M19icl9qb2luKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSxcbiBcdGI1M193cml0ZTE2KGRldiwgQjUzX1BWTEFOX1BBR0UsIEI1M19QVkxBTl9QT1JUX01BU0socG9ydCksIHB2bGFuKTtcbiBcdGRldi1cdTAwM2Vwb3J0c1twb3J0XS52bGFuX2N0bF9tYXNrID0gcHZsYW47XG4gXG4rXHRiNTNfc3RhbmRhbG9uZV92bGFuX3Jlc3luYyhkcywgcG9ydCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTChiNTNfYnJfam9pbik7XG5AQCAtMjM3Niw2ICsyNDU1LDggQEAgdm9pZCBiNTNfYnJfbGVhdmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlKVxuIFx0XHR2bC1cdTAwM2VtZW1iZXJzIHw9IEJJVChwb3J0KTtcbiBcdFx0YjUzX3NldF92bGFuX2VudHJ5KGRldiwgcHZpZCwgdmwpO1xuIFx0fVxuK1xuK1x0YjUzX3N0YW5kYWxvbmVfdmxhbl9yZXN5bmMoZHMsIHBvcnQpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKGI1M19icl9sZWF2ZSk7XG4gXG5AQCAtMzIxMyw2ICszMjk0LDcgQEAgc3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcbiBcdCAqIGRldmljZXMuIChub3QgaGFyZHdhcmUgc3VwcG9ydGVkKVxuIFx0ICovXG4gXHRkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlO1xuK1x0ZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZkZXYtXHUwMDNlcmVnX211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZXN0YXRzX211dGV4KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXG5pbmRleCA3NTA3ZDYzMmU3YzZkLi42N2EwMWZjNWY4MWVhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtNDA1LDYgKzQwNSw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoIHtcbiBcdC8qIEtlZXAgVkxBTiBmaWx0ZXJpbmcgZW5hYmxlZCBvbiBwb3J0cyBub3Qgb2ZmbG9hZGluZyBhbnkgdXBwZXIgKi9cbiBcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmc6MTtcbiBcbitcdC8qIE9mZmxvYWQgODAyMXEgdXBwZXJzIG9mIHN0YW5kYWxvbmUgcG9ydHMgZXZlbiB3aGVuIG5vdCBmaWx0ZXJpbmcgKi9cbitcdHUzMlx0XHRcdG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkOjE7XG4rXG4gXHQvKiBQYXNzIC5wb3J0X3ZsYW5fYWRkIGFuZCAucG9ydF92bGFuX2RlbCB0byBkcml2ZXJzIGV2ZW4gZm9yIGJyaWRnZXNcbiBcdCAqIHRoYXQgaGF2ZSB2bGFuX2ZpbHRlcmluZz0wLiBBbGwgZHJpdmVycyBzaG91bGQgaWRlYWxseSBzZXQgdGhpcyAoYW5kXG4gXHQgKiB0aGVuIHRoZSBvcHRpb24gd291bGQgZ2V0IHJlbW92ZWQpLCBidXQgaXQgaXMgdW5rbm93biB3aGV0aGVyIHRoaXNcbmRpZmYgLS1naXQgYS9uZXQvZHNhL3BvcnQuYyBiL25ldC9kc2EvcG9ydC5jXG5pbmRleCAxZjU1MzZjMGRmZmMyLi5lNjFhYmM3Yzc0ZjczIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9wb3J0LmNcbisrKyBiL25ldC9kc2EvcG9ydC5jXG5AQCAtODMxLDYgKzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLFxuIFx0XHRcdGlmICghdXNlcilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyh1c2VyLFxuIFx0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4gXHRcdFx0aWYgKGVycilcbkBAIC04MzksMTAgKzg0MiwxMiBAQCBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZyxcbiBcdH0gZWxzZSB7XG4gXHRcdGRwLVx1MDAzZXZsYW5fZmlsdGVyaW5nID0gdmxhbl9maWx0ZXJpbmc7XG4gXG4tXHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuLVx0XHRcdFx0XHRcdCAgICAgdmxhbl9maWx0ZXJpbmcpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdGdvdG8gcmVzdG9yZTtcbitcdFx0aWYgKCFkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xuK1x0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyhkcC1cdTAwM2V1c2VyLFxuK1x0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdGdvdG8gcmVzdG9yZTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTQ0NSwxMCArMTQ1MCwxMyBAQCBpbnQgZHNhX3BvcnRfY2hhbmdlX2NvbmR1aXQoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4gXG4gXHQvKiBUaGUgcG9ydCBtaWdodCBzdGlsbCBiZSBWTEFOIGZpbHRlcmluZyBldmVuIGlmIGl0J3Mgbm8gbG9uZ2VyXG4gXHQgKiB1bmRlciBhIGJyaWRnZSwgZWl0aGVyIGR1ZSB0byBkcy1cdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgb3Jcbi1cdCAqIGRzLVx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcuIEluIHR1cm4gdGhpcyBtZWFucyBWTEFOc1xuLVx0ICogb24gdGhlIENQVSBwb3J0LlxuK1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZywgYW5kIGV2ZXJ5IHBvcnQgb2YgYVxuK1x0ICogZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgc3dpdGNoIGtlZXBzIGl0cyA4MDIxcSB1cHBlclxuK1x0ICogVkxBTnMgd2hldGhlciBicmlkZ2VkIG9yIG5vdC4gSW4gdHVybiB0aGlzIG1lYW5zIFZMQU5zIG9uIHRoZVxuK1x0ICogQ1BVIHBvcnQuXG4gXHQgKi9cbi1cdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApO1xuK1x0dmxhbl9maWx0ZXJpbmcgPSBkc2FfcG9ydF9pc192bGFuX2ZpbHRlcmluZyhkcCkgfHxcbitcdFx0XHQgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ7XG4gXHRpZiAodmxhbl9maWx0ZXJpbmcpIHtcbiBcdFx0ZXJyID0gZHNhX3VzZXJfbWFuYWdlX3ZsYW5fZmlsdGVyaW5nKGRldiwgZmFsc2UpO1xuIFx0XHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS91c2VyLmMgYi9uZXQvZHNhL3VzZXIuY1xuaW5kZXggMDQxZjkwNjBjOGVmMC4uZmRhNmJhNGZkZDEzZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdXNlci5jXG4rKysgYi9uZXQvZHNhL3VzZXIuY1xuQEAgLTE5NDYsNiArMTk0Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxuICAqXG4gICogLSBJZiBzdGFuZGFsb25lICh0aGlzIGluY2x1ZGVzIHNvZnR3YXJlIGJyaWRnZSwgc29mdHdhcmUgTEFHKTpcbiAgKiAgICAgLSBpZiBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nID0gdHJ1ZSwgT1IgaWZcbisgKiAgICAgICBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9IHRydWUsIE9SIGlmXG4gICogICAgICAgKGRzLVx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWUgQU5EIHRoZXJlIGFyZSBicmlkZ2VzIHNwYW5uaW5nXG4gICogICAgICAgdGhpcyBzd2l0Y2ggY2hpcCB3aGljaCBoYXZlIHZsYW5fZmlsdGVyaW5nPTEpXG4gICogICAgICAgICAtIHRoZSA4MDIxcSB1cHBlciBWTEFOc1xuQEAgLTI3MTcsNyArMjcxOCw4IEBAIHZvaWQgZHNhX3VzZXJfc2V0dXBfdGFnZ2VyKHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyKVxuIFx0dXNlci1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuIFx0aWYgKHVzZXItXHUwMDNlbmVlZGVkX3RhaWxyb29tKVxuIFx0XHR1c2VyLVx1MDAzZWZlYXR1cmVzIFx1MDAyNj0gfihORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCk7XG4tXHRpZiAoZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZylcbitcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XG4rXHQgICAgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXG4gXHRcdHVzZXItXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuIFxuIFx0dXNlci1cdTAwM2VsbHR4ID0gdHJ1ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjA0LjIwMTkxNjA1NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5ODY3OTg1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBEU0EgVkxBTiBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgZmxhZywgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCwgaW4gdGhlIGBkc2Ffc3dpdGNoYCBzdHJ1Y3R1cmUgYW5kIHRoZW4gbW9kaWZpZXMgYSBidW5jaCBvZiByZWxhdGVkIGZ1bmN0aW9ucyBpbiBjb3JlIERTQSBjb2RlIGFuZCB0aGUgYGI1M2AgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGV2ZW4gYmUgdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IERTQSBpcywgYWZ0ZXIgYWxsLCBhYm91dCBFdGhlcm5ldCBzd2l0Y2hlcy5cblxuSSBrbm93IHRoZXJlJ3MgYSBgZHNhX2xvb3BgIGRyaXZlciwgd2hpY2ggaXMgYSBtb2NrIERTQSBpbXBsZW1lbnRhdGlvbiwgYnV0IGBiNTNgIGlzIHNwZWNpZmljYWxseSBmb3IgQnJvYWRjb20gQkNNNTN4eCBzd2l0Y2hlcy4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGUgY29yZSBEU0EgY29kZSAoYG5ldC9kc2EvcG9ydC5jYCwgYG5ldC9kc2EvdXNlci5jYCkgaGFzIG1lIHRoaW5raW5nLiBDb3VsZCBhIG1vY2sgZHJpdmVyIHNvbWVob3cgaGl0IHRoZXNlIGNoYW5nZXM/XG5cbkkgcmVhbGl6ZSB0aGUgY29yZSBEU0EgbW9kaWZpY2F0aW9ucyBhcmUgZ2F0ZWQgYmVoaW5kIGBkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAsIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBvbmx5IHNldCBpbiBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIGBiNTNfY29tbW9uLmNgLiBTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIEkgZXZlbiBnZXQgYGI1M2AgdG8gaW5zdGFudGlhdGUgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT9cblxuYGI1M2AgaGFzIHNldmVyYWwgZnJvbnRlbmQgb3B0aW9uczogYGI1M19tbWFwLmNgLCBgYjUzX21kaW8uY2AsIGBiNTNfc3BpLmNgLCBgYjUzX3NyYWIuY2AuICBDb3VsZCBJIGZ1enogdGhpcyB3aXRoIHN5emthbGxlcj8gIFVuZm9ydHVuYXRlbHksIHN5emthbGxlciBkb2Vzbid0IGhhdmUgdGhlIGhhcmR3YXJlIGZvciB0aGVzZSBCcm9hZGNvbSBzd2l0Y2hlcy4gSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGBiNTNgIG1pZ2h0IGJlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBjb250ZXh0LlxuXG5CdXQsIHdhaXQuLi4gaXMgdGhlcmUgYSB3YXkgdG8gcHJvYmUgYGI1M2AgdmlhIGEgZGV2aWNlIHRyZWUgb3Igc29tZXRoaW5nPyBTeXprYWxsZXIgZG9lc24ndCB0eXBpY2FsbHkgZG8gdGhhdCB1bmxlc3MgdGhlcmUncyBhIGN1c3RvbSBzZXR1cCwgdGhvdWdoIGl0ICpkb2VzKiBoYXZlIHNvbWUgdmlydHVhbCBkZXZpY2UgY2FwYWJpbGl0aWVzLiBCdXQgYGI1M2AgaXMgYSBoYXJkd2FyZSBkcml2ZXIuLi4gVGhpcyBmZWVscyBsaWtlIGEgZGVhZCBlbmQuXG5cbk9rYXksIGxldCdzIHN0ZXAgYmFjay4gSXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyLCBhbnl3aGVyZSwgdGhhdCBzZXRzIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGA/IEkgc2hvdWxkIHByb2JhYmx5IHJ1biBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywganVzdCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk1NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjE0LjE4ODcxNzUzOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA3NTEwMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTYtXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzI5NzpcXHRkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTgtXFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaD0zODU9c3RydWN0IGRzYV9zd2l0Y2gge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtNDA4LVxcdC8qIE9mZmxvYWQgODAyMXEgdXBwZXJzIG9mIHN0YW5kYWxvbmUgcG9ydHMgZXZlbiB3aGVuIG5vdCBmaWx0ZXJpbmcgKi9cXG5pbmNsdWRlL25ldC9kc2EuaDo0MDk6XFx0dTMyXFx0XFx0XFx0bmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQ6MTtcXG5pbmNsdWRlL25ldC9kc2EuaC00MTAtXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz03OTE9aW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy04MzMtXFxubmV0L2RzYS9wb3J0LmM6ODM0OlxcdFxcdFxcdGlmIChkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQpXFxubmV0L2RzYS9wb3J0LmMtODM1LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L2RzYS9wb3J0LmMtODQ0LVxcbm5ldC9kc2EvcG9ydC5jOjg0NTpcXHRcXHRpZiAoIWRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCkge1xcbm5ldC9kc2EvcG9ydC5jLTg0Ni1cXHRcXHRcXHRlcnIgPSBkc2FfdXNlcl9tYW5hZ2Vfdmxhbl9maWx0ZXJpbmcoZHAtXFx1MDAzZXVzZXIsXFxuLS1cXG5uZXQvZHNhL3BvcnQuYz0xNDMyPWludCBkc2FfcG9ydF9jaGFuZ2VfY29uZHVpdChzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE0NTMtXFx0ICogZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9maWx0ZXJpbmcsIGFuZCBldmVyeSBwb3J0IG9mIGFcXG5uZXQvZHNhL3BvcnQuYzoxNDU0OlxcdCAqIGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCBzd2l0Y2gga2VlcHMgaXRzIDgwMjFxIHVwcGVyXFxubmV0L2RzYS9wb3J0LmMtMTQ1NS1cXHQgKiBWTEFOcyB3aGV0aGVyIGJyaWRnZWQgb3Igbm90LiBJbiB0dXJuIHRoaXMgbWVhbnMgVkxBTnMgb24gdGhlXFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xNDU4LVxcdHZsYW5fZmlsdGVyaW5nID0gZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoZHApIHx8XFxubmV0L2RzYS9wb3J0LmM6MTQ1OTpcXHRcXHRcXHQgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkO1xcbm5ldC9kc2EvcG9ydC5jLTE0NjAtXFx0aWYgKHZsYW5fZmlsdGVyaW5nKSB7XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xOTI5PXN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxubmV0L2RzYS91c2VyLmM6MTk0OTogKiAgICAgICBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxcbm5ldC9kc2EvdXNlci5jLTE5NTAtICogICAgICAgKGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xcbi0tXFxubmV0L2RzYS91c2VyLmM9MjY5OD12b2lkIGRzYV91c2VyX3NldHVwX3RhZ2dlcihzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcilcXG4tLVxcbm5ldC9kc2EvdXNlci5jLTI3MjEtXFx0aWYgKGRzLVxcdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fZmlsdGVyaW5nIHx8XFxubmV0L2RzYS91c2VyLmM6MjcyMjpcXHQgICAgZHMtXFx1MDAzZW5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkKVxcbm5ldC9kc2EvdXNlci5jLTI3MjMtXFx0XFx0dXNlci1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOToxNi42OTYyMzQxOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTA1NjI1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYjUzIERyaXZlciBpbiBhIFN5emthbGxlciBDb250ZXh0KipcblxuT2theSwgc28gSSd2ZSBub3RpY2VkIHRoYXQgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBpcyBleGNsdXNpdmVseSBzZXQgd2l0aGluIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBgYjUzYCBkcml2ZXIgaXMgZXZlbiBhY2Nlc3NpYmxlIG9yIHJlbGV2YW50IHdpdGhpbiB0aGUgU3l6a2FsbGVyIGVudmlyb25tZW50LiBNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGFueSBvZiB0aGUgdmlydHVhbCBkcml2ZXJzIHRoYXQgU3l6a2FsbGVyIHRlc3RzIHVzZSBgYjUzX3N3aXRjaF9hbGxvY2AuIElmIHRoZXkgZG8sIHRoYXQncyBhIGRpcmVjdCBpbmRpY2F0aW9uIHRoYXQgSSBjb3VsZCBwb3RlbnRpYWxseSByZWFjaCB0aGUgcmVsZXZhbnQgY29kZS4gVGhpcyBjaGVjayB3aWxsIGltbWVkaWF0ZWx5IHByb3ZpZGUgYSBjcnVjaWFsIGFuc3dlciBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MjEuNTg2Nzk5MDk4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODk0MjIwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzX3N3aXRjaF9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0zMTczPXN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjYzLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jOjMyNjQ6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zMjY1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzMwNC19XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzMwNTpFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMzMDYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MjkyPXN0YXRpYyBpbnQgYjUzX21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTMzNC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6MzM1OlxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19tZGlvX29wcywgbWRpb2Rldi1cXHUwMDNlYnVzKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzM2LVxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQwNT1zdGF0aWMgaW50IGI1M19tbWFwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQxLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0NDI6XFx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2YjUzX21tYXBfb3BzLCBwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDQzLVxcdGlmICghZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiNTNfbWF4X2FybF9lbnRyaWVzKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjc5LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODA6c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjgxLVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmM9Mjk2PXN0YXRpYyBpbnQgYjUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzAwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjMwMTpcXHRkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgXFx1MDAyNmI1M19zcGlfb3BzLCBzcGkpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwMi1cXHRpZiAoIWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYz02MTg9c3RhdGljIGludCBiNTNfc3JhYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY0NC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmM6NjQ1OlxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19zcmFiX29wcywgcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jLTY0Ni1cXHRpZiAoIWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9MTM2NT1zdGF0aWMgaW50IGJjbV9zZjJfc3dfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTM4OS1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjEzOTA6XFx0ZGV2ID0gYjUzX3N3aXRjaF9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2YmNtX3NmMl9pb19vcHMsIHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTM5MS1cXHRpZiAoIWRldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MTk6MjMuNzc2MjI2NDk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3MjQ3MTI3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYjUzYCBEcml2ZXIncyBWaXJ0dWFsaXphdGlvbiBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBiNTNgIGRyaXZlciDigJMgaXQncyBmb3IgaGFyZHdhcmUgc3dpdGNoZXMsIHJpZ2h0PyBJdCByZWxpZXMgb24gTURJTywgTU1BUCwgU1BJLCBTUkFCLCBhbmQgdGhlIGBiY21fc2YyYCBwbGF0Zm9ybSBkZXZpY2UgdG8gcHJvYmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBtZXRob2RzIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT9cblxuVHlwaWNhbGx5LCBwbGF0Zm9ybSBkZXZpY2VzICpjYW4qIGJlIGluc3RhbnRpYXRlZCBpZiB0aGVyZSdzIGEgZGV2aWNlIHRyZWUgZW50cnkgb3IgbWFudWFsIHJlZ2lzdHJhdGlvbiwgYnV0IHN0YW5kYXJkIHN5emthbGxlciBpc24ndCBzZXQgdXAgdG8gYXV0b21hdGljYWxseSByZWdpc3RlciBhcmJpdHJhcnkgcGxhdGZvcm0gZGV2aWNlcy4gVW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIGluIHN5emthbGxlciwgb3IgYSBtb2R1bGUgdGhhdCBkb2VzIGl0LiBIbW0sIGhvbGQgb24uLi4gYGI1M19tbWFwYCBpcyAqYWxzbyogYSBwbGF0Zm9ybSBkcml2ZXIuIFRoaXMgY2hhbmdlcyB0aGluZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJ3MgYW55IHBhdGh3YXkgdG8gdHJpZ2dlciBgYjUzX3N3aXRjaF9hbGxvY2Agd2l0aGluIFFFTVUuXG5cbkkga25vdyBzeXprYWxsZXIgKmNhbiogaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzIGlmIGl0J3MgY29uZmlndXJlZCwgYnV0IHRoYXQncyBub3Qgc3RhbmRhcmQgZm9yIGBiNTNgLiBCdXQgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBzb21lIGNvcmUgRFNBIGNvZGUgKGBuZXQvZHNhL3BvcnQuY2AsIGBuZXQvZHNhL3VzZXIuY2ApLiBUaGVzZSBEU0EgY2hhbmdlc+KApiBsZXQncyBsb29rOlxuXG5gYGBjXG5AQCAtODMxLDYgKzgzMSw5IEBAIGludCBkc2FfcG9ydF92bGFuX2ZpbHRlcmluZyhzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBib29sIHZsYW5fZmlsdGVyaW5nLFxuIFx0XHRcdGlmICghdXNlcilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGlmIChkcy1cdTAwM2VuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuIFx0XHRcdGVyciA9IGRzYV91c2VyX21hbmFnZV92bGFuX2ZpbHRlcmluZyh1c2VyLFxuIFx0XHRcdFx0XHRcdFx0ICAgICB2bGFuX2ZpbHRlcmluZyk7XG5gYGBcblxuT2theSwgc28gdGhlc2UgY2hhbmdlcyBpbiBEU0EgYXJlIG9ubHkgKmV4ZWN1dGVkKiBpZiBgZHMtXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGlzIHRydWUuIEJ1dCBpcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIgdGhhdCBzZXRzIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGA/IEkgYWxyZWFkeSBncmVwcGVkIGZvciBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGFuZCBpdCdzIG9ubHkgc2V0IGluIGBkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY2AuIFNvIHRoZXNlIERTQSBjaGFuZ2VzIGFyZSBlZmZlY3RpdmVseSBkZWFkIGNvZGUgdW5sZXNzIHRoZSBgYjUzYCBzd2l0Y2ggaXMgKnByZXNlbnQqLlxuXG5BbmQgdGhhdCdzIHRoZSBraWNrZXIsIGlzbid0IGl0PyBUaGUgYGI1M2AgZHJpdmVyIGlzIGZvciBCcm9hZGNvbSBzd2l0Y2hlczsgaXQgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUgdG8gcnVuLCBvciBhIGRldmljZSB0cmVlIG5vZGUgdGhhdCdzIGdvaW5nIHRvIGJpbmQgdG8gaXQsIGJ1dCB0aGVuLCB3aXRob3V0IHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIGl0J3MganVzdCBnb2luZyB0byBmYWlsIGR1cmluZyBwcm9iaW5nLiBNRElPIHJlYWRzIHdpbGwgZmFpbCwgTU1BUCB3aWxsIGZhaWwgdG8gbWFwIG9yIHJlYWQgdGhlIGNvcnJlY3QgSUQgcmVnaXN0ZXJzLCB5b3UgbmFtZSBpdC5cblxuQWxyaWdodCwgbGV0J3MgZ28gYmFjayBhbmQgY2hlY2sgb3V0IGBiNTNfbW1hcF9wcm9iZWAgYW5kIHNlZSBpZiB0aGVyZSdzIGFueSBjaGFuY2UgaXQgY2FuIHN1Y2NlZWQgKndpdGhvdXQqIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQxOCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTozNS41MDA5NDE4MDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1MjkzODIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfbW1hcF9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM9MzQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX2lvX29wcyBiNTNfbW1hcF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtMzYwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzozNjE6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZV9vZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy0zNjItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYjUzX3BsYXRmb3JtX2RhdGEgKipwcGRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDA0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYzo0MDU6c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy00MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQxMy1cXHRpZiAoIXBkYXRhIFxcdTAwMjZcXHUwMDI2IG5wKSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQxNDpcXHRcXHRyZXQgPSBiNTNfbW1hcF9wcm9iZV9vZihwZGV2LCBcXHUwMDI2cGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYy00MTUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jPTQ5Nz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiNTNfbW1hcF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jOjQ5ODpcXHQucHJvYmUgPSBiNTNfbW1hcF9wcm9iZSxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmMtNDk5LVxcdC5yZW1vdmUgPSBiNTNfbW1hcF9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjM4LjU1Mzg4NDg2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzY3NDg0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYjUzX21tYXBfcHJvYmVgIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBiNTNfbW1hcF9wcm9iZWAgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBleGFjdGx5IGhvdyB0aGlzIHJvdXRpbmUgaGFuZGxlcyBtZW1vcnkgbWFwcGluZy4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBNTVUsIGFuZCBwYXJ0aWN1bGFybHkgaG93IGl0IGFjY291bnRzIGZvciB0aGUgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBvZiB0aGUgQkNNNTN4eCdzIG1lbW9yeSBsYXlvdXQsIGdpdmVuIGl0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5hdHVyZS4gSSdsbCBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBjb25jdXJyZW50bHkuIEknbGwgZm9jdXMgb24gaG93IGl0IGhhbmRsZXMgcGFnZSBhbGlnbm1lbnQsIHBlcm1pc3Npb24gc2V0dGluZyAocmVhZCwgd3JpdGUsIGV4ZWN1dGUpLCBhbmQgZXJyb3IgY2hlY2tpbmcuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaXRzIGludGVncmF0aW9uIHdpdGggdGhlIHBsYXRmb3JtJ3MgaW50ZXJydXB0IGhhbmRsaW5nLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgYWxsIHJvYnVzdCBhbmQgc2FmZS4gSSdsbCBzY3J1dGluaXplIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBhZGRyZXNzIHNwYWNlIGNvbmZsaWN0cywgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA5MiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjE5OjQ1LjIzMDYzNjA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDA1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDA1OlxcdHN0YXRpYyBpbnQgYjUzX21tYXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gNDA2OlxcdHtcXG4gNDA3OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LVxcdTAwM2VkZXYub2Zfbm9kZTtcXG4gNDA4OlxcdFxcdHN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LVxcdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcXG4gNDA5OlxcdFxcdHN0cnVjdCBiNTNfbW1hcF9wcml2ICpwcml2O1xcbiA0MTA6XFx0XFx0c3RydWN0IGI1M19kZXZpY2UgKmRldjtcXG4gNDExOlxcdFxcdGludCByZXQ7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlmICghcGRhdGEgXFx1MDAyNlxcdTAwMjYgbnApIHtcXG4gNDE0OlxcdFxcdFxcdHJldCA9IGI1M19tbWFwX3Byb2JlX29mKHBkZXYsIFxcdTAwMjZwZGF0YSk7XFxuIDQxNTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFxcXCJPRiBwcm9iZSBlcnJvclxcXFxuXFxcIik7XFxuIDQxNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA0MTg6XFx0XFx0XFx0fVxcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRpZiAoIXBkYXRhKVxcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMzpcXHRcXG4gNDI0OlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuIDQyNTpcXHRcXHRpZiAoIXByaXYpXFxuIDQyNjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0cHJpdi1cXHUwMDNlcmVncyA9IHBkYXRhLVxcdTAwM2VyZWdzO1xcbiA0Mjk6XFx0XFxuIDQzMDpcXHRcXHRwcml2LVxcdTAwM2VncGlvX2N0cmwgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCBcXFwiYnJjbSxncGlvLWN0cmxcXFwiKTtcXG4gNDMxOlxcdFxcdGlmICghSVNfRVJSKHByaXYtXFx1MDAzZWdwaW9fY3RybCkpIHtcXG4gNDMyOlxcdFxcdFxcdGlmIChwZGF0YS1cXHUwMDNlY2hpcF9pZCA9PSBCQ002MzE4X0RFVklDRV9JRCB8fFxcbiA0MzM6XFx0XFx0XFx0ICAgIHBkYXRhLVxcdTAwM2VjaGlwX2lkID09IEJDTTYzMjhfREVWSUNFX0lEIHx8XFxuIDQzNDpcXHRcXHRcXHQgICAgcGRhdGEtXFx1MDAzZWNoaXBfaWQgPT0gQkNNNjM2Ml9ERVZJQ0VfSUQpXFxuIDQzNTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHlfaW5mbyA9IFxcdTAwMjZiY202MzE4X2VwaHlfaW5mbztcXG4gNDM2OlxcdFxcdFxcdGVsc2UgaWYgKHBkYXRhLVxcdTAwM2VjaGlwX2lkID09IEJDTTYzNjhfREVWSUNFX0lEKVxcbiA0Mzc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2luZm8gPSBcXHUwMDI2YmNtNjM2OF9lcGh5X2luZm87XFxuIDQzODpcXHRcXHRcXHRlbHNlIGlmIChwZGF0YS1cXHUwMDNlY2hpcF9pZCA9PSBCQ002MzI2OF9ERVZJQ0VfSUQpXFxuIDQzOTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHlfaW5mbyA9IFxcdTAwMjZiY202MzI2OF9lcGh5X2luZm87XFxuIDQ0MDpcXHRcXHR9XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdGRldiA9IGI1M19zd2l0Y2hfYWxsb2MoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFx1MDAyNmI1M19tbWFwX29wcywgcHJpdik7XFxuIDQ0MzpcXHRcXHRpZiAoIWRldilcXG4gNDQ0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRkZXYtXFx1MDAzZXBkYXRhID0gcGRhdGE7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdHJldHVybiBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuIDQ1MTpcXHR9XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdHN0YXRpYyB2b2lkIGI1M19tbWFwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA0NTQ6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoxOTo0NS4yMzA3NzE2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTU1MTY0NjU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCNTMgU3dpdGNoIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZSBjb2RlIHNuaXBwZXQgaXMgY2FsbGluZyBgYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB0byBnZXQgdGhpcyBCNTMgc3dpdGNoIGRyaXZlciB1cCBhbmQgcnVubmluZywgcmlnaHQ/IEJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGRyaXZlciBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGhhcmR3YXJlLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZydzIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDEsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIwOjA0Ljc4MjQyMTMzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4MDcwNzk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfc3dpdGNoX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMzODg9RVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX2RldGVjdCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM4OS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozMzkwOmludCBiNTNfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzM5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0zNDEwLX1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzozNDExOkVYUE9SVF9TWU1CT0woYjUzX3N3aXRjaF9yZWdpc3Rlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMzQxMi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0yOTI9c3RhdGljIGludCBiNTNfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozNDU6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zNDYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21tYXAuYz00MDU9c3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ0OS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tbWFwLmM6NDUwOlxcdHJldHVybiBiNTNfc3dpdGNoX3JlZ2lzdGVyKGRldik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbW1hcC5jLTQ1MS19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg9Mjg0PWludCBiNTNfc3dpdGNoX2RldGVjdChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMjg1LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoyODY6aW50IGI1M19zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGI1M19kZXZpY2UgKmRldik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTI4Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTI5Nj1zdGF0aWMgaW50IGI1M19zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwNy1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYzozMDg6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTMwOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3JhYi5jPTYxOD1zdGF0aWMgaW50IGI1M19zcmFiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmMtNjU2LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NyYWIuYzo2NTc6XFx0cmV0dXJuIGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcmFiLmMtNjU4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmM9MTM2NT1zdGF0aWMgaW50IGJjbV9zZjJfc3dfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU0OC1cXG5kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jOjE1NDk6XFx0cmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMtMTU1MC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDowNy40NjMxMzQ4ODFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NjgzMTYwOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBiNTNfc3dpdGNoX3JlZ2lzdGVyYC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGNvbnRleHRzLiBJcyB0aGlzIGEgbmV0d29yayBkZXZpY2U/IEEgaGFyZHdhcmUgcGVyaXBoZXJhbD8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIHJlbGF0ZWQgdG8gc29tZSBmb3JtIG9mIHN3aXRjaGluZyBmdW5jdGlvbmFsaXR5LCBwZXJoYXBzIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBiaXQgZmllbGRzLCBjb250cm9sIHNpZ25hbHMsIGFuZCBwb3RlbnRpYWwgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb25zLiBNeSBtZW50YWwgY2hlY2tsaXN0IGluY2x1ZGVzIHRoaW5ncyBsaWtlOiBXaGF0J3MgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmU/IFdoYXQncyB0aGUgZXhwZWN0ZWQgZGF0YSB3aWR0aD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgbGlrZSByZWdpc3RlciBhY2Nlc3MgcHJvdGVjdGlvbnM/IEknbSBhbnRpY2lwYXRpbmcgbG9va2luZyBmb3IgZGV0YWlscyBvbiBlbmFibGluZy9kaXNhYmxpbmcsIE1BQyBhZGRyZXNzIGhhbmRsaW5nLCBWTEFOIGNvbmZpZ3VyYXRpb24gKGlmIHJlbGV2YW50KSwgYW5kIGVycm9yIHN0YXR1cyBiaXRzLiBNeSBtaW5kIGlzIGFscmVhZHkgcGFyc2luZyB0aGUgcG9zc2libGUgdXNlIGNhc2Ugc2NlbmFyaW9zLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjgsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDoxOS45MzE0NTUxNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM5MDpcXHRpbnQgYjUzX3N3aXRjaF9yZWdpc3RlcihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KVxcbjMzOTE6XFx0e1xcbjMzOTI6XFx0XFx0aW50IHJldDtcXG4zMzkzOlxcdFxcbjMzOTQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlcGRhdGEpIHtcXG4zMzk1OlxcdFxcdFxcdGRldi1cXHUwMDNlY2hpcF9pZCA9IGRldi1cXHUwMDNlcGRhdGEtXFx1MDAzZWNoaXBfaWQ7XFxuMzM5NjpcXHRcXHRcXHRkZXYtXFx1MDAzZWVuYWJsZWRfcG9ydHMgPSBkZXYtXFx1MDAzZXBkYXRhLVxcdTAwM2VlbmFibGVkX3BvcnRzO1xcbjMzOTc6XFx0XFx0fVxcbjMzOTg6XFx0XFxuMzM5OTpcXHRcXHRpZiAoIWRldi1cXHUwMDNlY2hpcF9pZCBcXHUwMDI2XFx1MDAyNiBiNTNfc3dpdGNoX2RldGVjdChkZXYpKVxcbjM0MDA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMzQwMTpcXHRcXG4zNDAyOlxcdFxcdHJldCA9IGI1M19zd2l0Y2hfaW5pdChkZXYpO1xcbjM0MDM6XFx0XFx0aWYgKHJldClcXG4zNDA0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzQwNTpcXHRcXG4zNDA2OlxcdFxcdGRldl9pbmZvKGRldi1cXHUwMDNlZGV2LCBcXFwiZm91bmQgc3dpdGNoOiAlcywgcmV2ICVpXFxcXG5cXFwiLFxcbjM0MDc6XFx0XFx0XFx0IGRldi1cXHUwMDNlbmFtZSwgZGV2LVxcdTAwM2Vjb3JlX3Jldik7XFxuMzQwODpcXHRcXG4zNDA5OlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRldi1cXHUwMDNlZHMpO1xcbjM0MTA6XFx0fVxcbjM0MTE6XFx0RVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX3JlZ2lzdGVyKTtcXG4zNDEyOlxcdFxcbjM0MTM6XFx0TU9EVUxFX0FVVEhPUihcXFwiSm9uYXMgR29yc2tpIFxcdTAwM2Nqb2dvQG9wZW53cnQub3JnXFx1MDAzZVxcXCIpO1xcbjM0MTQ6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJCNTMgc3dpdGNoIGxpYnJhcnlcXFwiKTtcXG4zNDE1OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJEdWFsIEJTRC9HUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjA6MTkuOTMxNjQ2MDhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUwMTAyMDU5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgQjUzIFN3aXRjaCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBteSBmaXJzdCBpbXByZXNzaW9uIGlzIGl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGlzIEI1MyBzd2l0Y2guIFRoZSBrZXkgaXMgaG93IGl0IGRldGVybWluZXMgdGhlIGBjaGlwX2lkYC4gSXQgc2VlbXMgdG8gcHJpb3JpdGl6ZSBhIGZldyBhcHByb2FjaGVzLCB3aGljaCBpcyBnZW5lcmFsbHkgZ29vZCBwcmFjdGljZSBmb3IgZmxleGliaWxpdHkuXG5cbklmIHRoZSBgZGV2LVx1MDAzZWNoaXBfaWRgIGlzbid0IGFscmVhZHkgcG9wdWxhdGVkLCBpdCBjYWxscyBgYjUzX3N3aXRjaF9kZXRlY3QoZGV2KWAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgdXNpbmcgc29tZSBoYXJkd2FyZSBwcm9iaW5nIG9yIG90aGVyIGRldGVjdGlvbiBtZXRob2QgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBjaGlwIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSWYgdGhlIHBsYXRmb3JtIGRhdGEsIGBkZXYtXHUwMDNlcGRhdGFgLCAqaXMqIHNldCwgdGhlbiBpdCBncmFicyB0aGUgYGNoaXBfaWRgIGZyb20gdGhlcmUgaW5zdGVhZC4gVGhhdCBzdWdnZXN0cyB0aGUgZHJpdmVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBlaXRoZXIgYXV0by1kZXRlY3Rpb24gb3IgYm9hcmQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuXG5cblVsdGltYXRlbHksIGl0IGRvZXNu4oCZdCBtYXR0ZXIgd2hlcmUgdGhlIGBjaGlwX2lkYCBjb21lcyBmcm9tLCB0aGUgbmV4dCBrZXkgb3BlcmF0aW9uIGlzIGBiNTNfc3dpdGNoX2luaXQoZGV2KWAuIEknbSBrZWVuIHRvIHNlZSB3aGF0IGhhcHBlbnMgaGVyZS4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBzd2l0Y2ggY29uZmlndXJhdGlvbiBhbmQgc2V0dXAgb2NjdXJzLiBMZXTigJlzIGRpdmUgaW50byBgYjUzX3N3aXRjaF9pbml0YCBub3cgdG8gdW5kZXJzdGFuZCB0aGUgbWVhdCBvZiB0aGUgZHJpdmVy4oCZcyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA3NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjA6MzQuOTQxODU1MjQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTczLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTczOlxcdHN0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpXFxuMzE3NDpcXHR7XFxuMzE3NTpcXHRcXHR1MzIgY2hpcF9pZCA9IGRldi1cXHUwMDNlY2hpcF9pZDtcXG4zMTc2OlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbjMxNzc6XFx0XFxuMzE3ODpcXHRcXHRpZiAoaXM2M3h4KGRldikpXFxuMzE3OTpcXHRcXHRcXHRjaGlwX2lkID0gQkNNNjNYWF9ERVZJQ0VfSUQ7XFxuMzE4MDpcXHRcXG4zMTgxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGI1M19zd2l0Y2hfY2hpcHMpOyBpKyspIHtcXG4zMTgyOlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBiNTNfY2hpcF9kYXRhICpjaGlwID0gXFx1MDAyNmI1M19zd2l0Y2hfY2hpcHNbaV07XFxuMzE4MzpcXHRcXG4zMTg0OlxcdFxcdFxcdGlmIChjaGlwLVxcdTAwM2VjaGlwX2lkID09IGNoaXBfaWQpIHtcXG4zMTg1OlxcdFxcdFxcdFxcdGlmICghZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzKVxcbjMxODY6XFx0XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzID0gY2hpcC1cXHUwMDNlZW5hYmxlZF9wb3J0cztcXG4zMTg3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbmFtZSA9IGNoaXAtXFx1MDAzZWRldl9uYW1lO1xcbjMxODg6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VkdXBsZXhfcmVnID0gY2hpcC1cXHUwMDNlZHVwbGV4X3JlZztcXG4zMTg5OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMF0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1swXTtcXG4zMTkwOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMV0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1sxXTtcXG4zMTkxOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldnRhX3JlZ3NbMl0gPSBjaGlwLVxcdTAwM2V2dGFfcmVnc1syXTtcXG4zMTkyOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlanVtYm9fcG1fcmVnID0gY2hpcC1cXHUwMDNlanVtYm9fcG1fcmVnO1xcbjMxOTM6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VpbXBfcG9ydCA9IGNoaXAtXFx1MDAzZWltcF9wb3J0O1xcbjMxOTQ6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VudW1fdmxhbnMgPSBjaGlwLVxcdTAwM2V2bGFucztcXG4zMTk1OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlbnVtX2FybF9iaW5zID0gY2hpcC1cXHUwMDNlYXJsX2JpbnM7XFxuMzE5NjpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZW51bV9hcmxfYnVja2V0cyA9IGNoaXAtXFx1MDAzZWFybF9idWNrZXRzO1xcbjMxOTc6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2Vhcmxfb3BzID0gY2hpcC1cXHUwMDNlYXJsX29wcztcXG4zMTk4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMxOTk6XFx0XFx0XFx0fVxcbjMyMDA6XFx0XFx0fVxcbjMyMDE6XFx0XFxuMzIwMjpcXHRcXHQvKiBjaGVjayB3aGljaCBCQ001MzI1eCB2ZXJzaW9uIHdlIGhhdmUgKi9cXG4zMjAzOlxcdFxcdGlmIChpczUzMjUoZGV2KSkge1xcbjMyMDQ6XFx0XFx0XFx0dTggdmM0O1xcbjMyMDU6XFx0XFxuMzIwNjpcXHRcXHRcXHRiNTNfcmVhZDgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNF8yNSwgXFx1MDAyNnZjNCk7XFxuMzIwNzpcXHRcXG4zMjA4OlxcdFxcdFxcdC8qIGNoZWNrIHJlc2VydmVkIGJpdHMgKi9cXG4zMjA5OlxcdFxcdFxcdHN3aXRjaCAodmM0IFxcdTAwMjYgMykge1xcbjMyMTA6XFx0XFx0XFx0Y2FzZSAxOlxcbjMyMTE6XFx0XFx0XFx0XFx0LyogQkNNNTMyNUUgKi9cXG4zMjEyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyMTM6XFx0XFx0XFx0Y2FzZSAzOlxcbjMyMTQ6XFx0XFx0XFx0XFx0LyogQkNNNTMyNUYgLSBkbyBub3QgdXNlIHBvcnQgNCAqL1xcbjMyMTU6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VlbmFibGVkX3BvcnRzIFxcdTAwMjY9IH5CSVQoNCk7XFxuMzIxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4zMjE3OlxcdFxcdFxcdGRlZmF1bHQ6XFxuMzIxODpcXHQvKiBPbiB0aGUgQkNNNDdYWCBTb0NzIHRoaXMgaXMgdGhlIHN1cHBvcnRlZCBpbnRlcm5hbCBzd2l0Y2guKi9cXG4zMjE5OlxcdCNpZm5kZWYgQ09ORklHX0JDTTQ3WFhcXG4zMjIwOlxcdFxcdFxcdFxcdC8qIEJDTTUzMjVNICovXFxuMzIyMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zMjIyOlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIwOjM0Ljk0MjAxNTQ1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDg2NDQ4OTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBCNTMgRHJpdmVyIENvZGUgaW4gYSBTeXprYWxsZXIgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQsIGluaXRpYWxseSwgYGI1M19zd2l0Y2hfaW5pdGAgaXMgY29uY2VybmluZy4gSXQgcmVhZHMgaGFyZHdhcmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcHJvYmFibHkgY3Jhc2ggaWYgdGhlIGhhcmR3YXJlIGlzbid0IHByZXNlbnQuIEJ1dCB3aGF0IGlmIGBpczUzMjUoZGV2KWAgaXMgZmFsc2U/IFRoZW4gd2UgbW92ZSBvbi4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIGdldCB0byBgYjUzX21tYXBfcHJvYmVgIHZpYSBmdXp6aW5nP1xuXG5TeXprYWxsZXIgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLCBidXQgaXQgaXNuJ3Qgc3RyYWlnaHRmb3J3YXJkLiBBbmQgdGhlIGNydWNpYWwgRFNBIGNoYW5nZXMgZGVwZW5kIG9uIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAgYmVpbmcgdHJ1ZSwgd2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIGlzIGV4Y2x1c2l2ZWx5IHNldCBieSBgYjUzYC4gSWYgYGI1M2AgaXMgdW5yZWFjaGFibGUsIHRoZXNlIERTQSBwYXJ0cyBhcmUgYWxzbyBvdXQgb2YgcmVhY2guIENvdWxkIHdlIHByb2JlIGBiNTNgIHZpYSBkZXZpY2UgdHJlZSBpbmplY3Rpb24/IE5vdCB3aXRoIHN0YW5kYXJkIFN5emthbGxlciBzZXR1cHMgKEdDRS9RRU1VKSwgYXMgaXQgZG9lc24ndCBzdXBwb3J0IG9uLXRoZS1mbHkgZGV2aWNlIHRyZWUgbm9kZSBpbmplY3Rpb24uIEkgYWxyZWFkeSBncmVwcGVkIGZvciBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgLCBzbyBJJ20gY2VydGFpbiBgYjUzX2NvbW1vbi5jYCBpcyB0aGUgb25seSBwbGFjZSBpdCdzIHNldC5cblxuRnVuY3Rpb25zIGxpa2UgYGI1M192bGFuX2FkZGAsIGBiNTNfdmxhbl9kZWxgLCBgYjUzX2JyX2pvaW5gLCBhbmQgdGhlIHJlc3QgYXJlIGFsc28gZGVmaW5lZCB3aXRoaW4gYGI1M19jb21tb24uY2AuIFRoZXJlZm9yZSwgdGhlIGVudGlyZSBwYXRjaCBzZWVtcyBpbmV4dHJpY2FibHkgbGlua2VkIHRvIHRoZSBgYjUzYCBkcml2ZXIuIFNpbmNlIGBiNTNgIGlzIGEgaGFyZHdhcmUgZHJpdmVyIGZvciBCcm9hZGNvbSBzd2l0Y2hlcyBhbmQgd2UgZG9uJ3QgaGF2ZSB0aGF0IGhhcmR3YXJlIGluIFFFTVUvR0NFLCBpdCdzIHZpcnR1YWxseSB1bnJlYWNoYWJsZS5cblxuSXMgdGhlcmUgc29tZSBkdW1teSBkcml2ZXIgb3IgYSBtb2NrIHRoYXQgdXNlcyBgYjUzYD8gTm8sIGl0J3MgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBoYXJkd2FyZS4gSXMgdGhlIGBiNTNgIGRyaXZlciBldmVuIGNvbXBpbGVkIGludG8gdGhlIFN5emthbGxlciBrZXJuZWxzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZywgYnV0IGV2ZW4gaWYgaXQncyB0aGVyZSwgaXQgd29uJ3QgcHJvYmUgd2l0aG91dCB0aGUgaGFyZHdhcmUuXG5cbk5vdywgYGI1M19tbWFwYCB1c2VzIHBsYXRmb3JtIGRhdGEgb3IgZGV2aWNlIHRyZWUuIENhbiB3ZSByZWdpc3RlciBhIHBsYXRmb3JtIGRldmljZSBmcm9tIHVzZXJzcGFjZSBmb3IgdGhpcz8gV2UgY2FuJ3QgdXNlIGAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL2I1My1tbWFwL2JpbmRgIGJlY2F1c2UgdGhlcmUgbmVlZHMgdG8gYmUgYSBkZXZpY2UgYWxyZWFkeS4gV2UgY2FuJ3QgY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlIGRpcmVjdGx5IGZyb20gdXNlciBzcGFjZTsgdGhlcmUgaXNuJ3QgYSBkcml2ZXIgbGlrZSBhICdwbGF0Zm9ybS1kZXZpY2UtY3JlYXRvcicuIFN5emthbGxlciBoYXMgdXRpbGl0aWVzIGZvciBnZW5ldGxpbmsgYW5kIG90aGVyIHRoaW5ncywgYnV0IG5vdCBmb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLlxuXG5XYWl0LCB3aGF0IGFib3V0IGBiY21fc2YyYD8gVGhhdCdzIGFsc28gYSBwbGF0Zm9ybSBkcml2ZXIuIEFuZCBgYjUzX21kaW9gPyBJdCdzIGFuIE1ESU8gZHJpdmVyLiBTeXprYWxsZXIgc29tZXRpbWVzIGhhbmRsZXMgTURJTyBkZXZpY2VzIGlmIHRoZXJlJ3MgYSB2aXJ0dWFsIE1ESU8gYnVzIChgZHNhX2xvb3BgLCBgbWFjYmAsIGV0Yy4pLiBIb3dldmVyLCBgYjUzX21kaW9gIGRlbWFuZHMgc3BlY2lmaWMgUEhZIElEcywgb3IgZGV2aWNlIHRyZWUuIEkgbmVlZCB0byBleGFtaW5lIGBiNTNfbWRpb19kcml2ZXJgIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgbG9va2luZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMDo1OS44MDY1MDgyNzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTQwNDA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYjUzX21kaW9fZHJpdmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYz0zODk9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYjUzX29mX21hdGNoKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzkwLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozOTE6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBiNTNfbWRpb19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Mi1cXHQucHJvYmVcXHQ9IGI1M19tZGlvX3Byb2JlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5OS19O1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzo0MDA6bWRpb19tb2R1bGVfZHJpdmVyKGI1M19tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTQwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6MDMuMDAwNTU4NzU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjM0NjYzMDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBQcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBiNTNfbWRpb19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgcHVsbCB1cCB0aGUgY29kZSBhbmQgdGFrZSBhIGxvb2suIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgaXQgYW5kIHRoZSBhc3NvY2lhdGVkIG1hdGNoIHRhYmxlIHRvIGdldCBhIHNlbnNlIG9mIHRoZSBkcml2ZXIncyBpbnRlbnQgYW5kIGNhcGFiaWxpdGllcy4gSXQncyBsaWtlbHkgdGhlIG1hdGNoIHRhYmxlIHdpbGwgcmV2ZWFsIHdoaWNoIHNwZWNpZmljIGhhcmR3YXJlIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoLCB3aGljaCB3aWxsIGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXN0IG9mIHRoZSBwcm9iZSByb3V0aW5lLiBJJ20gZXhwZWN0aW5nIHRoaXMgcHJvYmUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcmVnaXN0ZXIgYWNjZXNzLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQgYW55IHBvdGVudGlhbCBoYXJkd2FyZS1zcGVjaWZpYyBxdWlyayBoYW5kbGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA0NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjMxLjIzNTIyNTA4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcxODQxOTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiNTNfb2ZfbWF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jPTM2Mz1zdGF0aWMgdm9pZCBiNTNfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzc0LVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYzozNzU6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYjUzX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM3Ni1cXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sYmNtNTMyNVxcXCIgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX21kaW8uYy0zODgtfTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzg5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGI1M19vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5MC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM9MzkxPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgYjUzX21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfbWRpby5jLTM5Ni1cXHRcXHQubmFtZSA9IFxcXCJiY201M3h4XFxcIixcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmM6Mzk3OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGI1M19vZl9tYXRjaCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19tZGlvLmMtMzk4LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjMzLjk1MzY0OTU5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQzNTMyNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgRGV2aWNlIFRyZWUgQ29tcGF0aWJpbGl0eSBhbmQgQ292ZXJhZ2UqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIHNpdHVhdGlvbiwgYW5kIHRoZSBjb3JlIGlzc3VlIGhlcmUgaXMgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZSB0cmVlLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIHNlZW1zIHRvIGJlIGtleWVkIHRvIG1hdGNoaW5nIG9uIGNvbXBhdGlibGUgc3RyaW5ncyB3aXRoaW4gdGhlIGRldmljZSB0cmVlIGl0c2VsZi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgcmVnYXJkaW5nIGZ1enppbmcuIFN5emthbGxlciwgaW4gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGRvZXNuJ3QgZ2VuZXJhdGUgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLCBkb2VzIGl0PyBUaGF0J3MgYSBodWdlIGZhY3RvciB0byBjb25zaWRlciBiZWNhdXNlIGl0IG1lYW5zIGlmIGl0J3MgZGVwZW5kZW50IG9uIHRoZSBEVCwgdGhlIGZ1enppbmcgY292ZXJhZ2UgaXMgbGltaXRlZC5cblxuSSBuZWVkIHRvIGV4cGxvcmUgc3BlY2lmaWMgZXhhbXBsZXMuIE5vdywgd2hhdCBhYm91dCB0aGUgYGI1M19zcGlgIGRyaXZlcj8gSG93IGRvZXMgKnRoYXQqIGRyaXZlciBoYW5kbGUgdGhpbmdzPyBUaGUgYGI1M19zcGlgIGlzIGEgY29tbW9ubHkgdXNlZCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBhdGliaWxpdHkgc3RyaW5ncyBpdCB1dGlsaXplcyBpcyBlc3NlbnRpYWwgZm9yIGNvdmVyYWdlLiBJIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhhdCBvbmUuIEkgd29uZGVyIGhvdyB0aGUgc2l0dWF0aW9uIHdpbGwgY2hhbmdlIGlmIG90aGVyIHBsYXRmb3JtcyB1dGlsaXplIGRldmljZSB0cmVlIGVudHJpZXM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6MzguNTk3MTg3MTczWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDY3NjIwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImI1M19zcGlfZHJpdmVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jPTM1OT1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgYjUzX3NwaV9pZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2MC1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19zcGkuYzozNjE6c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGI1M19zcGlfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jLTM2Mi1cXHQuZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzcxLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3NwaS5jOjM3Mjptb2R1bGVfc3BpX2RyaXZlcihiNTNfc3BpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfc3BpLmMtMzczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo0MC42NjQ4MTQzMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0ODI0NzI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBiNTMgYW5kIGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nIFJlbGF0aW9uc2hpcCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBTUEkgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIGl0J3MgY2xlYXIgdGhhdCBpdCBoaW5nZXMgb24gdGhlIGRldmljZSB0cmVlIG9yIHNvbWUgYm9hcmQgY29kZS4gVGhlIGltcGxpY2F0aW9uIGlzLCBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIHRoYXQgYGI1M2AgaXMgYSBjcml0aWNhbCBwaWVjZSwgYW5kIHRoYXQgcGF0aCBpcyB1bmF2YWlsYWJsZS4gQnV0IGhvbGQgb24sIGlzIHRoZXJlIGEgYmFja2Rvb3I/IENhbiBJIHNvbWVob3cgdHJpZ2dlciBgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmdgIHdpdGggdGhhdCBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcgYWN0aXZlIHdpdGhvdXQgbmVlZGluZyBgYjUzYD8gTm8sIHRoYXQncyBub3QgZ29pbmcgdG8gd29yay4gTXkgdW5kZXJzdGFuZGluZyBpcyBzb2xpZDogdGhhdCBmbGFnJ3Mgb25seSBzZXQgZHVyaW5nIGBiNTNfc3dpdGNoX2FsbG9jYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEknbGwgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBjb2RlIGFnYWluLiBMZXQncyBkbyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBvdGhlciBmaWxlcyB0byB2ZXJpZnkgdGhhdCBJJ20gbm90IG1pc3Npbmcgc29tZSBzZWNvbmRhcnkgbWVjaGFuaXNtIGZvciBzZXR0aW5nIGBuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTc2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE4OjIxOjQ1LjgxMzA2NDU4NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MDU1NjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZWVkc19zdGFuZGFsb25lX3ZsYW5fb2ZmbG9hZCA9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jPTMyNjQ9c3RydWN0IGI1M19kZXZpY2UgKmI1M19zd2l0Y2hfYWxsb2Moc3RydWN0IGRldmljZSAqYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTYtXFx0ZHMtXFx1MDAzZXZsYW5fZmlsdGVyaW5nX2lzX2dsb2JhbCA9IHRydWU7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MzI5NzpcXHRkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTMyOTgtXFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0xOTI5PXN0YXRpYyBpbnQgZHNhX3VzZXJfY2xlYXJfdmxhbihzdHJ1Y3QgbmV0X2RldmljZSAqdmRldiwgaW50IHZpZCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMTk0OC0gKiAgICAgLSBpZiBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX2ZpbHRlcmluZyA9IHRydWUsIE9SIGlmXFxubmV0L2RzYS91c2VyLmM6MTk0OTogKiAgICAgICBkcy1cXHUwMDNlbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWQgPSB0cnVlLCBPUiBpZlxcbm5ldC9kc2EvdXNlci5jLTE5NTAtICogICAgICAgKGRzLVxcdTAwM2V2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgPSB0cnVlIEFORCB0aGVyZSBhcmUgYnJpZGdlcyBzcGFubmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo0Ny45NTM2MjQ3MzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA3NTE0MjU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqXG5cbk9rYXksIHNvIHRoZSBgYjUzX2NvbW1vbi5jYCBmaWxlIGlzIHRoZSBrZXkgaGVyZS4gSSBrbm93IHRoYXQncyB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGUgY3J1Y2lhbCBmbGFnIGlzIHNldC4gVGhpbmtpbmcgYWJvdXQgaXQsIGBiNTNgIGlzIGRlZmluaXRlbHkgYSBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgZHJpdmVyLiBJdCB3b3VsZG4ndCBpbnN0YW50aWF0ZSBvciBmdW5jdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBubyBjaGFuY2UsIG5vdCB3aXRob3V0IHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBjYXJlZnVsbHkgY3JhZnRlZCBkZXZpY2UgdHJlZSBpbmplY3Rpb24sIHdoaWNoIHN5emthbGxlciB3b3VsZG4ndCBiZSBkb2luZy4gU28sIGFueSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUgY29tcGxldGVseSBpbmFjY2Vzc2libGUgaW4gcGxhY2VzIGxpa2UgR0NFIG9yIFFFTVUuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmUtcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIFJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGludm9sdmU6XG5cbiogICBQYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiogICBDb2RlIHdpdGhpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2ggZHJpdmVycy5cblxuQW5kIHRoaXMgKmlzKiBhIHZlbmRvci1zcGVjaWZpYyBzd2l0Y2ggZHJpdmVyIChCcm9hZGNvbSBCQ001M3h4KS4gSXQgZXhwbGljaXRseSBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZSBvciBkZXZpY2UgdHJlZSBiaW5kaW5nIGZvciBwaHlzaWNhbCBoYXJkd2FyZSwgd2hpY2ggaXNuJ3QgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBsb2NrZWQgYmVoaW5kIGEgZmxhZyB0aGF0IG9ubHkgdGhpcyBkcml2ZXIgY2FuIHNldC4gR2l2ZW4gYWxsIHRoYXQsIGl0J3MgY2xlYXI6IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgzNywiT3V0cHV0VG9rZW5zIjoxMzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTg6MjE6NTYuMDI4NzcwNzE5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzMzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJyb2FkY29tIEJDTTUzeHggc3dpdGNoIGRyaXZlciAoYjUzKSBhbmQgY29yZSBEU0EgY29kZS4gVGhlIGNvcmUgRFNBIGNoYW5nZXMgYXJlIHN0cmljdGx5IGdhdGVkIGJ5IHRoZSBgbmVlZHNfc3RhbmRhbG9uZV92bGFuX29mZmxvYWRgIGZsYWcsIHdoaWNoIGlzIG9ubHkgc2V0IGJ5IHRoZSBiNTMgZHJpdmVyLiBTaW5jZSBiNTMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBCcm9hZGNvbSBzd2l0Y2ggaGFyZHdhcmUgb3Igc3BlY2lmaWMgZGV2aWNlIHRyZWUgYmluZGluZ3Mgbm90IHByZXNlbnQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aGVzZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCcm9hZGNvbSBCQ001M3h4IHN3aXRjaCBkcml2ZXIgKGI1MykgYW5kIGNvcmUgRFNBIGNvZGUuIFRoZSBjb3JlIERTQSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBnYXRlZCBieSB0aGUgYG5lZWRzX3N0YW5kYWxvbmVfdmxhbl9vZmZsb2FkYCBmbGFnLCB3aGljaCBpcyBvbmx5IHNldCBieSB0aGUgYjUzIGRyaXZlci4gU2luY2UgYjUzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQnJvYWRjb20gc3dpdGNoIGhhcmR3YXJlIG9yIHNwZWNpZmljIGRldmljZSB0cmVlIGJpbmRpbmdzIG5vdCBwcmVzZW50IGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGhlc2UgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxODoyMTo1Ni4wMjg4MDgxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkqjx5[1] Phase: Running StartedAt: 2026-08-26 18:22:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqjx5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-26 18:22:07 +0000 UTC FinishedAt: 2026-08-26 18:22:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}