Name: series-workflowjw7c7 Phase: Succeeded StartedAt: 2026-08-12 18:02:42 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[0] Phase: Succeeded StartedAt: 2026-08-12 18:02:42 +0000 UTC FinishedAt: 2026-08-12 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 18:02:42 +0000 UTC FinishedAt: 2026-08-12 18:21:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS" ], "series_id": "943750aa-058d-4d57-b090-ef4ba4d15dcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "save_netdev_trace_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYXZlX25ldGRldl90cmFjZV9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggODg0MGIxMjY5NzlmZi4uMTJkYzJjMWRjMDMxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTQ0LDYgJiM0MzsyMTQ0LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbiYjNDM7ICpcbiYjNDM7ICpcdEBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q6IExpbmtlZCBsaXN0IGZvciBkZWJ1Z2dpbmcgcmVmY291bnQgbGVhay5cbiAgKi9cbiBcbiBzdHJ1Y3QgbmV0X2RldmljZSB7XG5AQCAtMjMwMCw2ICYjNDM7MjMwMiw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcbiYjNDM7I2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtMzI1MCw2ICYjNDM7MzI1NSw3IEBAIGVudW0gbmV0ZGV2X2NtZCB7XG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLFxuIFx0TkVUREVWX1hEUF9GRUFUX0NIQU5HRSxcbiYjNDM7XHRORVRERVZfREVCVUdfVU5SRUdJU1RFUixcbiB9O1xuIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTtcbiBcbkBAIC00NDY2LDkgJiM0Mzs0NDcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuJiM0MztcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ0ODAsNiAmIzQzOzQ0OTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X2hvbGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoZGV2KSB7XG4mIzQzO1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuY1xuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zb2Z0aXJxLmNcbkBAIC01NzYsNiAmIzQzOzU3NiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC93b3JrcXVldWUuY1xuQEAgLTMyMDMsNiAmIzQzOzMyMDMsMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBwcm9jZXNzX29uZV93b3JrKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXG4gICogQHdvcmtlcjogc2VsZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGFmMjYwZmY1NDYyYTYuLjg2ZmRhYTA5NmFlZGIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODc1LDYgJiM0MzsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXG4gXHROKFBSRV9DSEFOR0VBRERSKSBOKE9GRkxPQURfWFNUQVRTX0VOQUJMRSkgTihPRkZMT0FEX1hTVEFUU19ESVNBQkxFKVxuIFx0TihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpXG4gXHROKFhEUF9GRUFUX0NIQU5HRSlcbiYjNDM7XHROKERFQlVHX1VOUkVHSVNURVIpXG4gXHR9XG4gI3VuZGVmIE5cbiBcdHJldHVybiBcJiMzNDtVTktOT1dOX05FVERFVl9FVkVOVFwmIzM0OztcbkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGRldl9yZWZjbnRfcmVhZCk7XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNjU1LDExICYjNDM7MTE2NjQsMTYgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MztcbiBcdFx0XHQgICAgICAgUkVBRF9PTkNFKG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcykgKiBIWikpIHtcbiYjNDM7XHRcdFx0cnRubF9sb2NrKCk7XG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuIFx0XHRcdFx0cHJfZW1lcmcoXCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbiYjNDM7XHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XG4mIzQzO1x0XHRcdFx0ZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRfX3J0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdHJjdV9iYXJyaWVyKCk7XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbiBcdFx0fVxuQEAgLTEyMDU5LDYgJiM0MzsxMjA3Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRkZXZcJiMzNDspO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjE1OCw2ICYjNDM7MTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBmcmVlX2RldjpcbiAjZW5kaWZcbiBcdGt2ZnJlZShkZXYpO1xuQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiYjNDM7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4gXHRkZXYtXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNleGRwX2J1bGtxKTtcbkBAIC0xMzIyOSw2ICYjNDM7MTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzMjM3LDYgJiM0MzsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBpLCByYyA9IC1FTk9NRU07XG4gXG4mIzQzO1x0bmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KCk7XG4gXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcbiBcbiBcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XG5AQCAtMTMzNDAsMyAmIzQzOzEzMzY3LDI0MiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcbiYjNDM7I2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0YXRvbWljX3QgY291bnQ7XG4mIzQzO1x0aW50IG5yX2VudHJpZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbiYjNDM7c3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB0cmltX25ldGRldl90cmFjZSh1bnNpZ25lZCBsb25nICplbnRyaWVzLCBpbnQgbnJfZW50cmllcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmZmVyWzMyXSA9IHsgfTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBcJiMzNDslcHNcJiMzNDssICh2b2lkICopZW50cmllc1tpXSk7XG4mIzQzO1x0XHRjcCA9IHN0cmNocihidWZmZXIsICYjMzk7ICYjMzk7KTtcbiYjNDM7XHRcdGlmIChjcClcbiYjNDM7XHRcdFx0KmNwID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtwcm9jZXNzX29uZV93b3JrXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtrJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtrc3lzX3Vuc2hhcmVcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3MmIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O3NvY2tfc2VuZG1zZ19ub3NlY1wmIzM0OykgfHxcbiYjNDM7XHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWNcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc3lzX2JpbmRcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCYjMzQ7X19zb2NrX3JlbGVhc2VcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCYjMzQ7X19zeXNfYnBmXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtkb19zb2NrX3NldHNvY2tvcHRcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBucl9lbnRyaWVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4mIzQzO1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogVHJpbSBjb21tb24gdHJhY2VzLiAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHRwdHItXHUwMDNlbnJfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4mIzQzO1x0fVxuJiM0MztcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4mIzQzO1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwdHItXHUwMDNlbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cdTAwM2Vucl9lbnRyaWVzIHx8XG4mIzQzO1x0XHRcdCAgICBtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIHRtcC1cdTAwM2VlbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgIHB0ci1cdTAwM2Vucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4mIzQzO1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGF0b21pY19zdWIoY291bnQsIFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbiYjNDM7XHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4mIzQzO1x0XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBvcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRiYWxhbmNlICYjNDM7PSBjb3VudDtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcbiYjNDM7XHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcywgNCk7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7YmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbiYjNDM7XHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbiYjNDM7XHQgKiBUaGVyZWZvcmUsIG5vIG1vcmUgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgY2FsbCB3aWxsIGJlIG1hZGUsIGFuZCB3ZSBjYW5cbiYjNDM7XHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbiYjNDM7XHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKV07XG4mIzQzO1x0aW50IG5yX2VudHJpZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4mIzQzO1x0aWYgKGluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4mIzQzO1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuJiM0MztcdC8qIFRyaW0gdHJhY2VzIG9mIHByb2Nlc3MgY29udGV4dCBub3cgaWYgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBmb3JcbiYjNDM7XHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXNcbiYjNDM7XHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5fc29mdGlycSgpKSB7XG4mIzQzO1x0XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbiYjNDM7XHRcdFx0XHRucl9lbnRyaWVzID0gaSAmIzQzOyAxO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdC8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXNcbiYjNDM7XHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24mIzM5O3QgdXNlIGxvY2sgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4mIzQzO1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkge1xuJiM0MztcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbiYjNDM7XHRcdFx0YXRvbWljX2FkZChkZWx0YSwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbiYjMzk7dCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4mIzQzO1x0ICogZHVwbGljYXRlZCBlbnRyaWVzIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcuXG4mIzQzO1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuJiM0MztcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4mIzQzO1x0XHQvKiBSZW1vdmUgb25lIGVudHJ5IGZyb20gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0IGFuZCBpbml0aWFsaXplIGl0LiAqL1xuJiM0MztcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnB0ci1cdTAwM2Vjb3VudCwgZGVsdGEpO1xuJiM0MztcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbiYjNDM7XHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4mIzQzO1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCYjMzQ7aGFuZGxlX3NvZnRpcnFzXCYjMzQ7LCAxNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspO1xuJiM0MztcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwmIzM0OyYjNDM7JWx4LyVseFwmIzM0OywgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4mIzQzO1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICYjNDM7IHNpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuJiM0MztcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuJiM0MztcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sb2NrX2RlYnVnLmMgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuJiM0MztcdGNhc2UgTkVUREVWX0RFQlVHX1VOUkVHSVNURVI6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxuIFx0Y2FzZSBORVRERVZfUFJFX0NIQU5HRUFERFI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5hZjdlOTk2MzY0OTU2IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC02OTgsNyAmIzQzOzY5OCwxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXG4gfVxuIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7XG4gXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbmRpZlxuJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcbkBAIC03NzAsNyAmIzQzOzc3NCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LFxuIFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbHNlXG4mIzQzO2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExMjAsOCAmIzQzOzExMzAsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcbiBcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4mIzQzO3N0YXRpY1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mztub2lubGluZVxuJiM0MzsjZWxzZVxuJiM0MztpbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXJlY3Ztc2csXG4gXHRcdFx0XHQgICAgIGluZXQ2X3JlY3Ztc2csXG5AQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiM0MzsgMjBdXG4gXHRcdFx0XHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgICAmIzM0O0tBTExTWU1TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE0NCw2ICYjNDM7MjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMDAsNiAmIzQzOzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTMyNTAsNiAmIzQzOzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQgewogCU5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCwKIAlORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLAogCU5FVERFVl9YRFBfRkVBVF9DSEFOR0UsCiYjNDM7CU5FVERFVl9ERUJVR19VTlJFR0lTVEVSLAogfTsKIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTsKIApAQCAtNDQ2Niw5ICYjNDM7NDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDQ4MCw2ICYjNDM7NDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTc2LDYgJiM0Mzs1NzYsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjAzLDYgJiM0MzszMjAzLDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg3NSw2ICYjNDM7MTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKQogCU4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpCiAJTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpCiAJTihYRFBfRkVBVF9DSEFOR0UpCiYjNDM7CU4oREVCVUdfVU5SRUdJU1RFUikKIAl9CiAjdW5kZWYgTgogCXJldHVybiAmIzM0O1VOS05PV05fTkVUREVWX0VWRU5UJiMzNDs7CkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTY1NSwxMSAmIzQzOzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MzsKIAkJCSAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkgewomIzQzOwkJCXJ0bmxfbG9jaygpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KJiM0MzsJCQlfX3J0bmxfdW5sb2NrKCk7CiYjNDM7CQkJcmN1X2JhcnJpZXIoKTsKIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKIAkJfQpAQCAtMTIwNTksNiAmIzQzOzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCiAJZGV2LSZndDtwcml2X2xlbiA9IHNpemVvZl9wcml2OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOyNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldGRldiYjMzQ7KTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOwpAQCAtMTIxNTgsNiAmIzQzOzEyMTc1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogZnJlZV9wY3B1OgogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogZnJlZV9kZXY6CiAjZW5kaWYKIAlrdmZyZWUoZGV2KTsKQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiYjNDM7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzMjI5LDYgJiM0MzsxMzI0OSwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzIzNyw2ICYjNDM7MTMyNjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzMzQwLDMgJiM0MzsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlclszMl0gPSB7IH07CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJcHRyLSZndDtucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWlmICghYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgJmFtcDtwdHItJmd0O2xpc3QsIGxpc3QsCiYjNDM7CQkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyAhPSB0bXAtJmd0O25yX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O25yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJaWYgKCFjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCS8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZQomIzQzOwkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQlwb3MmIzQzOyYjNDM7OwomIzQzOwkJYmFsYW5jZSAmIzQzOz0gY291bnQ7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgY291bnQpOwomIzQzOwkJc3RhY2tfdHJhY2VfcHJpbnQocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jCmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmMKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1JFQk9PVDoKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9ERUJVR19VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCWNhc2UgTkVUREVWX1BSRV9DSEFOR0VBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTY5OCw3ICYjNDM7Njk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc3MCw3ICYjNDM7Nzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTEyMCw4ICYjNDM7MTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIE5ldCBEZXZpY2UgUmVmY291bnQgVHJhY2tlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgYG5ldF9kZXZpY2VgIHJlZmNvdW50IGxlYWtzLiBJdCBsb29rcyBsaWtlIGl0IHV0aWxpemVzIGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIHJlbGllcyBvbiBgQ09ORklHX0tBTExTWU1TYCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgdGhlc2UgdHJhY2luZyBtZWNoYW5pc21zLiAgVGhlIHBhdGNoIGFkZHMgYSBidW5jaCBvZiBzdHVmZjogYSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YCB0byB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCwgZnVuY3Rpb25zIGxpa2UgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgKGNhbGxlZCBmcm9tIGhvdCBwYXRocyBsaWtlIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGApLCBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgbGlrZSBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCBhbmQgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBuZXRkZXZfd2FpdF9hbGxyZWZzX2FueWAgYW5kIGFkZHMgYSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0YC4gSXQgYWxzbyBhZGRzIGBub2lubGluZWAgYXR0cmlidXRlcyB0byBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zICpwdXJlbHkqIGZvciBkZWJ1Z2dpbmcsIHJpZ2h0PyBMaWtlIGByZWZfdHJhY2tlcmAsIGBrbWVtbGVha2AsIG9yIGBsb2NrZGVwYC4gSXQgKnNlZW1zKiBsaWtlIGl0JiMzOTtzIG5vdCBnb2luZyB0byBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVlZCBmdXp6aW5nLiBIb3dldmVyLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMuIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgaW4gdGhlIGhvdCBwYXRocywgbm90YWJseSBhcm91bmQgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYC4KClRoZW4gSSByZW1lbWJlciB0aGF0IHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYnV0IGlzIHRoaXMgdHJ1bHkganVzdCAmIzM0O3B1cmVseSBkZWNvcmF0aXZlPyYjMzQ7CgpTbywgb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgdHJhY2Vwb2ludCBvciBhIGxvZy4gVGhpcyBhZGRzIGEgdGltZXIsIGEgbG9jaywgYW5kIG1hbmlwdWxhdGVzIGEgbGlua2VkIGxpc3QuIFRoaXMgYWRkcyBzdGF0ZSwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gIEV2ZW4gaWYgdGhlICppbnRlbnRpb24qIGlzIGRlYnVnZ2luZywgdGhlcmUgY291bGQgYmUgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIG9yIGRlYWRsb2Nrcy4gSXQgY2hhbmdlcyBleGVjdXRpb24gZmxvdyBpbiB0aGVzZSBwYXRocy4gVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIG5ldyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbiBmb3IgZnV6emluZyBhcmU6IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLCBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgLCBhbmQgYG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdGAuCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24gdXNpbmcgYGdyZXBwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTUxPXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMDQtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzMDU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNi1cdHN0cnVjdCBsaXN0X2hlYWRcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ0NzM9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ0NzQtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ0NzU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3Ni12b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwNT1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUwOC17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1MDk6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTAtXHRyZWZfdHJhY2tlcl9hbGxvYyhcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIsIGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUxOS17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1MjA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MjEtXHRyZWZjb3VudF9kZWMoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLm5vX3RyYWNrZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUyNj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3RyYWNrZXJfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUyOC17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1Mjk6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MzAtXHRyZWZfdHJhY2tlcl9mcmVlKFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlcik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNS1cbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oOjY6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC03LXR5cGVkZWYgc3RydWN0IHJlZl90cmFja2VyICpuZXRkZXZpY2VfdHJhY2tlcjtcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDA9Q09ORklHX1VCU0FOX1VOUkVBQ0hBQkxFPXlcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDMtI1xua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjQ0OkNPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSPXlcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00NS1DT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSPXlcbi0tXG5rZXJuZWwvc29mdGlycS5jPTU3Nj1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuLS1cbmtlcm5lbC9zb2Z0aXJxLmMtNTc4LVxua2VybmVsL3NvZnRpcnEuYzo1Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9zb2Z0aXJxLmMtNTgwLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTMxODg9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy0zMjA1LVxua2VybmVsL3dvcmtxdWV1ZS5jOjMyMDY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC93b3JrcXVldWUuYy0zMjA3LXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTItXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExNTg0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbm5ldC9jb3JlL2Rldi5jLTExNTg1LVxubmV0L2NvcmUvZGV2LmM6MTE1ODY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTExNTg3LXN0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIwNzUtXG5uZXQvY29yZS9kZXYuYzoxMjA3NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTIwNzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI0ND1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyNTEtXG5uZXQvY29yZS9kZXYuYzoxMzI1MjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTMyNTMtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzM2OT1zdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbm5ldC9jb3JlL2Rldi5jLTEzMzcwLVxubmV0L2NvcmUvZGV2LmM6MTMzNzE6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTEzMzcyLVxuLS1cbm5ldC9zb2NrZXQuYz03MDE9c3RhdGljXG5uZXQvc29ja2V0LmM6NzAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtNzAzLW5vaW5saW5lXG4tLVxubmV0L3NvY2tldC5jPTc3Nz1zdGF0aWNcbm5ldC9zb2NrZXQuYzo3Nzg6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy03Nzktbm9pbmxpbmVcbi0tXG5uZXQvc29ja2V0LmM9MTEzMz1zdGF0aWNcbm5ldC9zb2NrZXQuYzoxMTM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtMTEzNS1ub2lubGluZVxuLS1cbm5ldC9zb2NrZXQuYz0yNjQyPXN0YXRpY1xubmV0L3NvY2tldC5jOjI2NDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy0yNjQ0LW5vaW5saW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRGVidWcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJg4oCmIEkgdmFndWVseSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgZGVidWcgS2NvbmZpZyBvcHRpb25zLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGl0JiMzOTtzIG5lc3RsZWQgaW4gYG5ldC9LY29uZmlnLmRlYnVnYCwgeWVhaCwgdGhlcmUgaXQgaXMuIE5vdyB0aGUgaW50ZXJlc3RpbmcgYml0OiB3aGF0IGRvZXMgZW5hYmxpbmcgdGhpcyB0aGluZyAqYWN0dWFsbHkqIGRlcGVuZCBvbj8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgb3RoZXIgZGVidWcgb3B0aW9ucyBpdCBwaWdneWJhY2tzIG9uPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBmZWF0dXJlcyBvciByZXF1aXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzPyBBIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoZW4gaXQmIzM5O3MgYXBwcm9wcmlhdGUgdG8gZW5hYmxlIHRoaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gaXQgcHJvdmlkZXMuIE9rYXksIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIEtjb25maWcgdG8gc2VlIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldCBkZXZpY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAgNjpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gICA3Olx0XHRkZWZhdWx0IG5cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIGRldmljZSByZWZlcmVuY2VzLlxuICAxMDpcdFx0ICBUaGlzIGFkZHMgbWVtb3J5IGFuZCBjcHUgY29zdHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxuICAxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAxNTpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE2Olx0XHRkZWZhdWx0IG5cbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIG5ldG5zIHJlZmVyZW5jZXMuXG4gIDE5Olx0XHQgIFRoaXMgYWRkcyBtZW1vcnkgYW5kIGNwdSBjb3N0cy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NwoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiAyNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHRoZSBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgY29uZmlnIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBkZWJ1Z2dpbmcgZmVhdHVyZSByZWxhdGVkIHRvIHJlZmNvdW50IHRyYWNraW5nIGZvciBuZXR3b3JrIGRldmljZXMuIFRoZSBtYWluIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFyZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBXaGlsZSB0aGUgZGVzY3JpcHRpb25zIGNhbGwgaXQgJiMzNDtkZWNvcmF0aXZlJiMzNDsgaW5pdGlhbGx5LCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEkmIzM5O20gbm90IHNvIHN1cmUuIEl0IHNlZW1zIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3Qgc29tZSBwcmludCBzdGF0ZW1lbnRzLCBpdCYjMzk7cyBhY3R1YWxseSBzYXZpbmcgc3RhY2sgdHJhY2VzIGludG8gYSBjdXN0b20gdHJhY2UgYnVmZmVyLCB0aGUgYG5ldGRldl90cmFjZV9idWZmZXJgIGFycmF5LgoKTm93LCBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBjYWxsZWQgd2l0aGluIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIHdoaWNoIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzLiBUaGUgcHJvbXB0IHdhcm5lZCBhZ2FpbnN0IGZvY3VzaW5nIG9uIGhvdCBwYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEhvd2V2ZXIsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGFuZCBpdCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIEl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGl0LgoKU28sIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbG9naWMgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZG9lcyBzdGFjayB0cmFjZSBzYXZlcywgdXNlcyBSQ1UsIHNwaW5sb2NrcyBhbmQgbGlua2VkIGxpc3RzLiBJdCBjb21wYXJlcyBleGlzdGluZyBlbnRyaWVzLCBhZGRpbmcgbmV3IGVudHJpZXMgYW5kIHRoZSBzdGFjayB0cmFjZSBzYXZlIGl0c2VsZi4gSXQgbWF5IGhhdmUgYnVncyAocmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGRlYWRsb2NrcyksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKVGhlcmVmb3JlLCBteSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZnVuY3Rpb24uIFRoaXMgaXMgYmVjYXVzZSBpdCBpcyB0aGUgbWFpbiBmdW5jdGlvbiBhZGRlZCBieSB0aGUgcGF0Y2ggYW5kIGl0JiMzOTtzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZXhwb3J0ZWQgc3ltYm9sLCBldmVuIGlmIGl0IGlzIGEgaG90IHBhdGguCgpOb3csIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBnb2luZyB0byBzZXQgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGFuZCBgS0FMTFNZTVNgLiBgS0FMTFNZTVNgIHVzdWFsbHkgaXMgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBpbmNsdWRlIGl0LgoKV29ydGhGdXp6aW5nPXRydWUKRm9jdXNTeW1ib2xzID0gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAKRW5hYmxlQ29uZmlncyA9IGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgICAmIzM0O0tBTExTWU1TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7LAogICAgJiMzNDtLQUxMU1lNUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE0NCw2ICYjNDM7MjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMDAsNiAmIzQzOzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTMyNTAsNiAmIzQzOzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQgewogCU5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCwKIAlORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLAogCU5FVERFVl9YRFBfRkVBVF9DSEFOR0UsCiYjNDM7CU5FVERFVl9ERUJVR19VTlJFR0lTVEVSLAogfTsKIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTsKIApAQCAtNDQ2Niw5ICYjNDM7NDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDQ4MCw2ICYjNDM7NDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTc2LDYgJiM0Mzs1NzYsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjAzLDYgJiM0MzszMjAzLDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg3NSw2ICYjNDM7MTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKQogCU4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpCiAJTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpCiAJTihYRFBfRkVBVF9DSEFOR0UpCiYjNDM7CU4oREVCVUdfVU5SRUdJU1RFUikKIAl9CiAjdW5kZWYgTgogCXJldHVybiAmIzM0O1VOS05PV05fTkVUREVWX0VWRU5UJiMzNDs7CkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTY1NSwxMSAmIzQzOzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MzsKIAkJCSAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkgewomIzQzOwkJCXJ0bmxfbG9jaygpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KJiM0MzsJCQlfX3J0bmxfdW5sb2NrKCk7CiYjNDM7CQkJcmN1X2JhcnJpZXIoKTsKIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKIAkJfQpAQCAtMTIwNTksNiAmIzQzOzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCiAJZGV2LSZndDtwcml2X2xlbiA9IHNpemVvZl9wcml2OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOyNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldGRldiYjMzQ7KTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOwpAQCAtMTIxNTgsNiAmIzQzOzEyMTc1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogZnJlZV9wY3B1OgogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogZnJlZV9kZXY6CiAjZW5kaWYKIAlrdmZyZWUoZGV2KTsKQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiYjNDM7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzMjI5LDYgJiM0MzsxMzI0OSwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzIzNyw2ICYjNDM7MTMyNjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzMzQwLDMgJiM0MzsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlclszMl0gPSB7IH07CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJcHRyLSZndDtucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWlmICghYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgJmFtcDtwdHItJmd0O2xpc3QsIGxpc3QsCiYjNDM7CQkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyAhPSB0bXAtJmd0O25yX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O25yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJaWYgKCFjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCS8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZQomIzQzOwkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQlwb3MmIzQzOyYjNDM7OwomIzQzOwkJYmFsYW5jZSAmIzQzOz0gY291bnQ7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgY291bnQpOwomIzQzOwkJc3RhY2tfdHJhY2VfcHJpbnQocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jCmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmMKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1JFQk9PVDoKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9ERUJVR19VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCWNhc2UgTkVUREVWX1BSRV9DSEFOR0VBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTY5OCw3ICYjNDM7Njk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc3MCw3ICYjNDM7Nzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTEyMCw4ICYjNDM7MTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAxMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRfRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIGRlc2lnbmVkIHRvIGRlYnVnIGBuZXRfZGV2aWNlYCByZWZjb3VudCBsZWFrcy4gSXQgdXNlcyBgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGFuZCBlc3NlbnRpYWxseSB0cmFja3MgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCBjYWxscyBieSBzYXZpbmcgc3RhY2sgdHJhY2VzIGludG8gYSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIFRoaXMgYnVmZmVyIGdldHMgZHVtcGVkIGlmIHRoZSBuZXRfZGV2aWNlIGhhbmdzIHdoaWxlIHVucmVnaXN0ZXJlZCwgYW5kIGEgbmV3IGBORVRERVZfREVCVUdfVU5SRUdJU1RFUmAgY29tbWFuZCBpcyBhZGRlZC4gU29tZSBmdW5jdGlvbnMgaGF2ZSBhbHNvIGJlZW4gbWFya2VkIGBub2lubGluZWAgZm9yIGJldHRlciBzdGFjayB0cmFjZSByZWFkYWJpbGl0eS4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgY3JpdGljYWwgc2VjdGlvbnMuCgpGaXJzdCwgdGhlIHRyYWNlIGJ1ZmZlcjogaXQmIzM5O3MgYSBzdGF0aWMgYnVmZmVyLCBkZWNsYXJlZCBhczoKCmBgYGMKI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjgKc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKCWF0b21pY190IGNvdW50OwoJaW50IG5yX2VudHJpZXM7Cgl1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdOwp9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTsKYGBgCgpCZWluZyBzdGF0aWMsIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnQuCgpUaGUgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZnVuY3Rpb24gc2F2ZXMgdGhlIHN0YWNrIHRyYWNlcy4gSW5zaWRlLCB3ZSBzZWU6CgpgYGBjCgl1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpXTsKCWludCBucl9lbnRyaWVzOwouLi4KCW5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLSZndDtlbnRyaWVzKSwgMSk7CmBgYAoKVGhlIGNydWNpYWwgcGFydCBpcyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBgZW50cmllc2AgYXJyYXkuICBgc3RhY2tfdHJhY2Vfc2F2ZWAgcmV0dXJucyBgbnJfZW50cmllc2AsIHdoaWNoIGlzIGhvdyBtYW55IGVudHJpZXMgd2VyZSBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBgZW50cmllc2AgYXJyYXkuICBUaGVuLCB0aGVyZSYjMzk7cyBhIGNvbXBhcmlzb246CgpgYGBjCgkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyA9PSBucl9lbnRyaWVzICZhbXA7JmFtcDsKCQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CmBgYAoKVGhpcyBpcyAqc2FmZSouIGBtZW1jbXBgIG9ubHkgY29tcGFyZXMgdXAgdG8gdGhlIGluaXRpYWxpemVkIGBucl9lbnRyaWVzYC4gVGhlIGNvZGUgaXMgY2FyZWZ1bC4gIFNpbWlsYXJseSwgd2hlbiBjb3B5aW5nOgoKYGBgYwoJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CgkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwpgYGAKClRoZSBgbWVtbW92ZWAgYWxzbyBvbmx5IGNvcGllcyB0aGUgaW5pdGlhbGl6ZWQgcGFydC4gIFRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBzdGF0ZTsgbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgc3RhY2tfdHJhY2Vfc2F2ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgYGVudHJpZXNgIGFycmF5IHVwIHRvIGBucl9lbnRyaWVzYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIFRoZSBjb2RlIGFsc28gdXNlcyBgc25wcmludGZgIGluIHRoZSBgdHJpbV9uZXRkZXZfdHJhY2VgIGZ1bmN0aW9uOgoKYGBgYwoJY2hhciBidWZmZXJbMzJdID0geyB9OwouLi4KCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKYGBgCgpUaGlzIGlzIGFsc28gc2FmZS4gYHNucHJpbnRmYCB3b3JrcyBqdXN0IGZpbmUgb24gaW5kaXZpZHVhbCBlbnRyaWVzLgoKU28sIGluIHN1bW1hcnk6IHRoaXMgcGF0Y2ggaXMgKnB1cmVseSogZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTm8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgKmZhbHNlKi4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZW50cmllc2AgYXJyYXkgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcG9wdWxhdGVkIGJ5IGBzdGFja190cmFjZV9zYXZlYCwgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd3JpdHRlbiwgYG5yX2VudHJpZXNgLiBUaGUgcmVzdCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZCwgYnV0IHRoZSBjb2RlIG9ubHkgdXNlcyBgbnJfZW50cmllc2AgdG8gaW5kZXggYW5kIHJlYWQ6CgpgYGBjCgkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyA9PSBucl9lbnRyaWVzICZhbXA7JmFtcDsKCQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CmBgYAoKYW5kCgpgYGBjCgkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwpgYGAKClNvLCBpdCAqb25seSogcmVhZHMgdGhlIGluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSBhcnJheXMuCgpGaW5hbGx5LCB0aGUgYG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuY2A6CgpgYGBjCgl1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdOwoJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwoJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKLi4uCglmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKCQlzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7CmBgYAoKQWdhaW4sIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYG5yCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS4xMDQ0NTA3OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3NjU2MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTk6NTkuMTA0NDU4NTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk3NTMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NWI3ZDEwZTZhMjk5MjI5YTI3ZmNiM2E4ODhhY2FmNDdjODdhMDkwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjE5OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggODg0MGIxMjY5NzlmZi4uMTJkYzJjMWRjMDMxNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTQ0LDYgKzIxNDQsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcbiAgKlxcdEZJWE1FOiBjbGVhbnVwIHN0cnVjdCBuZXRfZGV2aWNlIHN1Y2ggdGhhdCBuZXR3b3JrIHByb3RvY29sIGluZm9cXG4gICpcXHRtb3ZlcyBvdXQuXFxuKyAqXFxuKyAqXFx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxcbiAgKi9cXG4gXFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcXG5AQCAtMjMwMCw2ICsyMzAyLDkgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG4gXFx0Y29uc3Qgc3RydWN0IHRsc2Rldl9vcHMgKnRsc2Rldl9vcHM7XFxuICNlbmRpZlxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XFxuKyNlbmRpZlxcbiBcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0b3BlcnN0YXRlO1xcbiBcXHR1bnNpZ25lZCBjaGFyXFx0XFx0bGlua19tb2RlO1xcbkBAIC0zMjUwLDYgKzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQge1xcbiBcXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXFxuIFxcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEsXFxuIFxcdE5FVERFVl9YRFBfRkVBVF9DSEFOR0UsXFxuK1xcdE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLFxcbiB9O1xcbiBjb25zdCBjaGFyICpuZXRkZXZfY21kX3RvX25hbWUoZW51bSBuZXRkZXZfY21kIGNtZCk7XFxuIFxcbkBAIC00NDY2LDkgKzQ0NzIsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0XFx0dGhpc19jcHVfZGVjKCpkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4gI2Vsc2VcXG5AQCAtNDQ4MCw2ICs0NDkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGlmIChkZXYpIHtcXG4rXFx0XFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XFxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXFxuIFxcdFxcdHRoaXNfY3B1X2luYygqZGV2LVxcdTAwM2VwY3B1X3JlZmNudCk7XFxuICNlbHNlXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXFxuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXFxuKysrIGIva2VybmVsL3NvZnRpcnEuY1xcbkBAIC01NzYsNiArNTc2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cXG4gI2VuZGlmXFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXFxuKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jXFxuQEAgLTMyMDMsNiArMzIwMywxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbisjZW5kaWZcXG4rXFxuIC8qKlxcbiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29ya1xcbiAgKiBAd29ya2VyOiBzZWxmXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg3NSw2ICsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXFxuIFxcdE4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpXFxuIFxcdE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQpIE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBKVxcbiBcXHROKFhEUF9GRUFUX0NIQU5HRSlcXG4rXFx0TihERUJVR19VTlJFR0lTVEVSKVxcbiBcXHR9XFxuICN1bmRlZiBOXFxuIFxcdHJldHVybiBcXFwiVU5LTk9XTl9ORVRERVZfRVZFTlRcXFwiO1xcbkBAIC0xMTU4Miw2ICsxMTU4MywxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxcbisjZW5kaWZcXG4rXFxuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xcbiBcXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcXG5AQCAtMTE2NTUsMTEgKzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gXFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHdhcm5pbmdfdGltZSArXFxuIFxcdFxcdFxcdCAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkge1xcbitcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xcbiBcXHRcXHRcXHRcXHRwcl9lbWVyZyhcXFwidW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgZGV2LVxcdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XFxuIFxcdFxcdFxcdFxcdHJlZl90cmFja2VyX2Rpcl9wcmludChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgMTApO1xcbitcXHRcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XFxuK1xcdFxcdFxcdFxcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdF9fcnRubF91bmxvY2soKTtcXG4rXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG4gXFxuIFxcdFxcdFxcdHdhcm5pbmdfdGltZSA9IGppZmZpZXM7XFxuIFxcdFxcdH1cXG5AQCAtMTIwNTksNiArMTIwNzMsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcbiBcXHRkZXYtXFx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuKyNlbmRpZlxcbiBcXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcXFwibmV0ZGV2XFxcIik7XFxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXFxuIFxcdGRldi1cXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcXG5AQCAtMTIxNTgsNiArMTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIGZyZWVfcGNwdTpcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCk7XFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4gZnJlZV9kZXY6XFxuICNlbmRpZlxcbiBcXHRrdmZyZWUoZGV2KTtcXG5AQCAtMTIyMjYsNiArMTIyNDQsOCBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiBcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4gI2VuZGlmXFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4rXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlY29yZV9zdGF0cyk7XFxuIFxcdGRldi1cXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNleGRwX2J1bGtxKTtcXG5AQCAtMTMyMjksNiArMTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xcbiBcXHQuc2V0dXBcXHRcXHRcXHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcXG4gfTtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XFxuKyNlbmRpZlxcbitcXG4gLypcXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxcbkBAIC0xMzIzNyw2ICsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBpLCByYyA9IC1FTk9NRU07XFxuIFxcbitcXHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcXG4gXFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XFxuIFxcbiBcXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xcbkBAIC0xMzM0MCwzICsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuIH1cXG4gXFxuIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xcbitcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitcXG4rI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcXG4rc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRhdG9taWNfdCBjb3VudDtcXG4rXFx0aW50IG5yX2VudHJpZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XFxuK30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdO1xcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XFxuK3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcXG4rXFxuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXFxuK3tcXG4rXFx0Y2hhciBidWZmZXJbMzJdID0geyB9O1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBcXFwiJXBzXFxcIiwgKHZvaWQgKillbnRyaWVzW2ldKTtcXG4rXFx0XFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xcbitcXHRcXHRpZiAoY3ApXFxuK1xcdFxcdFxcdCpjcCA9ICdcXFxcMCc7XFxuK1xcdFxcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcInByb2Nlc3Nfb25lX3dvcmtcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcXFwia3N5c191bnNoYXJlXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ3MnKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcInNvY2tfc2VuZG1zZ19ub3NlY1xcXCIpIHx8XFxuK1xcdFxcdFxcdCAgICAhc3RyY21wKGJ1ZmZlciwgXFxcInNvY2tfcmVjdm1zZ19ub3NlY1xcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdfJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJfX3N5c19iaW5kXFxcIikgfHxcXG4rXFx0XFx0XFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcXFwiX19zb2NrX3JlbGVhc2VcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJfX3N5c19icGZcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJkb19zb2NrX3NldHNvY2tvcHRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG5yX2VudHJpZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XFxuK1xcdGludCBjb3VudCwgYmFsYW5jZSA9IDAsIHBvcyA9IDA7XFxuK1xcbitcXHQvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0cHRyLVxcdTAwM2Vucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVxcdTAwM2VlbnRyaWVzLCBwdHItXFx1MDAzZW5yX2VudHJpZXMpO1xcbitcXHR9XFxuK1xcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cXG4rXFx0XFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHRcXHRpZiAocHRyLVxcdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cXHUwMDNlbnJfZW50cmllcyB8fFxcbitcXHRcXHRcXHQgICAgbWVtY21wKHB0ci1cXHUwMDNlZW50cmllcywgdG1wLVxcdTAwM2VlbnRyaWVzLFxcbitcXHRcXHRcXHRcXHQgICBwdHItXFx1MDAzZW5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZ0bXAtXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXFxuK1xcdFxcdFxcdGF0b21pY19hZGQoY291bnQsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0YXRvbWljX3N1Yihjb3VudCwgXFx1MDAyNnRtcC1cXHUwMDNlY291bnQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXFxuK1xcdFxcdGNvdW50ID0gYXRvbWljX3JlYWQoXFx1MDAyNnB0ci1cXHUwMDNlY291bnQpO1xcbitcXHRcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXFxuK1xcdFxcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBvcysrO1xcbitcXHRcXHRiYWxhbmNlICs9IGNvdW50O1xcbitcXHRcXHRwcl9pbmZvKFxcXCJDYWxsIHRyYWNlIGZvciAlc1slZF0gJStkIGF0XFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xcbitcXHRcXHRzdGFja190cmFjZV9wcmludChwdHItXFx1MDAzZWVudHJpZXMsIHB0ci1cXHUwMDNlbnJfZW50cmllcywgNCk7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXFxuK1xcdFxcdHByX2luZm8oXFxcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcXG4rXFx0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXFxuK1xcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxcbitcXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxcbitcXHQgKi9cXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cXHUwMDNlZW50cmllcyldO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xcbitcXHRpZiAoaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogR2V0IHN0YWNrIHRyYWNlcy4gKi9cXG4rXFx0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXFx1MDAzZWVudHJpZXMpLCAxKTtcXG4rXFx0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxcbitcXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xcbitcXHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxcbitcXHQgKi9cXG4rXFx0aWYgKGluX3NvZnRpcnEoKSkge1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGVudHJpZXNbaV0gXFx1MDAzZT0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlbnRyaWVzW2ldIFxcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xcbitcXHRcXHRcXHRcXHRucl9lbnRyaWVzID0gaSArIDE7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXFxuK1xcdCAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbid0IHVzZSBsb2NrIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdGlmIChwdHItXFx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQoZGVsdGEsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXFxuK1xcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxcbitcXHQgKiBCdXQgd2UgdXNlIHJhdyBzcGlubG9jayBoZXJlIGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzb21lIG90aGVyXFxuK1xcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRyLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCwgZGVsdGEpO1xcbitcXHRcXHRwdHItXFx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xcbitcXHRcXHRtZW1tb3ZlKHB0ci1cXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XFxuK1xcdFxcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChzYXZlX25ldGRldl90cmFjZV9idWZmZXIpO1xcbitcXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcXG4rXFx0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XFxuK1xcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247XFxuK307XFxuK1xcbisvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwXFxuKyAqIGthbGxzeW1zIGV2ZXJ5IHRpbWUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xcbitcXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XFxuK1xcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplO1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcXG4rXFx0XFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcXFwiaGFuZGxlX3NvZnRpcnFzXFxcIiwgMTUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnKycpO1xcbitcXHRcXHRpZiAoIWNwIHx8IHNzY2FuZihjcCwgXFxcIislbHgvJWx4XFxcIiwgXFx1MDAyNm9mZnNldCwgXFx1MDAyNnNpemUpICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xcbitcXHRcXHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y29tcGxldGUoXFx1MDAyNmNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0LCB0aW1lciktXFx1MDAzZWNvbXBsZXRpb24pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xcbitcXG4rXFx0dGltZXJfc2V0dXBfb25fc3RhY2soXFx1MDAyNnRjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnRjLmNvbXBsZXRpb24pO1xcbitcXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXFxuK1xcdG1vZF90aW1lcihcXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xcbitcXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovXFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnRjLmNvbXBsZXRpb24pO1xcbitcXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi9cXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRjLnRpbWVyKTtcXG4rXFx0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcXHUwMDI2dGMudGltZXIpO1xcbit9XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXFxuaW5kZXggOGE4MWM1NDMwNzA1My4uYzFhNDQ1OTRjNDkyNSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9sb2NrX2RlYnVnLmNcXG4rKysgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcXG5AQCAtMjksNiArMjksNyBAQCBpbnQgbmV0ZGV2X2RlYnVnX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuIFxcdGNhc2UgTkVUREVWX0RPV046XFxuIFxcdGNhc2UgTkVUREVWX1JFQk9PVDpcXG4gXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4rXFx0Y2FzZSBORVRERVZfREVCVUdfVU5SRUdJU1RFUjpcXG4gXFx0Y2FzZSBORVRERVZfQ0hBTkdFTVRVOlxcbiBcXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxcbiBcXHRjYXNlIE5FVERFVl9QUkVfQ0hBTkdFQUREUjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXFxuaW5kZXggNjNjNjlhMGZhNzRlMS4uYWY3ZTk5NjM2NDk1NiAxMDA2NDRcXG4tLS0gYS9uZXQvc29ja2V0LmNcXG4rKysgYi9uZXQvc29ja2V0LmNcXG5AQCAtNjk4LDcgKzY5OCwxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcXG4gXFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3N0YXRpY1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK25vaW5saW5lXFxuKyNlbmRpZlxcbit2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyk7XFxuIFxcbkBAIC03NzAsNyArNzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXFxuIFxcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuK3N0YXRpY1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK25vaW5saW5lXFxuKyNlbHNlXFxuK2lubGluZVxcbisjZW5kaWZcXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIHtcXG4gXFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZyxcXG5AQCAtMTEyMCw4ICsxMTMwLDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19yZWN2X2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsIGludCBmXFxuIFxcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICAgIGludCBmbGFncylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2Vsc2VcXG4raW5saW5lXFxuKyNlbmRpZlxcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxcbiB7XFxuIFxcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZXJlY3Ztc2csXFxuIFxcdFxcdFxcdFxcdCAgICAgaW5ldDZfcmVjdm1zZyxcXG5AQCAtMjYyNCw5ICsyNjM5LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXFxuIFxcdHJldHVybiBlcnIgXFx1MDAzYyAwID8gZXJyIDogMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2VuZGlmXFxuK2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXVxcbiBcXHRcXHRcXHRcXHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS43NzUxOTY2ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTI0MTYzMjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjViN2QxMGU2YTI5OTIyOWEyN2ZjYjNhODg4YWNhZjQ3Yzg3YTA5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjE5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE0NCw2ICsyMTQ0LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbisgKlxuKyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMDAsNiArMjMwMiw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4rI2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtMzI1MCw2ICszMjU1LDcgQEAgZW51bSBuZXRkZXZfY21kIHtcbiBcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCxcbiBcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEsXG4gXHRORVRERVZfWERQX0ZFQVRfQ0hBTkdFLFxuK1x0TkVUREVWX0RFQlVHX1VOUkVHSVNURVIsXG4gfTtcbiBjb25zdCBjaGFyICpuZXRkZXZfY21kX3RvX25hbWUoZW51bSBuZXRkZXZfY21kIGNtZCk7XG4gXG5AQCAtNDQ2Niw5ICs0NDcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDQ4MCw2ICs0NDkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuY1xuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcbisrKyBiL2tlcm5lbC9zb2Z0aXJxLmNcbkBAIC01NzYsNiArNTc2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuICNlbmRpZlxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcbisjZW5kaWZcbitcbiBzdGF0aWMgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgTUFYX1NPRlRJUlFfVElNRTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcbisrKyBiL2tlcm5lbC93b3JrcXVldWUuY1xuQEAgLTMyMDMsNiArMzIwMywxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBwcm9jZXNzX29uZV93b3JrKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29ya1xuICAqIEB3b3JrZXI6IHNlbGZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg3NSw2ICsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXG4gXHROKFBSRV9DSEFOR0VBRERSKSBOKE9GRkxPQURfWFNUQVRTX0VOQUJMRSkgTihPRkZMT0FEX1hTVEFUU19ESVNBQkxFKVxuIFx0TihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpXG4gXHROKFhEUF9GRUFUX0NIQU5HRSlcbitcdE4oREVCVUdfVU5SRUdJU1RFUilcbiBcdH1cbiAjdW5kZWYgTlxuIFx0cmV0dXJuIFwiVU5LTk9XTl9ORVRERVZfRVZFTlRcIjtcbkBAIC0xMTU4Miw2ICsxMTU4MywxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbisjZW5kaWZcbitcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNjU1LDExICsxMTY2NCwxNiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHdhcm5pbmdfdGltZSArXG4gXHRcdFx0ICAgICAgIFJFQURfT05DRShuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MpICogSFopKSB7XG4rXHRcdFx0cnRubF9sb2NrKCk7XG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuIFx0XHRcdFx0cHJfZW1lcmcoXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXG5cIixcbiBcdFx0XHRcdFx0IGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XG4gXHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfcHJpbnQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XG4rXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XG4rXHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4rXHRcdFx0X19ydG5sX3VubG9jaygpO1xuK1x0XHRcdHJjdV9iYXJyaWVyKCk7XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbiBcdFx0fVxuQEAgLTEyMDU5LDYgKzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0ZGV2LVx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuKyNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0ZGV2XCIpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjE1OCw2ICsxMjE3NSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBmcmVlX3BjcHU6XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRrdmZyZWUoZGV2KTtcbkBAIC0xMjIyNiw2ICsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuK1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZWNvcmVfc3RhdHMpO1xuIFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXhkcF9idWxrcSk7XG5AQCAtMTMyMjksNiArMTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbisjZW5kaWZcbitcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzMjM3LDYgKzEzMjYzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbitcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xuIFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XG4gXG4gXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xuQEAgLTEzMzQwLDMgKzEzMzY3LDI0MiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4rXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRhdG9taWNfdCBjb3VudDtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbit9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTtcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbitzdGF0aWMgYm9vbCBuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4re1xuK1x0Y2hhciBidWZmZXJbMzJdID0geyB9O1xuK1x0Y2hhciAqY3A7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgXCIlcHNcIiwgKHZvaWQgKillbnRyaWVzW2ldKTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xuK1x0XHRpZiAoY3ApXG4rXHRcdFx0KmNwID0gJ1xcMCc7XG4rXHRcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInByb2Nlc3Nfb25lX3dvcmtcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdrJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJrc3lzX3Vuc2hhcmVcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJzb2NrX3NlbmRtc2dfbm9zZWNcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwic29ja19yZWN2bXNnX25vc2VjXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnXycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYmluZFwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3NvY2tfcmVsZWFzZVwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3N5c19icGZcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcImRvX3NvY2tfc2V0c29ja29wdFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIG5yX2VudHJpZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4rXHRpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwO1xuK1xuK1x0LyogVHJpbSBjb21tb24gdHJhY2VzLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzKTtcbitcdH1cbitcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBsaXN0LFxuK1x0XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0XHRpZiAocHRyLVx1MDAzZW5yX2VudHJpZXMgIT0gdG1wLVx1MDAzZW5yX2VudHJpZXMgfHxcbitcdFx0XHQgICAgbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCB0bXAtXHUwMDNlZW50cmllcyxcbitcdFx0XHRcdCAgIHB0ci1cdTAwM2Vucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0aWYgKCFjb3VudClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4rXHRcdFx0YXRvbWljX2FkZChjb3VudCwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0XHRhdG9taWNfc3ViKGNvdW50LCBcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBSZXBvcnQgYWxsIGVudHJpZXMgZm9yIHRoaXMgZGV2aWNlLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRpZiAoIWNvdW50KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2VcbitcdFx0ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LlxuK1x0XHQgKi9cbitcdFx0cG9zKys7XG4rXHRcdGJhbGFuY2UgKz0gY291bnQ7XG4rXHRcdHByX2luZm8oXCJDYWxsIHRyYWNlIGZvciAlc1slZF0gJStkIGF0XFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcbitcdFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzLCA0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4rXHRpZiAoIW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkKVxuK1x0XHRwcl9pbmZvKFwiYmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbitcdCAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLlxuK1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4rXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuK1x0ICovXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuK1x0aW50IG5yX2VudHJpZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4rXHRpZiAoaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4rXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG4rXHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4rXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xuK1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuK1x0ICpcbitcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxuK1x0ICovXG4rXHRpZiAoaW5fc29mdGlycSgpKSB7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZW50cmllc1tpXSBcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xuK1x0XHRcdFx0bnJfZW50cmllcyA9IGkgKyAxO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4rXHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24ndCB1c2UgbG9jayBoZXJlLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuK1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbid0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3JcbitcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuK1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuK1x0ICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbitcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuK1x0XHRtZW1tb3ZlKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbitcdFx0LyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi9cbitcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fSBlbHNlIHtcbitcdFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbitcbitzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3Qge1xuK1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xuK307XG4rXG4rLyogUmVzb2x2ZSBhZGRyZXNzIG9mIGhhbmRsZV9zb2Z0aXJxcygpIGFuZCBjYWNoZSBpdCwgaW4gb3JkZXIgdG8gYXZvaWQgbG9va2luZyB1cFxuKyAqIGthbGxzeW1zIGV2ZXJ5IHRpbWUuXG4rICovXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbitcdGludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTtcbitcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4rXHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xuK1x0XHRpZiAoc3RybmNtcChidWZmZXIsIFwiaGFuZGxlX3NvZnRpcnFzXCIsIDE1KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnKycpO1xuK1x0XHRpZiAoIWNwIHx8IHNzY2FuZihjcCwgXCIrJWx4LyVseFwiLCBcdTAwMjZvZmZzZXQsIFx1MDAyNnNpemUpICE9IDIpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4rXHRcdGVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgKyBzaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNvbXBsZXRlKFx1MDAyNmNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0LCB0aW1lciktXHUwMDNlY29tcGxldGlvbik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgdGM7XG4rXG4rXHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi9cbitcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4rXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovXG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNnRjLmNvbXBsZXRpb24pO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0Yy50aW1lcik7XG4rXHR0aW1lcl9kZXN0cm95X29uX3N0YWNrKFx1MDAyNnRjLnRpbWVyKTtcbit9XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG5pbmRleCA4YTgxYzU0MzA3MDUzLi5jMWE0NDU5NGM0OTI1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG4rKysgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbkBAIC0yOSw2ICsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuK1x0Y2FzZSBORVRERVZfREVCVUdfVU5SRUdJU1RFUjpcbiBcdGNhc2UgTkVUREVWX0NIQU5HRU1UVTpcbiBcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XG4gXHRjYXNlIE5FVERFVl9QUkVfQ0hBTkdFQUREUjpcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbisrKyBiL25ldC9zb2NrZXQuY1xuQEAgLTY5OCw3ICs2OTgsMTEgQEAgc3RydWN0IHNvY2tldCAqc29ja19hbGxvYyh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xuIFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc3MCw3ICs3NzQsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcbiBcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExMjAsOCArMTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VyZWN2bXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxuQEAgLTI2MjQsOSArMjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbitpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS43NzUxOTg5NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgzMzkxMjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBgbmV0X2RldmljZWAgcmVmY291bnQgbGVha3MuIEl0IGxvb2tzIGxpa2UgaXQgdXRpbGl6ZXMgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgcmVsaWVzIG9uIGBDT05GSUdfS0FMTFNZTVNgIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGVzZSB0cmFjaW5nIG1lY2hhbmlzbXMuICBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIHN0dWZmOiBhIGBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3RgIHRvIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LCBmdW5jdGlvbnMgbGlrZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCAoY2FsbGVkIGZyb20gaG90IHBhdGhzIGxpa2UgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCksIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyBsaWtlIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGFuZCBgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIEl0IGFsc28gbW9kaWZpZXMgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCBhbmQgYWRkcyBhIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBJdCBhbHNvIGFkZHMgYG5vaW5saW5lYCBhdHRyaWJ1dGVzIHRvIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBzZWVtcyAqcHVyZWx5KiBmb3IgZGVidWdnaW5nLCByaWdodD8gTGlrZSBgcmVmX3RyYWNrZXJgLCBga21lbWxlYWtgLCBvciBgbG9ja2RlcGAuIEl0ICpzZWVtcyogbGlrZSBpdCdzIG5vdCBnb2luZyB0byBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVlZCBmdXp6aW5nLiBIb3dldmVyLCBsZXQncyBjYXJlZnVsbHkgZXZhbHVhdGUgdGhpcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBpbiB0aGUgaG90IHBhdGhzLCBub3RhYmx5IGFyb3VuZCBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgLlxuXG5UaGVuIEkgcmVtZW1iZXIgdGhhdCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGJ1dCBpcyB0aGlzIHRydWx5IGp1c3QgXCJwdXJlbHkgZGVjb3JhdGl2ZT9cIlxuXG5Tbywgb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGlzIGlzbid0IGp1c3QgYSB0cmFjZXBvaW50IG9yIGEgbG9nLiBUaGlzIGFkZHMgYSB0aW1lciwgYSBsb2NrLCBhbmQgbWFuaXB1bGF0ZXMgYSBsaW5rZWQgbGlzdC4gVGhpcyBhZGRzIHN0YXRlLCB3aGljaCBpcyBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgZXJyb3JzLiAgRXZlbiBpZiB0aGUgKmludGVudGlvbiogaXMgZGVidWdnaW5nLCB0aGVyZSBjb3VsZCBiZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3Mgb3IgZGVhZGxvY2tzLiBJdCBjaGFuZ2VzIGV4ZWN1dGlvbiBmbG93IGluIHRoZXNlIHBhdGhzLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoICppcyogd29ydGggY29uc2lkZXJpbmcuXG5cblRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBleHRyYSBhdHRlbnRpb24gZm9yIGZ1enppbmcgYXJlOiBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLlxuTGV0J3MgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uIHVzaW5nIGBncmVwcGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjExLjYwOTExNDY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODExMzY5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTUxPXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzMDU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNi1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NDczPXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3NC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ0NzU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3Ni12b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTA1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDgte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUwOTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTAtXFx0cmVmX3RyYWNrZXJfYWxsb2MoXFx1MDAyNmRldi1cXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIsIGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ1MTc9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTkte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUyMDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MjEtXFx0cmVmY291bnRfZGVjKFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLm5vX3RyYWNrZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1Mjgte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUyOTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MzAtXFx0cmVmX3RyYWNrZXJfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlcik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC01LVxcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oOjY6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNy10eXBlZGVmIHN0cnVjdCByZWZfdHJhY2tlciAqbmV0ZGV2aWNlX3RyYWNrZXI7XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDA9Q09ORklHX1VCU0FOX1VOUkVBQ0hBQkxFPXlcXG4tLVxcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00My0jXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjQ0OkNPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDUtQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUj15XFxuLS1cXG5rZXJuZWwvc29mdGlycS5jPTU3Nj1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxcbi0tXFxua2VybmVsL3NvZnRpcnEuYy01NzgtXFxua2VybmVsL3NvZnRpcnEuYzo1Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmtlcm5lbC9zb2Z0aXJxLmMtNTgwLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9MzE4OD1zdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmMtMzIwNS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM6MzIwNjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTMyMDctc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zy0yLVxcbm5ldC9LY29uZmlnLmRlYnVnOjM6Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVxcdGJvb2wgXFxcIkVuYWJsZSBuZXQgZGV2aWNlIHJlZmNvdW50IHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTE1ODQ9RVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbm5ldC9jb3JlL2Rldi5jLTExNTg1LVxcbm5ldC9jb3JlL2Rldi5jOjExNTg2OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMTU4Ny1zdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjA0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjA3NS1cXG5uZXQvY29yZS9kZXYuYzoxMjA3NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTIwNzctXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMjQ0PXN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjUxLVxcbm5ldC9jb3JlL2Rldi5jOjEzMjUyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMzI1My1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMzNjk9c3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XFxubmV0L2NvcmUvZGV2LmMtMTMzNzAtXFxubmV0L2NvcmUvZGV2LmM6MTMzNzE6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9jb3JlL2Rldi5jLTEzMzcyLVxcbi0tXFxubmV0L3NvY2tldC5jPTcwMT1zdGF0aWNcXG5uZXQvc29ja2V0LmM6NzAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtNzAzLW5vaW5saW5lXFxuLS1cXG5uZXQvc29ja2V0LmM9Nzc3PXN0YXRpY1xcbm5ldC9zb2NrZXQuYzo3Nzg6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9zb2NrZXQuYy03Nzktbm9pbmxpbmVcXG4tLVxcbm5ldC9zb2NrZXQuYz0xMTMzPXN0YXRpY1xcbm5ldC9zb2NrZXQuYzoxMTM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtMTEzNS1ub2lubGluZVxcbi0tXFxubmV0L3NvY2tldC5jPTI2NDI9c3RhdGljXFxubmV0L3NvY2tldC5jOjI2NDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9zb2NrZXQuYy0yNjQ0LW5vaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE0LjQyMDQ4OTQxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzI3MzEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERlYnVnIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJg4oCmIEkgdmFndWVseSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgZGVidWcgS2NvbmZpZyBvcHRpb25zLiBMZXQncyBjb25maXJtIHRoYXQgaXQncyBuZXN0bGVkIGluIGBuZXQvS2NvbmZpZy5kZWJ1Z2AsIHllYWgsIHRoZXJlIGl0IGlzLiBOb3cgdGhlIGludGVyZXN0aW5nIGJpdDogd2hhdCBkb2VzIGVuYWJsaW5nIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBkZXBlbmQgb24/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcy4gQXJlIHRoZXJlIG90aGVyIGRlYnVnIG9wdGlvbnMgaXQgcGlnZ3liYWNrcyBvbj8gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZmVhdHVyZXMgb3IgcmVxdWlyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcz8gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGVuIGl0J3MgYXBwcm9wcmlhdGUgdG8gZW5hYmxlIHRoaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gaXQgcHJvdmlkZXMuIE9rYXksIGxldCdzIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyB0byBzZWUgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE3Ljg5MzIyMzcwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuICAgNDpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCBuXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEVuYWJsZSBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBkZXZpY2UgcmVmZXJlbmNlcy5cXG4gIDEwOlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuICAxMzpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxNTpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE2OlxcdFxcdGRlZmF1bHQgblxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgbmV0bnMgcmVmZXJlbmNlcy5cXG4gIDE5OlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE3Ljg5MzMxMjE3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTY0MDYwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyB0aGUgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGNvbmZpZyBvcHRpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYSBkZWJ1Z2dpbmcgZmVhdHVyZSByZWxhdGVkIHRvIHJlZmNvdW50IHRyYWNraW5nIGZvciBuZXR3b3JrIGRldmljZXMuIFRoZSBtYWluIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFyZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBXaGlsZSB0aGUgZGVzY3JpcHRpb25zIGNhbGwgaXQgXCJkZWNvcmF0aXZlXCIgaW5pdGlhbGx5LCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEknbSBub3Qgc28gc3VyZS4gSXQgc2VlbXMgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBzb21lIHByaW50IHN0YXRlbWVudHMsIGl0J3MgYWN0dWFsbHkgc2F2aW5nIHN0YWNrIHRyYWNlcyBpbnRvIGEgY3VzdG9tIHRyYWNlIGJ1ZmZlciwgdGhlIGBuZXRkZXZfdHJhY2VfYnVmZmVyYCBhcnJheS5cblxuTm93LCBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBjYWxsZWQgd2l0aGluIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIHdoaWNoIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzLiBUaGUgcHJvbXB0IHdhcm5lZCBhZ2FpbnN0IGZvY3VzaW5nIG9uIGhvdCBwYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEhvd2V2ZXIsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGFuZCBpdCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIEl0J3MgdGhlIGNvcmUgbG9naWMgYWRkZWQgYnkgdGhpcyBwYXRjaCwgc28gaXQncyBwcm9iYWJseSB3b3J0aCBpdC5cblxuU28sIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbG9naWMgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZG9lcyBzdGFjayB0cmFjZSBzYXZlcywgdXNlcyBSQ1UsIHNwaW5sb2NrcyBhbmQgbGlua2VkIGxpc3RzLiBJdCBjb21wYXJlcyBleGlzdGluZyBlbnRyaWVzLCBhZGRpbmcgbmV3IGVudHJpZXMgYW5kIHRoZSBzdGFjayB0cmFjZSBzYXZlIGl0c2VsZi4gSXQgbWF5IGhhdmUgYnVncyAocmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGRlYWRsb2NrcyksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbi4gVGhpcyBpcyBiZWNhdXNlIGl0IGlzIHRoZSBtYWluIGZ1bmN0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCBhbmQgaXQncyB0aGUgb25seSBub24tc3RhdGljIGV4cG9ydGVkIHN5bWJvbCwgZXZlbiBpZiBpdCBpcyBhIGhvdCBwYXRoLlxuXG5Ob3csIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSdtIGdvaW5nIHRvIHNldCBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBLQUxMU1lNU2AuIGBLQUxMU1lNU2AgdXN1YWxseSBpcyBlbmFibGVkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gaW5jbHVkZSBpdC5cblxuV29ydGhGdXp6aW5nPXRydWVcbkZvY3VzU3ltYm9scyA9IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgXG5FbmFibGVDb25maWdzID0gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgLCBgS0FMTFNZTVNgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ3LCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoyMDo0NC44NTczNzU0ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQ0ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjQ1LjAxNjgzMjg0NFoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2NDE2NTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjQ1LjAxNzM5MjcxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODg2MzYwMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4ODQwYjEyNjk3OWZmLi4xMmRjMmMxZGMwMzE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxNDQsNiArMjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4rICpcbisgKlx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxuICAqL1xuIFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcbkBAIC0yMzAwLDYgKzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1x0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuKyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTMyNTAsNiArMzI1NSw3IEBAIGVudW0gbmV0ZGV2X2NtZCB7XG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLFxuIFx0TkVUREVWX1hEUF9GRUFUX0NIQU5HRSxcbitcdE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLFxuIH07XG4gY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpO1xuIFxuQEAgLTQ0NjYsOSArNDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ0ODAsNiArNDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfaW5jKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcbmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXG5AQCAtNTc2LDYgKzU3NiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5pbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbkBAIC0zMjAzLDYgKzMyMDMsMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rI2VuZGlmXG4rXG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uODZmZGFhMDk2YWVkYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NzUsNiArMTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKVxuIFx0TihQUkVfQ0hBTkdFQUREUikgTihPRkZMT0FEX1hTVEFUU19FTkFCTEUpIE4oT0ZGTE9BRF9YU1RBVFNfRElTQUJMRSlcbiBcdE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQpIE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBKVxuIFx0TihYRFBfRkVBVF9DSEFOR0UpXG4rXHROKERFQlVHX1VOUkVHSVNURVIpXG4gXHR9XG4gI3VuZGVmIE5cbiBcdHJldHVybiBcIlVOS05PV05fTkVUREVWX0VWRU5UXCI7XG5AQCAtMTE1ODIsNiArMTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGRldl9yZWZjbnRfcmVhZCk7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rc3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4rI2VuZGlmXG4rXG4gaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7XG4gXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcbkBAIC0xMTY1NSwxMSArMTE2NjQsMTYgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgK1xuIFx0XHRcdCAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkge1xuK1x0XHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpIHtcbiBcdFx0XHRcdHByX2VtZXJnKFwidW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCIsXG4gXHRcdFx0XHRcdCBkZXYtXHUwMDNlbmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpO1xuIFx0XHRcdFx0cmVmX3RyYWNrZXJfZGlyX3ByaW50KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTApO1xuK1x0XHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpO1xuK1x0XHRcdFx0ZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRcdFx0fVxuK1x0XHRcdF9fcnRubF91bmxvY2soKTtcbitcdFx0XHRyY3VfYmFycmllcigpO1xuIFxuIFx0XHRcdHdhcm5pbmdfdGltZSA9IGppZmZpZXM7XG4gXHRcdH1cbkBAIC0xMjA1OSw2ICsxMjA3Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbisjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldGRldlwiKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIxNTgsNiArMTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIGZyZWVfZGV2OlxuICNlbmRpZlxuIFx0a3ZmcmVlKGRldik7XG5AQCAtMTIyMjYsNiArMTIyNDQsOCBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcbiAjZW5kaWZcbitcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbitcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2Vjb3JlX3N0YXRzKTtcbiBcdGRldi1cdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuQEAgLTEzMjI5LDYgKzEzMjQ5LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcbiBcdC5zZXR1cFx0XHRcdD0gYmFja2xvZ19uYXBpX3NldHVwLFxuIH07XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XG4rI2VuZGlmXG4rXG4gLypcbiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcbiAgKiAgICAgICB0byB0YWtlIHRoZSBydG5sIHNlbWFwaG9yZS5cbkBAIC0xMzIzNyw2ICsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBpLCByYyA9IC1FTk9NRU07XG4gXG4rXHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcbiBcdEJVR19PTighZGV2X2Jvb3RfcGhhc2UpO1xuIFxuIFx0bmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTtcbkBAIC0xMzM0MCwzICsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4gfVxuIFxuIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xuK1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXG4rI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbitzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0YXRvbWljX3QgY291bnQ7XG4rXHRpbnQgbnJfZW50cmllcztcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitcbitzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbitcbitzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKVxuK3tcbitcdGNoYXIgYnVmZmVyWzMyXSA9IHsgfTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIFwiJXBzXCIsICh2b2lkICopZW50cmllc1tpXSk7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcbitcdFx0aWYgKGNwKVxuK1x0XHRcdCpjcCA9ICdcXDAnO1xuK1x0XHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJwcm9jZXNzX29uZV93b3JrXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwia3N5c191bnNoYXJlXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwic29ja19zZW5kbXNnX25vc2VjXCIpIHx8XG4rXHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcInNvY2tfcmVjdm1zZ19ub3NlY1wiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcIl9fc3lzX2JpbmRcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zb2NrX3JlbGVhc2VcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYnBmXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJkb19zb2NrX3NldHNvY2tvcHRcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBucl9lbnRyaWVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuK1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbitcbitcdC8qIFRyaW0gY29tbW9uIHRyYWNlcy4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHRwdHItXHUwMDNlbnJfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4rXHR9XG4rXHQvKiBNZXJnZSBkdXBsaWNhdGVkIGVudHJpZXMgYWZ0ZXIgdHJpbW1pbmcgY29tbW9uIHRyYWNlcy4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwdHItXHUwMDNlbGlzdCwgbGlzdCxcbitcdFx0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cdTAwM2Vucl9lbnRyaWVzIHx8XG4rXHRcdFx0ICAgIG1lbWNtcChwdHItXHUwMDNlZW50cmllcywgdG1wLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHQgICBwdHItXHUwMDNlbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHRcdGlmICghY291bnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBNb3ZlIGNvdW50IGZyb20gbm9uLWZpcnN0IGVudHJ5IHRvIGZpcnN0IGVudHJ5LiAqL1xuK1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0YXRvbWljX3N1Yihjb3VudCwgXHUwMDI2dG1wLVx1MDAzZWNvdW50KTtcbitcdFx0fVxuK1x0fVxuK1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0aWYgKCFjb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4rXHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdHBvcysrO1xuK1x0XHRiYWxhbmNlICs9IGNvdW50O1xuK1x0XHRwcl9pbmZvKFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcblwiLCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBjb3VudCk7XG4rXHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcywgNCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbitcdFx0cHJfaW5mbyhcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4rXHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbitcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxuK1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbitcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzW0FSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpXTtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuK1x0aWYgKGluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuK1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuK1x0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxuK1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJ3QgdHJpbSB0cmFjZXNcbitcdCAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy5cbitcdCAqXG4rXHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbitcdCAqL1xuK1x0aWYgKGluX3NvZnRpcnEoKSkge1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbitcdFx0XHRcdG5yX2VudHJpZXMgPSBpICsgMTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0LyogQ29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgYXQgYmVzdC1lZmZvcnQgYmFzaXMuIFNpbmNlIGR1cGxpY2F0ZWQgZW50cmllc1xuK1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJ3QgdXNlIGxvY2sgaGVyZS5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbitcdFx0XHRhdG9taWNfYWRkKGRlbHRhLCBcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4rXHQgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy5cbitcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbitcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4rXHQgKi9cbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdC8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovXG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cHRyLVx1MDAzZWNvdW50LCBkZWx0YSk7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XG4rXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcbitcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuK1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbit9O1xuK1xuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbisgKiBrYWxsc3ltcyBldmVyeSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XG4rXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4rXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcImhhbmRsZV9zb2Z0aXJxc1wiLCAxNSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJysnKTtcbitcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwiKyVseC8lbHhcIiwgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xuK1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjb21wbGV0ZShcdTAwMjZjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLVx1MDAzZWNvbXBsZXRpb24pO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuK1xuK1x0dGltZXJfc2V0dXBfb25fc3RhY2soXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXG4rXHRtb2RfdGltZXIoXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuK1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuK1x0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lcik7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2xvY2tfZGVidWcuYyBiL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuaW5kZXggOGE4MWM1NDMwNzA1My4uYzFhNDQ1OTRjNDkyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuKysrIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG5AQCAtMjksNiArMjksNyBAQCBpbnQgbmV0ZGV2X2RlYnVnX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4gXHRjYXNlIE5FVERFVl9ET1dOOlxuIFx0Y2FzZSBORVRERVZfUkVCT09UOlxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbitcdGNhc2UgTkVUREVWX0RFQlVHX1VOUkVHSVNURVI6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxuIFx0Y2FzZSBORVRERVZfUFJFX0NIQU5HRUFERFI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5hZjdlOTk2MzY0OTU2IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC02OTgsNyArNjk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbit2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcbkBAIC03NzAsNyArNzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXG4gXHR0cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHNrLCByZXQsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZWxzZVxuK2lubGluZVxuKyNlbmRpZlxuK2ludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VzZW5kbXNnLCBpbmV0Nl9zZW5kbXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZyxcbkBAIC0xMTIwLDggKzExMzAsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcbiBcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlcmVjdm1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldDZfcmVjdm1zZyxcbkBAIC0yNjI0LDkgKzI2MzksMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZyxcbiBcdHJldHVybiBlcnIgXHUwMDNjIDAgPyBlcnIgOiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2VuZGlmXG4raW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdCAgICBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdXG4gXHRcdFx0XHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MjA6NDUuMDE3MzkzODA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4ODYzNTcyNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRfRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBkZXNpZ25lZCB0byBkZWJ1ZyBgbmV0X2RldmljZWAgcmVmY291bnQgbGVha3MuIEl0IHVzZXMgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgZXNzZW50aWFsbHkgdHJhY2tzIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAgY2FsbHMgYnkgc2F2aW5nIHN0YWNrIHRyYWNlcyBpbnRvIGEgYG5ldGRldl90cmFjZV9idWZmZXJgLiBUaGlzIGJ1ZmZlciBnZXRzIGR1bXBlZCBpZiB0aGUgbmV0X2RldmljZSBoYW5ncyB3aGlsZSB1bnJlZ2lzdGVyZWQsIGFuZCBhIG5ldyBgTkVUREVWX0RFQlVHX1VOUkVHSVNURVJgIGNvbW1hbmQgaXMgYWRkZWQuIFNvbWUgZnVuY3Rpb25zIGhhdmUgYWxzbyBiZWVuIG1hcmtlZCBgbm9pbmxpbmVgIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2UgcmVhZGFiaWxpdHkuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLiBMZXQncyBsb29rIGF0IHRoZSBjcml0aWNhbCBzZWN0aW9ucy5cblxuRmlyc3QsIHRoZSB0cmFjZSBidWZmZXI6IGl0J3MgYSBzdGF0aWMgYnVmZmVyLCBkZWNsYXJlZCBhczpcblxuYGBgY1xuI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG5cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcblx0YXRvbWljX3QgY291bnQ7XG5cdGludCBucl9lbnRyaWVzO1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdO1xufSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG5gYGBcblxuQmVpbmcgc3RhdGljLCBpdCdzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnQuXG5cblRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhY2sgdHJhY2VzLiBJbnNpZGUsIHdlIHNlZTpcblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuXHRpbnQgbnJfZW50cmllcztcbi4uLlxuXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG5gYGBcblxuVGhlIGNydWNpYWwgcGFydCBpcyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBgZW50cmllc2AgYXJyYXkuICBgc3RhY2tfdHJhY2Vfc2F2ZWAgcmV0dXJucyBgbnJfZW50cmllc2AsIHdoaWNoIGlzIGhvdyBtYW55IGVudHJpZXMgd2VyZSBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBgZW50cmllc2AgYXJyYXkuICBUaGVuLCB0aGVyZSdzIGEgY29tcGFyaXNvbjpcblxuYGBgY1xuXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuYGBgXG5cblRoaXMgaXMgKnNhZmUqLiBgbWVtY21wYCBvbmx5IGNvbXBhcmVzIHVwIHRvIHRoZSBpbml0aWFsaXplZCBgbnJfZW50cmllc2AuIFRoZSBjb2RlIGlzIGNhcmVmdWwuICBTaW1pbGFybHksIHdoZW4gY29weWluZzpcblxuYGBgY1xuXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcblx0XHRtZW1tb3ZlKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbmBgYFxuXG5UaGUgYG1lbW1vdmVgIGFsc28gb25seSBjb3BpZXMgdGhlIGluaXRpYWxpemVkIHBhcnQuICBUaGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RhdGU7IG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHN0YWNrX3RyYWNlX3NhdmVgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGBlbnRyaWVzYCBhcnJheSB1cCB0byBgbnJfZW50cmllc2AuXG5cbkxldCdzIGRvdWJsZS1jaGVjay4gVGhlIGNvZGUgYWxzbyB1c2VzIGBzbnByaW50ZmAgaW4gdGhlIGB0cmltX25ldGRldl90cmFjZWAgZnVuY3Rpb246XG5cbmBgYGNcblx0Y2hhciBidWZmZXJbMzJdID0geyB9O1xuLi4uXG5cdFx0c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIFwiJXBzXCIsICh2b2lkICopZW50cmllc1tpXSk7XG5gYGBcblxuVGhpcyBpcyBhbHNvIHNhZmUuIGBzbnByaW50ZmAgd29ya3MganVzdCBmaW5lIG9uIGluZGl2aWR1YWwgZW50cmllcy5cblxuU28sIGluIHN1bW1hcnk6IHRoaXMgcGF0Y2ggaXMgKnB1cmVseSogZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBObyBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlICpmYWxzZSouXG5cbkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZW50cmllc2AgYXJyYXkgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcG9wdWxhdGVkIGJ5IGBzdGFja190cmFjZV9zYXZlYCwgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd3JpdHRlbiwgYG5yX2VudHJpZXNgLiBUaGUgcmVzdCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZCwgYnV0IHRoZSBjb2RlIG9ubHkgdXNlcyBgbnJfZW50cmllc2AgdG8gaW5kZXggYW5kIHJlYWQ6XG5cbmBgYGNcblx0XHRpZiAocHRyLVx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcdTAwMjZcdTAwMjZcblx0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbmBgYFxuXG5hbmRcblxuYGBgY1xuXHRcdG1lbW1vdmUocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuYGBgXG5cblNvLCBpdCAqb25seSogcmVhZHMgdGhlIGluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSBhcnJheXMuXG5cbkZpbmFsbHksIHRoZSBgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jYDpcblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xuXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG5cdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4uLi5cblx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG5cdFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xuYGBgXG5cbkFnYWluLCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBuclxuXG4iLCJJbnB1dFRva2VucyI6ODMyNCwiT3V0cHV0VG9rZW5zIjoyMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MjE6MDMuODgwOTcwMDYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjw7c7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 18:02:42 +0000 UTC FinishedAt: 2026-08-12 18:21:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3d6d817622b0a9721e3cc404df3469171582be13", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEV_REFCNT_TRACKER", "KALLSYMS" ], "series_id": "943750aa-058d-4d57-b090-ef4ba4d15dcf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "save_netdev_trace_buffer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0OywKICAgICYjMzQ7S0FMTFNZTVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzYXZlX25ldGRldl90cmFjZV9idWZmZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggODg0MGIxMjY5NzlmZi4uMTJkYzJjMWRjMDMxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC0yMTQ0LDYgJiM0MzsyMTQ0LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbiYjNDM7ICpcbiYjNDM7ICpcdEBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q6IExpbmtlZCBsaXN0IGZvciBkZWJ1Z2dpbmcgcmVmY291bnQgbGVhay5cbiAgKi9cbiBcbiBzdHJ1Y3QgbmV0X2RldmljZSB7XG5AQCAtMjMwMCw2ICYjNDM7MjMwMiw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcbiYjNDM7I2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtMzI1MCw2ICYjNDM7MzI1NSw3IEBAIGVudW0gbmV0ZGV2X2NtZCB7XG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLFxuIFx0TkVUREVWX1hEUF9GRUFUX0NIQU5HRSxcbiYjNDM7XHRORVRERVZfREVCVUdfVU5SRUdJU1RFUixcbiB9O1xuIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTtcbiBcbkBAIC00NDY2LDkgJiM0Mzs0NDcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuJiM0MztcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ0ODAsNiAmIzQzOzQ0OTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X2hvbGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpZiAoZGV2KSB7XG4mIzQzO1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuY1xuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zb2Z0aXJxLmNcbkBAIC01NzYsNiAmIzQzOzU3NiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC93b3JrcXVldWUuY1xuQEAgLTMyMDMsNiAmIzQzOzMyMDMsMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBwcm9jZXNzX29uZV93b3JrKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qKlxuICAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrXG4gICogQHdvcmtlcjogc2VsZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IGFmMjYwZmY1NDYyYTYuLjg2ZmRhYTA5NmFlZGIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xODc1LDYgJiM0MzsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXG4gXHROKFBSRV9DSEFOR0VBRERSKSBOKE9GRkxPQURfWFNUQVRTX0VOQUJMRSkgTihPRkZMT0FEX1hTVEFUU19ESVNBQkxFKVxuIFx0TihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpXG4gXHROKFhEUF9GRUFUX0NIQU5HRSlcbiYjNDM7XHROKERFQlVHX1VOUkVHSVNURVIpXG4gXHR9XG4gI3VuZGVmIE5cbiBcdHJldHVybiBcJiMzNDtVTktOT1dOX05FVERFVl9FVkVOVFwmIzM0OztcbkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGRldl9yZWZjbnRfcmVhZCk7XG4gXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNjU1LDExICYjNDM7MTE2NjQsMTYgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MztcbiBcdFx0XHQgICAgICAgUkVBRF9PTkNFKG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcykgKiBIWikpIHtcbiYjNDM7XHRcdFx0cnRubF9sb2NrKCk7XG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuIFx0XHRcdFx0cHJfZW1lcmcoXCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9yZWZjbnRfcmVhZChkZXYpKTtcbiBcdFx0XHRcdHJlZl90cmFja2VyX2Rpcl9wcmludChcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIDEwKTtcbiYjNDM7XHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XG4mIzQzO1x0XHRcdFx0ZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRfX3J0bmxfdW5sb2NrKCk7XG4mIzQzO1x0XHRcdHJjdV9iYXJyaWVyKCk7XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbiBcdFx0fVxuQEAgLTEyMDU5LDYgJiM0MzsxMjA3Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcJiMzNDtuZXRkZXZcJiMzNDspO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjE1OCw2ICYjNDM7MTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBmcmVlX2RldjpcbiAjZW5kaWZcbiBcdGt2ZnJlZShkZXYpO1xuQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuJiM0MztcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiYjNDM7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlY29yZV9zdGF0cyk7XG4gXHRkZXYtXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNleGRwX2J1bGtxKTtcbkBAIC0xMzIyOSw2ICYjNDM7MTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzMjM3LDYgJiM0MzsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBpLCByYyA9IC1FTk9NRU07XG4gXG4mIzQzO1x0bmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KCk7XG4gXHRCVUdfT04oIWRldl9ib290X3BoYXNlKTtcbiBcbiBcdG5ldF9kZXZfc3RydWN0X2NoZWNrKCk7XG5AQCAtMTMzNDAsMyAmIzQzOzEzMzY3LDI0MiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0MztcbiYjNDM7I2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0YXRvbWljX3QgY291bnQ7XG4mIzQzO1x0aW50IG5yX2VudHJpZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4mIzQzO3N0YXRpYyBMSVNUX0hFQUQobmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbiYjNDM7c3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB0cmltX25ldGRldl90cmFjZSh1bnNpZ25lZCBsb25nICplbnRyaWVzLCBpbnQgbnJfZW50cmllcylcbiYjNDM7e1xuJiM0MztcdGNoYXIgYnVmZmVyWzMyXSA9IHsgfTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBcJiMzNDslcHNcJiMzNDssICh2b2lkICopZW50cmllc1tpXSk7XG4mIzQzO1x0XHRjcCA9IHN0cmNocihidWZmZXIsICYjMzk7ICYjMzk7KTtcbiYjNDM7XHRcdGlmIChjcClcbiYjNDM7XHRcdFx0KmNwID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtwcm9jZXNzX29uZV93b3JrXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJiMzOTtrJiMzOTspIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtrc3lzX3Vuc2hhcmVcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O3MmIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O3NvY2tfc2VuZG1zZ19ub3NlY1wmIzM0OykgfHxcbiYjNDM7XHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWNcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5Oykge1xuJiM0MztcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwmIzM0O19fc3lzX2JpbmRcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCYjMzQ7X19zb2NrX3JlbGVhc2VcJiMzNDspIHx8XG4mIzQzO1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCYjMzQ7X19zeXNfYnBmXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaSAmIzQzOyAxO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcJiMzNDtkb19zb2NrX3NldHNvY2tvcHRcJiMzNDspKVxuJiM0MztcdFx0XHRcdHJldHVybiBpICYjNDM7IDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBucl9lbnRyaWVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4mIzQzO1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogVHJpbSBjb21tb24gdHJhY2VzLiAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHRwdHItXHUwMDNlbnJfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4mIzQzO1x0fVxuJiM0MztcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7XG4mIzQzO1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4mIzQzO1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNnB0ci1cdTAwM2Vjb3VudCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwdHItXHUwMDNlbGlzdCwgbGlzdCxcbiYjNDM7XHRcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cdTAwM2Vucl9lbnRyaWVzIHx8XG4mIzQzO1x0XHRcdCAgICBtZW1jbXAocHRyLVx1MDAzZWVudHJpZXMsIHRtcC1cdTAwM2VlbnRyaWVzLFxuJiM0MztcdFx0XHRcdCAgIHB0ci1cdTAwM2Vucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xuJiM0MztcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4mIzQzO1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHRcdGF0b21pY19zdWIoY291bnQsIFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdC8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuJiM0MztcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHtcbiYjNDM7XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbiYjNDM7XHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdGlmICghY291bnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4mIzQzO1x0XHQgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHNjaGVkdWxhYmxlIGNvbnRleHQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBvcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRiYWxhbmNlICYjNDM7PSBjb3VudDtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcbiYjNDM7XHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcywgNCk7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7YmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbiYjNDM7XHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbiYjNDM7XHQgKiBUaGVyZWZvcmUsIG5vIG1vcmUgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKCkgY2FsbCB3aWxsIGJlIG1hZGUsIGFuZCB3ZSBjYW5cbiYjNDM7XHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbiYjNDM7XHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKV07XG4mIzQzO1x0aW50IG5yX2VudHJpZXM7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4mIzQzO1x0aWYgKGluX25taSgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4mIzQzO1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuJiM0MztcdC8qIFRyaW0gdHJhY2VzIG9mIHByb2Nlc3MgY29udGV4dCBub3cgaWYgY2FsbGVkIGZyb20gc29mdGlycSBjb250ZXh0LCBmb3JcbiYjNDM7XHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXNcbiYjNDM7XHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW5fc29mdGlycSgpKSB7XG4mIzQzO1x0XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbiYjNDM7XHRcdFx0XHRucl9lbnRyaWVzID0gaSAmIzQzOyAxO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdC8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXNcbiYjNDM7XHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24mIzM5O3QgdXNlIGxvY2sgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4mIzQzO1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkge1xuJiM0MztcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbiYjNDM7XHRcdFx0YXRvbWljX2FkZChkZWx0YSwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbiYjMzk7dCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4mIzQzO1x0ICogZHVwbGljYXRlZCBlbnRyaWVzIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcuXG4mIzQzO1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuJiM0MztcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4mIzQzO1x0XHQvKiBSZW1vdmUgb25lIGVudHJ5IGZyb20gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0IGFuZCBpbml0aWFsaXplIGl0LiAqL1xuJiM0MztcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnB0ci1cdTAwM2Vjb3VudCwgZGVsdGEpO1xuJiM0MztcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuJiM0MztcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4mIzQzO1x0XHQvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqL1xuJiM0MztcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCB7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbiYjNDM7ICoga2FsbHN5bXMgZXZlcnkgdGltZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbiYjNDM7XHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4mIzQzO1x0Y2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbiYjNDM7XHRjaGFyICpjcDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbiYjNDM7XHRcdGlmIChzdHJuY21wKGJ1ZmZlciwgXCYjMzQ7aGFuZGxlX3NvZnRpcnFzXCYjMzQ7LCAxNSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspO1xuJiM0MztcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwmIzM0OyYjNDM7JWx4LyVseFwmIzM0OywgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4mIzQzO1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICYjNDM7IHNpemU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGUoXHUwMDI2Y29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QsIHRpbWVyKS1cdTAwM2Vjb21wbGV0aW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuJiM0MztcbiYjNDM7XHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqL1xuJiM0MztcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4mIzQzO1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuJiM0MztcdHRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soXHUwMDI2dGMudGltZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9sb2NrX2RlYnVnLmMgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuJiM0MztcdGNhc2UgTkVUREVWX0RFQlVHX1VOUkVHSVNURVI6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxuIFx0Y2FzZSBORVRERVZfUFJFX0NIQU5HRUFERFI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5hZjdlOTk2MzY0OTU2IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC02OTgsNyAmIzQzOzY5OCwxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXG4gfVxuIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7XG4gXG4tc3RhdGljIHZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbmRpZlxuJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcbkBAIC03NzAsNyAmIzQzOzc3NCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LFxuIFx0dHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZylcbiYjNDM7c3RhdGljXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4mIzQzO25vaW5saW5lXG4mIzQzOyNlbHNlXG4mIzQzO2lubGluZVxuJiM0MzsjZW5kaWZcbiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExMjAsOCAmIzQzOzExMzAsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcbiBcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4mIzQzO3N0YXRpY1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuJiM0Mztub2lubGluZVxuJiM0MzsjZWxzZVxuJiM0MztpbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO2ludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXJlY3Ztc2csXG4gXHRcdFx0XHQgICAgIGluZXQ2X3JlY3Ztc2csXG5AQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuJiM0MztzdGF0aWNcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbiYjNDM7bm9pbmxpbmVcbiYjNDM7I2VuZGlmXG4mIzQzO2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiM0MzsgMjBdXG4gXHRcdFx0XHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgICAmIzM0O0tBTExTWU1TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE0NCw2ICYjNDM7MjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMDAsNiAmIzQzOzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTMyNTAsNiAmIzQzOzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQgewogCU5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCwKIAlORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLAogCU5FVERFVl9YRFBfRkVBVF9DSEFOR0UsCiYjNDM7CU5FVERFVl9ERUJVR19VTlJFR0lTVEVSLAogfTsKIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTsKIApAQCAtNDQ2Niw5ICYjNDM7NDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDQ4MCw2ICYjNDM7NDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTc2LDYgJiM0Mzs1NzYsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjAzLDYgJiM0MzszMjAzLDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg3NSw2ICYjNDM7MTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKQogCU4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpCiAJTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpCiAJTihYRFBfRkVBVF9DSEFOR0UpCiYjNDM7CU4oREVCVUdfVU5SRUdJU1RFUikKIAl9CiAjdW5kZWYgTgogCXJldHVybiAmIzM0O1VOS05PV05fTkVUREVWX0VWRU5UJiMzNDs7CkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTY1NSwxMSAmIzQzOzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MzsKIAkJCSAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkgewomIzQzOwkJCXJ0bmxfbG9jaygpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KJiM0MzsJCQlfX3J0bmxfdW5sb2NrKCk7CiYjNDM7CQkJcmN1X2JhcnJpZXIoKTsKIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKIAkJfQpAQCAtMTIwNTksNiAmIzQzOzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCiAJZGV2LSZndDtwcml2X2xlbiA9IHNpemVvZl9wcml2OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOyNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldGRldiYjMzQ7KTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOwpAQCAtMTIxNTgsNiAmIzQzOzEyMTc1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogZnJlZV9wY3B1OgogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogZnJlZV9kZXY6CiAjZW5kaWYKIAlrdmZyZWUoZGV2KTsKQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiYjNDM7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzMjI5LDYgJiM0MzsxMzI0OSwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzIzNyw2ICYjNDM7MTMyNjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzMzQwLDMgJiM0MzsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlclszMl0gPSB7IH07CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJcHRyLSZndDtucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWlmICghYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgJmFtcDtwdHItJmd0O2xpc3QsIGxpc3QsCiYjNDM7CQkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyAhPSB0bXAtJmd0O25yX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O25yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJaWYgKCFjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCS8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZQomIzQzOwkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQlwb3MmIzQzOyYjNDM7OwomIzQzOwkJYmFsYW5jZSAmIzQzOz0gY291bnQ7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgY291bnQpOwomIzQzOwkJc3RhY2tfdHJhY2VfcHJpbnQocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jCmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmMKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1JFQk9PVDoKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9ERUJVR19VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCWNhc2UgTkVUREVWX1BSRV9DSEFOR0VBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTY5OCw3ICYjNDM7Njk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc3MCw3ICYjNDM7Nzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTEyMCw4ICYjNDM7MTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzI3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIE5ldCBEZXZpY2UgUmVmY291bnQgVHJhY2tlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgYG5ldF9kZXZpY2VgIHJlZmNvdW50IGxlYWtzLiBJdCBsb29rcyBsaWtlIGl0IHV0aWxpemVzIGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIHJlbGllcyBvbiBgQ09ORklHX0tBTExTWU1TYCB3aGljaCBpcyBzdGFuZGFyZCBmb3IgdGhlc2UgdHJhY2luZyBtZWNoYW5pc21zLiAgVGhlIHBhdGNoIGFkZHMgYSBidW5jaCBvZiBzdHVmZjogYSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0YCB0byB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCwgZnVuY3Rpb25zIGxpa2UgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgKGNhbGxlZCBmcm9tIGhvdCBwYXRocyBsaWtlIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGApLCBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgbGlrZSBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCBhbmQgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgLiBJdCBhbHNvIG1vZGlmaWVzIGBuZXRkZXZfd2FpdF9hbGxyZWZzX2FueWAgYW5kIGFkZHMgYSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0YC4gSXQgYWxzbyBhZGRzIGBub2lubGluZWAgYXR0cmlidXRlcyB0byBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zICpwdXJlbHkqIGZvciBkZWJ1Z2dpbmcsIHJpZ2h0PyBMaWtlIGByZWZfdHJhY2tlcmAsIGBrbWVtbGVha2AsIG9yIGBsb2NrZGVwYC4gSXQgKnNlZW1zKiBsaWtlIGl0JiMzOTtzIG5vdCBnb2luZyB0byBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVlZCBmdXp6aW5nLiBIb3dldmVyLCBsZXQmIzM5O3MgY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMuIFRoaXMgaW50cm9kdWNlcyBuZXcgbG9naWMgaW4gdGhlIGhvdCBwYXRocywgbm90YWJseSBhcm91bmQgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYC4KClRoZW4gSSByZW1lbWJlciB0aGF0IHRoZSBwcm9tcHQgc2F5cyB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYnV0IGlzIHRoaXMgdHJ1bHkganVzdCAmIzM0O3B1cmVseSBkZWNvcmF0aXZlPyYjMzQ7CgpTbywgb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgdHJhY2Vwb2ludCBvciBhIGxvZy4gVGhpcyBhZGRzIGEgdGltZXIsIGEgbG9jaywgYW5kIG1hbmlwdWxhdGVzIGEgbGlua2VkIGxpc3QuIFRoaXMgYWRkcyBzdGF0ZSwgd2hpY2ggaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIGVycm9ycy4gIEV2ZW4gaWYgdGhlICppbnRlbnRpb24qIGlzIGRlYnVnZ2luZywgdGhlcmUgY291bGQgYmUgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIG9yIGRlYWRsb2Nrcy4gSXQgY2hhbmdlcyBleGVjdXRpb24gZmxvdyBpbiB0aGVzZSBwYXRocy4gVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCAqaXMqIHdvcnRoIGNvbnNpZGVyaW5nLgoKVGhlIG5ldyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbiBmb3IgZnV6emluZyBhcmU6IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgLCBgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGVyYXNlX25ldGRldl90cmFjZV9idWZmZXJgLCBhbmQgYG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdGAuCkxldCYjMzk7cyBjb25maXJtIHRoYXQgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24gdXNpbmcgYGdyZXBwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9ERVZfUkVGQ05UX1RSQUNLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTUxPXN0cnVjdCBuZXRfZGV2aWNlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMDQtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzMDU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNi1cdHN0cnVjdCBsaXN0X2hlYWRcdG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ0NzM9dm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ0NzQtXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ0NzU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3Ni12b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUwNT1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUwOC17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1MDk6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTAtXHRyZWZfdHJhY2tlcl9hbGxvYyhcdTAwMjZkZXYtXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIsIGdmcCk7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTE3PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUxOS17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1MjA6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MjEtXHRyZWZjb3VudF9kZWMoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLm5vX3RyYWNrZXIpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NDUyNj1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3RyYWNrZXJfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDUyOC17XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ1Mjk6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MzAtXHRyZWZfdHJhY2tlcl9mcmVlKFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlcik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNS1cbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oOjY6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC03LXR5cGVkZWYgc3RydWN0IHJlZl90cmFja2VyICpuZXRkZXZpY2VfdHJhY2tlcjtcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDA9Q09ORklHX1VCU0FOX1VOUkVBQ0hBQkxFPXlcbi0tXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDMtI1xua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjQ0OkNPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSPXlcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00NS1DT05GSUdfTkVUX05TX1JFRkNOVF9UUkFDS0VSPXlcbi0tXG5rZXJuZWwvc29mdGlycS5jPTU3Nj1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuLS1cbmtlcm5lbC9zb2Z0aXJxLmMtNTc4LVxua2VybmVsL3NvZnRpcnEuYzo1Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC9zb2Z0aXJxLmMtNTgwLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4tLVxua2VybmVsL3dvcmtxdWV1ZS5jPTMxODg9c3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuLS1cbmtlcm5lbC93b3JrcXVldWUuYy0zMjA1LVxua2VybmVsL3dvcmtxdWV1ZS5jOjMyMDY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbmtlcm5lbC93b3JrcXVldWUuYy0zMjA3LXN0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC9LY29uZmlnLmRlYnVnLTItXG5uZXQvS2NvbmZpZy5kZWJ1ZzozOmNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1wmIzM0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExNTg0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbm5ldC9jb3JlL2Rldi5jLTExNTg1LVxubmV0L2NvcmUvZGV2LmM6MTE1ODY6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTExNTg3LXN0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIwNzUtXG5uZXQvY29yZS9kZXYuYzoxMjA3NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTIwNzctXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzI0ND1zdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTMyNTEtXG5uZXQvY29yZS9kZXYuYzoxMzI1MjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxubmV0L2NvcmUvZGV2LmMtMTMyNTMtc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMzM2OT1zdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTtcbm5ldC9jb3JlL2Rldi5jLTEzMzcwLVxubmV0L2NvcmUvZGV2LmM6MTMzNzE6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9jb3JlL2Rldi5jLTEzMzcyLVxuLS1cbm5ldC9zb2NrZXQuYz03MDE9c3RhdGljXG5uZXQvc29ja2V0LmM6NzAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtNzAzLW5vaW5saW5lXG4tLVxubmV0L3NvY2tldC5jPTc3Nz1zdGF0aWNcbm5ldC9zb2NrZXQuYzo3Nzg6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy03Nzktbm9pbmxpbmVcbi0tXG5uZXQvc29ja2V0LmM9MTEzMz1zdGF0aWNcbm5ldC9zb2NrZXQuYzoxMTM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG5uZXQvc29ja2V0LmMtMTEzNS1ub2lubGluZVxuLS1cbm5ldC9zb2NrZXQuYz0yNjQyPXN0YXRpY1xubmV0L3NvY2tldC5jOjI2NDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbm5ldC9zb2NrZXQuYy0yNjQ0LW5vaW5saW5lXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgRGVidWcgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJg4oCmIEkgdmFndWVseSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgZGVidWcgS2NvbmZpZyBvcHRpb25zLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGl0JiMzOTtzIG5lc3RsZWQgaW4gYG5ldC9LY29uZmlnLmRlYnVnYCwgeWVhaCwgdGhlcmUgaXQgaXMuIE5vdyB0aGUgaW50ZXJlc3RpbmcgYml0OiB3aGF0IGRvZXMgZW5hYmxpbmcgdGhpcyB0aGluZyAqYWN0dWFsbHkqIGRlcGVuZCBvbj8gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwcmVyZXF1aXNpdGVzLiBBcmUgdGhlcmUgb3RoZXIgZGVidWcgb3B0aW9ucyBpdCBwaWdneWJhY2tzIG9uPyBEb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IGtlcm5lbCBmZWF0dXJlcyBvciByZXF1aXJlIHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzPyBBIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgaGVscCBtZSBmaWd1cmUgb3V0IHdoZW4gaXQmIzM5O3MgYXBwcm9wcmlhdGUgdG8gZW5hYmxlIHRoaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gaXQgcHJvdmlkZXMuIE9rYXksIGxldCYjMzk7cyBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIEtjb25maWcgdG8gc2VlIHRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcbiAgIDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG5ldCBkZXZpY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgIDU6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAgNjpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gICA3Olx0XHRkZWZhdWx0IG5cbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIGRldmljZSByZWZlcmVuY2VzLlxuICAxMDpcdFx0ICBUaGlzIGFkZHMgbWVtb3J5IGFuZCBjcHUgY29zdHMuXG4gIDExOlx0XG4gIDEyOlx0Y29uZmlnIE5FVF9OU19SRUZDTlRfVFJBQ0tFUlxuICAxMzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IE5FVFxuICAxNTpcdFx0c2VsZWN0IFJFRl9UUkFDS0VSXG4gIDE2Olx0XHRkZWZhdWx0IG5cbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgRW5hYmxlIGRlYnVnZ2luZyBmZWF0dXJlIHRvIHRyYWNrIG5ldG5zIHJlZmVyZW5jZXMuXG4gIDE5Olx0XHQgIFRoaXMgYWRkcyBtZW1vcnkgYW5kIGNwdSBjb3N0cy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk0NwoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiAyNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHRoZSBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgY29uZmlnIG9wdGlvbi4gSXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRpbmcgYSBkZWJ1Z2dpbmcgZmVhdHVyZSByZWxhdGVkIHRvIHJlZmNvdW50IHRyYWNraW5nIGZvciBuZXR3b3JrIGRldmljZXMuIFRoZSBtYWluIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFyZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBXaGlsZSB0aGUgZGVzY3JpcHRpb25zIGNhbGwgaXQgJiMzNDtkZWNvcmF0aXZlJiMzNDsgaW5pdGlhbGx5LCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEkmIzM5O20gbm90IHNvIHN1cmUuIEl0IHNlZW1zIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3Qgc29tZSBwcmludCBzdGF0ZW1lbnRzLCBpdCYjMzk7cyBhY3R1YWxseSBzYXZpbmcgc3RhY2sgdHJhY2VzIGludG8gYSBjdXN0b20gdHJhY2UgYnVmZmVyLCB0aGUgYG5ldGRldl90cmFjZV9idWZmZXJgIGFycmF5LgoKTm93LCBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBjYWxsZWQgd2l0aGluIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIHdoaWNoIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzLiBUaGUgcHJvbXB0IHdhcm5lZCBhZ2FpbnN0IGZvY3VzaW5nIG9uIGhvdCBwYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEhvd2V2ZXIsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGFuZCBpdCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIEl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGl0LgoKU28sIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbG9naWMgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZG9lcyBzdGFjayB0cmFjZSBzYXZlcywgdXNlcyBSQ1UsIHNwaW5sb2NrcyBhbmQgbGlua2VkIGxpc3RzLiBJdCBjb21wYXJlcyBleGlzdGluZyBlbnRyaWVzLCBhZGRpbmcgbmV3IGVudHJpZXMgYW5kIHRoZSBzdGFjayB0cmFjZSBzYXZlIGl0c2VsZi4gSXQgbWF5IGhhdmUgYnVncyAocmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGRlYWRsb2NrcyksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKVGhlcmVmb3JlLCBteSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZnVuY3Rpb24uIFRoaXMgaXMgYmVjYXVzZSBpdCBpcyB0aGUgbWFpbiBmdW5jdGlvbiBhZGRlZCBieSB0aGUgcGF0Y2ggYW5kIGl0JiMzOTtzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZXhwb3J0ZWQgc3ltYm9sLCBldmVuIGlmIGl0IGlzIGEgaG90IHBhdGguCgpOb3csIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBnb2luZyB0byBzZXQgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGFuZCBgS0FMTFNZTVNgLiBgS0FMTFNZTVNgIHVzdWFsbHkgaXMgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBpbmNsdWRlIGl0LgoKV29ydGhGdXp6aW5nPXRydWUKRm9jdXNTeW1ib2xzID0gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAKRW5hYmxlQ29uZmlncyA9IGBORVRfREVWX1JFRkNOVF9UUkFDS0VSYCwgYEtBTExTWU1TYAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWX1JFRkNOVF9UUkFDS0VSJiMzNDssCiAgICAmIzM0O0tBTExTWU1TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVl9SRUZDTlRfVFJBQ0tFUiYjMzQ7LAogICAgJiMzNDtLQUxMU1lNUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMjE0NCw2ICYjNDM7MjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7CiAgKgogICoJRklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mbwogICoJbW92ZXMgb3V0LgomIzQzOyAqCiYjNDM7ICoJQG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLgogICovCiAKIHN0cnVjdCBuZXRfZGV2aWNlIHsKQEAgLTIzMDAsNiAmIzQzOzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSkKIAljb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wczsKICNlbmRpZgomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCW5ldGRldl90cmFjZV9idWZmZXJfbGlzdDsKJiM0MzsjZW5kaWYKIAogCXVuc2lnbmVkIGludAkJb3BlcnN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCWxpbmtfbW9kZTsKQEAgLTMyNTAsNiAmIzQzOzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQgewogCU5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCwKIAlORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLAogCU5FVERFVl9YRFBfRkVBVF9DSEFOR0UsCiYjNDM7CU5FVERFVl9ERUJVR19VTlJFR0lTVEVSLAogfTsKIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKTsKIApAQCAtNDQ2Niw5ICYjNDM7NDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mzt2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmIChkZXYpIHsKJiM0MzsJCXNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJCXRoaXNfY3B1X2RlYygqZGV2LSZndDtwY3B1X3JlZmNudCk7CiAjZWxzZQpAQCAtNDQ4MCw2ICYjNDM7NDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldikgewomIzQzOwkJc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7CiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVAogCQl0aGlzX2NwdV9pbmMoKmRldi0mZ3Q7cGNwdV9yZWZjbnQpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNTc2LDYgJiM0Mzs1NzYsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGxvY2tkZXBfc29mdGlycV9zdGFydCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH0KICNlbmRpZgogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTsKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCkKIHsKIAl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgJiM0MzsgTUFYX1NPRlRJUlFfVElNRTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0zMjAzLDYgJiM0MzszMjAzLDEwIEBAIHN0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzOyNlbmRpZgomIzQzOwogLyoqCiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29yawogICogQHdvcmtlcjogc2VsZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTg3NSw2ICYjNDM7MTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKQogCU4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpCiAJTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpCiAJTihYRFBfRkVBVF9DSEFOR0UpCiYjNDM7CU4oREVCVUdfVU5SRUdJU1RFUikKIAl9CiAjdW5kZWYgTgogCXJldHVybiAmIzM0O1VOS05PV05fTkVUREVWX0VWRU5UJiMzNDs7CkBAIC0xMTU4Miw2ICYjNDM7MTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpOwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwomIzQzO3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQomIzQzOyNlbmRpZgomIzQzOwogaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7CiAKICNkZWZpbmUgV0FJVF9SRUZTX01JTl9NU0VDUyAxCkBAIC0xMTY1NSwxMSAmIzQzOzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgJiM0MzsKIAkJCSAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkgewomIzQzOwkJCXJ0bmxfbG9jaygpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkgewogCQkJCXByX2VtZXJnKCYjMzQ7dW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXG4mIzM0OywKIAkJCQkJIGRldi0mZ3Q7bmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOwogCQkJCXJlZl90cmFja2VyX2Rpcl9wcmludCgmYW1wO2Rldi0mZ3Q7cmVmY250X3RyYWNrZXIsIDEwKTsKJiM0MzsJCQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpOwomIzQzOwkJCQlkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTsKIAkJCX0KJiM0MzsJCQlfX3J0bmxfdW5sb2NrKCk7CiYjNDM7CQkJcmN1X2JhcnJpZXIoKTsKIAogCQkJd2FybmluZ190aW1lID0gamlmZmllczsKIAkJfQpAQCAtMTIwNTksNiAmIzQzOzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogCiAJZGV2LSZndDtwcml2X2xlbiA9IHNpemVvZl9wcml2OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOyNlbmRpZgogCXJlZl90cmFja2VyX2Rpcl9pbml0KCZhbXA7ZGV2LSZndDtyZWZjbnRfdHJhY2tlciwgMTI4LCAmIzM0O25ldGRldiYjMzQ7KTsKICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UCiAJZGV2LSZndDtwY3B1X3JlZmNudCA9IGFsbG9jX3BlcmNwdShpbnQpOwpAQCAtMTIxNTgsNiAmIzQzOzEyMTc1LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLAogZnJlZV9wY3B1OgogI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlQKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKJiM0MzsJZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpOwogZnJlZV9kZXY6CiAjZW5kaWYKIAlrdmZyZWUoZGV2KTsKQEAgLTEyMjI2LDYgJiM0MzsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlmcmVlX3BlcmNwdShkZXYtJmd0O3BjcHVfcmVmY250KTsKIAlkZXYtJmd0O3BjcHVfcmVmY250ID0gTlVMTDsKICNlbmRpZgomIzQzOwllcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7CiYjNDM7CiAJZnJlZV9wZXJjcHUoZGV2LSZndDtjb3JlX3N0YXRzKTsKIAlkZXYtJmd0O2NvcmVfc3RhdHMgPSBOVUxMOwogCWZyZWVfcGVyY3B1KGRldi0mZ3Q7eGRwX2J1bGtxKTsKQEAgLTEzMjI5LDYgJiM0MzsxMzI0OSwxMiBAQCBzdGF0aWMgc3RydWN0IHNtcF9ob3RwbHVnX3RocmVhZCBiYWNrbG9nX3RocmVhZHMgPSB7CiAJLnNldHVwCQkJPSBiYWNrbG9nX25hcGlfc2V0dXAsCiB9OwogCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCkgeyB9OwomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZAogICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuCkBAIC0xMzIzNyw2ICYjNDM7MTMyNjMsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmMgPSAtRU5PTUVNOwogCiYjNDM7CW5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpOwogCUJVR19PTighZGV2X2Jvb3RfcGhhc2UpOwogCiAJbmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTsKQEAgLTEzMzQwLDMgJiM0MzsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpCiB9CiAKIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzOwomIzQzOyNkZWZpbmUgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFIDMyNzY4CiYjNDM7c3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwomIzQzOwlhdG9taWNfdCBjb3VudDsKJiM0MzsJaW50IG5yX2VudHJpZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07CiYjNDM7fSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07CiYjNDM7c3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzO3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7CiYjNDM7c3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkmIzQzOyYjNDM7KQomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO25ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7cHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpCiYjNDM7ewomIzQzOwljaGFyIGJ1ZmZlclszMl0gPSB7IH07CiYjNDM7CWNoYXIgKmNwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKJiM0MzsJCWNwID0gc3RyY2hyKGJ1ZmZlciwgJiMzOTsgJiMzOTspOwomIzQzOwkJaWYgKGNwKQomIzQzOwkJCSpjcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCWlmIChidWZmZXJbMF0gPT0gJiMzOTtwJiMzOTspIHsKJiM0MzsJCQlpZiAoIXN0cmNtcChidWZmZXIsICYjMzQ7cHJvY2Vzc19vbmVfd29yayYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7ayYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2tzeXNfdW5zaGFyZSYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICYjMzk7cyYjMzk7KSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O3NvY2tfc2VuZG1zZ19ub3NlYyYjMzQ7KSB8fAomIzQzOwkJCSAgICAhc3RyY21wKGJ1ZmZlciwgJiMzNDtzb2NrX3JlY3Ztc2dfbm9zZWMmIzM0OykpCiYjNDM7CQkJCXJldHVybiBpICYjNDM7IDE7CiYjNDM7CQl9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAmIzM5O18mIzM5OykgewomIzQzOwkJCWlmICghc3RyY21wKGJ1ZmZlciwgJiMzNDtfX3N5c19iaW5kJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc29ja19yZWxlYXNlJiMzNDspIHx8CiYjNDM7CQkJICAgICFzdHJjbXAoYnVmZmVyLCAmIzM0O19fc3lzX2JwZiYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAmIzM0O2RvX3NvY2tfc2V0c29ja29wdCYjMzQ7KSkKJiM0MzsJCQkJcmV0dXJuIGkgJiM0MzsgMTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gbnJfZW50cmllczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wOwomIzQzOwlpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwOwomIzQzOwomIzQzOwkvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJcHRyLSZndDtucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMpOwomIzQzOwl9CiYjNDM7CS8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCS8qIFNraXAgZW1wdHkgZW50cmllcy4gKi8KJiM0MzsJCWlmICghYXRvbWljX3JlYWQoJmFtcDtwdHItJmd0O2NvdW50KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcCwgJmFtcDtwdHItJmd0O2xpc3QsIGxpc3QsCiYjNDM7CQkJCQkvKiBsaXN0IGVsZW1lbnRzIGNhbiYjMzk7dCBnbyBhd2F5LiAqLyAxKSB7CiYjNDM7CQkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyAhPSB0bXAtJmd0O25yX2VudHJpZXMgfHwKJiM0MzsJCQkgICAgbWVtY21wKHB0ci0mZ3Q7ZW50cmllcywgdG1wLSZndDtlbnRyaWVzLAomIzQzOwkJCQkgICBwdHItJmd0O25yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsJCQkvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovCiYjNDM7CQkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJCWlmICghY291bnQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCS8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovCiYjNDM7CQkJYXRvbWljX2FkZChjb3VudCwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlhdG9taWNfc3ViKGNvdW50LCAmYW1wO3RtcC0mZ3Q7Y291bnQpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIFJlcG9ydCBhbGwgZW50cmllcyBmb3IgdGhpcyBkZXZpY2UuICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmFtcDtkZXYtJmd0O25ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCwKJiM0MzsJCQkJLyogbGlzdCBlbGVtZW50cyBjYW4mIzM5O3QgZ28gYXdheS4gKi8gMSkgewomIzQzOwkJLyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqLwomIzQzOwkJY291bnQgPSBhdG9taWNfcmVhZCgmYW1wO3B0ci0mZ3Q7Y291bnQpOwomIzQzOwkJaWYgKCFjb3VudCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCS8qIFJlcG9ydCB0aGlzIGVudHJ5LiBJdCBpcyBzYWZlIHRvIGNhbGwgY29uZF9yZXNjaGVkKCkgYmVjYXVzZQomIzQzOwkJICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LgomIzQzOwkJICovCiYjNDM7CQlwb3MmIzQzOyYjNDM7OwomIzQzOwkJYmFsYW5jZSAmIzQzOz0gY291bnQ7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7Q2FsbCB0cmFjZSBmb3IgJXNbJWRdICUmIzQzO2QgYXRcbiYjMzQ7LCBkZXYtJmd0O25hbWUsIHBvcywgY291bnQpOwomIzQzOwkJc3RhY2tfdHJhY2VfcHJpbnQocHRyLSZndDtlbnRyaWVzLCBwdHItJmd0O25yX2VudHJpZXMsIDQpOwomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KJiM0MzsJaWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZCkKJiM0MzsJCXByX2luZm8oJiMzNDtiYWxhbmNlIGFzIG9mICVzWyVkXSBpcyAlZFxuJiMzNDssIGRldi0mZ3Q7bmFtZSwgcG9zLCBiYWxhbmNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LSZndDtwY3B1X3JlZmNudCkgd2FzIGFscmVhZHkKJiM0MzsJICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuCiYjNDM7CSAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhbgomIzQzOwkgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CXdoaWxlICghbGlzdF9lbXB0eSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KSkgewomIzQzOwkJcHRyID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO2Rldi0mZ3Q7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJbGlzdF9hZGRfdGFpbCgmYW1wO3B0ci0mZ3Q7bGlzdCwgJmFtcDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci0mZ3Q7ZW50cmllcyldOwomIzQzOwlpbnQgbnJfZW50cmllczsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJLyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovCiYjNDM7CWlmIChpbl9ubWkoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJLyogR2V0IHN0YWNrIHRyYWNlcy4gKi8KJiM0MzsJbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpLCAxKTsKJiM0MzsJLyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvcgomIzQzOwkgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24mIzM5O3QgdHJpbSB0cmFjZXMKJiM0MzsJICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLgomIzQzOwkgKgomIzQzOwkgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC4KJiM0MzsJICovCiYjNDM7CWlmIChpbl9zb2Z0aXJxKCkpIHsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJaWYgKGVudHJpZXNbaV0gJmd0Oz0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgZW50cmllc1tpXSAmbHQ7IGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHsKJiM0MzsJCQkJbnJfZW50cmllcyA9IGkgJiM0MzsgMTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CS8qIENvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIGF0IGJlc3QtZWZmb3J0IGJhc2lzLiBTaW5jZSBkdXBsaWNhdGVkIGVudHJpZXMKJiM0MzsJICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJiMzOTt0IHVzZSBsb2NrIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsCiYjNDM7CQkJCS8qIGxpc3QgZWxlbWVudHMgY2FuJiMzOTt0IGdvIGF3YXkuICovIDEpIHsKJiM0MzsJCWlmIChwdHItJmd0O25yX2VudHJpZXMgPT0gbnJfZW50cmllcyAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CiYjNDM7CQkJYXRvbWljX2FkZChkZWx0YSwgJmFtcDtwdHItJmd0O2NvdW50KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJLyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24mIzM5O3QgcmUtY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgd2l0aCBsb2NrIGhlbGQsIGZvcgomIzQzOwkgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy4KJiM0MzsJICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlcgomIzQzOwkgKiByYXcgc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgomIzQzOwkgKi8KJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO25ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHsKJiM0MzsJCS8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovCiYjNDM7CQlwdHIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpOwomIzQzOwkJbGlzdF9kZWwoJmFtcDtwdHItJmd0O2xpc3QpOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3B0ci0mZ3Q7Y291bnQsIGRlbHRhKTsKJiM0MzsJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CiYjNDM7CQltZW1tb3ZlKHB0ci0mZ3Q7ZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiYjNDM7CQkvKiBBcHBlbmQgaXQgaW4gUkNVIG1hbm5lciwgZm9yIHJlYWRlcnMgYXJlIGxvY2tsZXNzLiAqLwomIzQzOwkJbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtwdHItJmd0O2xpc3QsICZhbXA7ZGV2LSZndDtuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlOwomIzQzOwl9CiYjNDM7CXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTsKJiM0MzsKJiM0MztzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgewomIzQzOwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXAKJiM0MzsgKiBrYWxsc3ltcyBldmVyeSB0aW1lLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTsKJiM0MzsJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwomIzQzOwljaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9OwomIzQzOwl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTsKJiM0MzsJY2hhciAqY3A7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTsKJiM0MzsJCWlmIChzdHJuY21wKGJ1ZmZlciwgJiMzNDtoYW5kbGVfc29mdGlycXMmIzM0OywgMTUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJY3AgPSBzdHJjaHIoYnVmZmVyLCAmIzM5OyYjNDM7JiMzOTspOwomIzQzOwkJaWYgKCFjcCB8fCBzc2NhbmYoY3AsICYjMzQ7JiM0MzslbHgvJWx4JiMzNDssICZhbXA7b2Zmc2V0LCAmYW1wO3NpemUpICE9IDIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0OwomIzQzOwkJZW5kX29mX2hhbmRsZV9zb2Z0aXJxcyA9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyAmIzQzOyBzaXplOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY29tcGxldGUoJmFtcDtjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLSZndDtjb21wbGV0aW9uKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjOwomIzQzOwomIzQzOwl0aW1lcl9zZXR1cF9vbl9zdGFjaygmYW1wO3RjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDt0Yy5jb21wbGV0aW9uKTsKJiM0MzsJLyogU2NoZWR1bGUgYSBjYWxsIHRvIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpLiAqLwomIzQzOwltb2RfdGltZXIoJmFtcDt0Yy50aW1lciwgamlmZmllcyk7CiYjNDM7CS8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGJlIGNhbGxlZC4gKi8KJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO3RjLmNvbXBsZXRpb24pOwomIzQzOwkvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi8KJiM0MzsJdGltZXJfZGVsZXRlX3N5bmMoJmFtcDt0Yy50aW1lcik7CiYjNDM7CXRpbWVyX2Rlc3Ryb3lfb25fc3RhY2soJmFtcDt0Yy50aW1lcik7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jCmluZGV4IDhhODFjNTQzMDcwNTMuLmMxYTQ0NTk0YzQ5MjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmMKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCwKIAljYXNlIE5FVERFVl9ET1dOOgogCWNhc2UgTkVUREVWX1JFQk9PVDoKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgomIzQzOwljYXNlIE5FVERFVl9ERUJVR19VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgogCWNhc2UgTkVUREVWX1BSRV9DSEFOR0VBRERSOgpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTY5OCw3ICYjNDM7Njk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCkKIH0KIEVYUE9SVF9TWU1CT0woc29ja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7c3RhdGljCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpICZhbXA7JmFtcDsgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpCiYjNDM7bm9pbmxpbmUKJiM0MzsjZW5kaWYKJiM0Mzt2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJY29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyk7CiAKQEAgLTc3MCw3ICYjNDM7Nzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsCiAJdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzaywgcmV0LCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc29ja19zZW5kbXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZykKJiM0MztzdGF0aWMKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19LQUxMU1lNUykKJiM0Mztub2lubGluZQomIzQzOyNlbHNlCiYjNDM7aW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpCiB7CiAJaW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7c2VuZG1zZywgaW5ldDZfc2VuZG1zZywKIAkJCQkgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLApAQCAtMTEyMCw4ICYjNDM7MTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZgogCXRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkJCSAgICAgaW50IGZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2Vsc2UKJiM0MztpbmxpbmUKJiM0MzsjZW5kaWYKJiM0MztpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQogewogCWludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O3JlY3Ztc2csCiAJCQkJICAgICBpbmV0Nl9yZWN2bXNnLApAQCAtMjYyNCw5ICYjNDM7MjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLAogCXJldHVybiBlcnIgJmx0OyAwID8gZXJyIDogMDsKIH0KIAotc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywKLQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLAotCQkJICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKQomIzQzO3N0YXRpYwomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQomIzQzO25vaW5saW5lCiYjNDM7I2VuZGlmCiYjNDM7aW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpCiB7CiAJdW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSAmIzQzOyAyMF0KIAkJCQlfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyNAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAxMTc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRfRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIGRlc2lnbmVkIHRvIGRlYnVnIGBuZXRfZGV2aWNlYCByZWZjb3VudCBsZWFrcy4gSXQgdXNlcyBgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGFuZCBlc3NlbnRpYWxseSB0cmFja3MgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCBjYWxscyBieSBzYXZpbmcgc3RhY2sgdHJhY2VzIGludG8gYSBgbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIFRoaXMgYnVmZmVyIGdldHMgZHVtcGVkIGlmIHRoZSBuZXRfZGV2aWNlIGhhbmdzIHdoaWxlIHVucmVnaXN0ZXJlZCwgYW5kIGEgbmV3IGBORVRERVZfREVCVUdfVU5SRUdJU1RFUmAgY29tbWFuZCBpcyBhZGRlZC4gU29tZSBmdW5jdGlvbnMgaGF2ZSBhbHNvIGJlZW4gbWFya2VkIGBub2lubGluZWAgZm9yIGJldHRlciBzdGFjayB0cmFjZSByZWFkYWJpbGl0eS4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgY3JpdGljYWwgc2VjdGlvbnMuCgpGaXJzdCwgdGhlIHRyYWNlIGJ1ZmZlcjogaXQmIzM5O3MgYSBzdGF0aWMgYnVmZmVyLCBkZWNsYXJlZCBhczoKCmBgYGMKI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjgKc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHsKCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKCWF0b21pY190IGNvdW50OwoJaW50IG5yX2VudHJpZXM7Cgl1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdOwp9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTsKYGBgCgpCZWluZyBzdGF0aWMsIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnQuCgpUaGUgYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZnVuY3Rpb24gc2F2ZXMgdGhlIHN0YWNrIHRyYWNlcy4gSW5zaWRlLCB3ZSBzZWU6CgpgYGBjCgl1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItJmd0O2VudHJpZXMpXTsKCWludCBucl9lbnRyaWVzOwouLi4KCW5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUocHRyLSZndDtlbnRyaWVzKSwgMSk7CmBgYAoKVGhlIGNydWNpYWwgcGFydCBpcyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBgZW50cmllc2AgYXJyYXkuICBgc3RhY2tfdHJhY2Vfc2F2ZWAgcmV0dXJucyBgbnJfZW50cmllc2AsIHdoaWNoIGlzIGhvdyBtYW55IGVudHJpZXMgd2VyZSBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBgZW50cmllc2AgYXJyYXkuICBUaGVuLCB0aGVyZSYjMzk7cyBhIGNvbXBhcmlzb246CgpgYGBjCgkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyA9PSBucl9lbnRyaWVzICZhbXA7JmFtcDsKCQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CmBgYAoKVGhpcyBpcyAqc2FmZSouIGBtZW1jbXBgIG9ubHkgY29tcGFyZXMgdXAgdG8gdGhlIGluaXRpYWxpemVkIGBucl9lbnRyaWVzYC4gVGhlIGNvZGUgaXMgY2FyZWZ1bC4gIFNpbWlsYXJseSwgd2hlbiBjb3B5aW5nOgoKYGBgYwoJCXB0ci0mZ3Q7bnJfZW50cmllcyA9IG5yX2VudHJpZXM7CgkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwpgYGAKClRoZSBgbWVtbW92ZWAgYWxzbyBvbmx5IGNvcGllcyB0aGUgaW5pdGlhbGl6ZWQgcGFydC4gIFRoaXMgaXMgYWxsIGludGVybmFsIGtlcm5lbCBzdGF0ZTsgbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgc3RhY2tfdHJhY2Vfc2F2ZWAgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgYGVudHJpZXNgIGFycmF5IHVwIHRvIGBucl9lbnRyaWVzYC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2suIFRoZSBjb2RlIGFsc28gdXNlcyBgc25wcmludGZgIGluIHRoZSBgdHJpbV9uZXRkZXZfdHJhY2VgIGZ1bmN0aW9uOgoKYGBgYwoJY2hhciBidWZmZXJbMzJdID0geyB9OwouLi4KCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgJiMzNDslcHMmIzM0OywgKHZvaWQgKillbnRyaWVzW2ldKTsKYGBgCgpUaGlzIGlzIGFsc28gc2FmZS4gYHNucHJpbnRmYCB3b3JrcyBqdXN0IGZpbmUgb24gaW5kaXZpZHVhbCBlbnRyaWVzLgoKU28sIGluIHN1bW1hcnk6IHRoaXMgcGF0Y2ggaXMgKnB1cmVseSogZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gTm8gYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBhcmUgbW9kaWZpZWQgaW4gYSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgYW55IHZ1bG5lcmFiaWxpdGllcy4KClRoZXJlZm9yZSwgTmVlZHNLTVNBTiBzaG91bGQgYmUgKmZhbHNlKi4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZW50cmllc2AgYXJyYXkgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcG9wdWxhdGVkIGJ5IGBzdGFja190cmFjZV9zYXZlYCwgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd3JpdHRlbiwgYG5yX2VudHJpZXNgLiBUaGUgcmVzdCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZCwgYnV0IHRoZSBjb2RlIG9ubHkgdXNlcyBgbnJfZW50cmllc2AgdG8gaW5kZXggYW5kIHJlYWQ6CgpgYGBjCgkJaWYgKHB0ci0mZ3Q7bnJfZW50cmllcyA9PSBucl9lbnRyaWVzICZhbXA7JmFtcDsKCQkgICAgIW1lbWNtcChwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7CmBgYAoKYW5kCgpgYGBjCgkJbWVtbW92ZShwdHItJmd0O2VudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwpgYGAKClNvLCBpdCAqb25seSogcmVhZHMgdGhlIGluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSBhcnJheXMuCgpGaW5hbGx5LCB0aGUgYG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuY2A6CgpgYGBjCgl1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdOwoJaW50IG5yX2VudHJpZXMgPSBzdGFja190cmFjZV9zYXZlKGVudHJpZXMsIEFSUkFZX1NJWkUoZW50cmllcyksIDEpOwoJY2hhciBidWZmZXJbS1NZTV9TWU1CT0xfTEVOXSA9IHsgfTsKLi4uCglmb3IgKGkgPSAwOyBpICZsdDsgbnJfZW50cmllczsgaSYjNDM7JiM0MzspIHsKCQlzcHJpbnRfc3ltYm9sKGJ1ZmZlciwgZW50cmllc1tpXSk7CmBgYAoKQWdhaW4sIHRoZSBjb2RlIG9ubHkgcmVhZHMgdXAgdG8gYG5yCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS4xMDQ0NTA3OTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc3NjU2MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTk6NTkuMTA0NDU4NTg2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njk3NTMyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NWI3ZDEwZTZhMjk5MjI5YTI3ZmNiM2E4ODhhY2FmNDdjODdhMDkwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjE5OjU3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggODg0MGIxMjY5NzlmZi4uMTJkYzJjMWRjMDMxNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC0yMTQ0LDYgKzIxNDQsOCBAQCBlbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbiAgKlxcbiAgKlxcdEZJWE1FOiBjbGVhbnVwIHN0cnVjdCBuZXRfZGV2aWNlIHN1Y2ggdGhhdCBuZXR3b3JrIHByb3RvY29sIGluZm9cXG4gICpcXHRtb3ZlcyBvdXQuXFxuKyAqXFxuKyAqXFx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxcbiAgKi9cXG4gXFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcXG5AQCAtMjMwMCw2ICsyMzAyLDkgQEAgc3RydWN0IG5ldF9kZXZpY2Uge1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcXG4gXFx0Y29uc3Qgc3RydWN0IHRsc2Rldl9vcHMgKnRsc2Rldl9vcHM7XFxuICNlbmRpZlxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWRcXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XFxuKyNlbmRpZlxcbiBcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0b3BlcnN0YXRlO1xcbiBcXHR1bnNpZ25lZCBjaGFyXFx0XFx0bGlua19tb2RlO1xcbkBAIC0zMjUwLDYgKzMyNTUsNyBAQCBlbnVtIG5ldGRldl9jbWQge1xcbiBcXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXFxuIFxcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEsXFxuIFxcdE5FVERFVl9YRFBfRkVBVF9DSEFOR0UsXFxuK1xcdE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLFxcbiB9O1xcbiBjb25zdCBjaGFyICpuZXRkZXZfY21kX3RvX25hbWUoZW51bSBuZXRkZXZfY21kIGNtZCk7XFxuIFxcbkBAIC00NDY2LDkgKzQ0NzIsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGRldl9uaXRfYWN0aXZlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSB2b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpIHsgfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRpZiAoZGV2KSB7XFxuK1xcdFxcdHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYsIC0xKTtcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0XFx0dGhpc19jcHVfZGVjKCpkZXYtXFx1MDAzZXBjcHVfcmVmY250KTtcXG4gI2Vsc2VcXG5AQCAtNDQ4MCw2ICs0NDkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGlmIChkZXYpIHtcXG4rXFx0XFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XFxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXFxuIFxcdFxcdHRoaXNfY3B1X2luYygqZGV2LVxcdTAwM2VwY3B1X3JlZmNudCk7XFxuICNlbHNlXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jXFxuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXFxuKysrIGIva2VybmVsL3NvZnRpcnEuY1xcbkBAIC01NzYsNiArNTc2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cXG4gI2VuZGlmXFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuY1xcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXFxuKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jXFxuQEAgLTMyMDMsNiArMzIwMywxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIHByb2Nlc3Nfb25lX3dvcmsoc3RydWN0IHdvcmtlciAqd29ya2VyLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbisjZW5kaWZcXG4rXFxuIC8qKlxcbiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29ya1xcbiAgKiBAd29ya2VyOiBzZWxmXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTg3NSw2ICsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXFxuIFxcdE4oUFJFX0NIQU5HRUFERFIpIE4oT0ZGTE9BRF9YU1RBVFNfRU5BQkxFKSBOKE9GRkxPQURfWFNUQVRTX0RJU0FCTEUpXFxuIFxcdE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQpIE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBKVxcbiBcXHROKFhEUF9GRUFUX0NIQU5HRSlcXG4rXFx0TihERUJVR19VTlJFR0lTVEVSKVxcbiBcXHR9XFxuICN1bmRlZiBOXFxuIFxcdHJldHVybiBcXFwiVU5LTk9XTl9ORVRERVZfRVZFTlRcXFwiO1xcbkBAIC0xMTU4Miw2ICsxMTU4MywxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbiBcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfVxcbisjZW5kaWZcXG4rXFxuIGludCBuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MgX19yZWFkX21vc3RseSA9IDEwO1xcbiBcXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcXG5AQCAtMTE2NTUsMTEgKzExNjY0LDE2IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2X3dhaXRfYWxscmVmc19hbnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4gXFxuIFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHdhcm5pbmdfdGltZSArXFxuIFxcdFxcdFxcdCAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkge1xcbitcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xcbiBcXHRcXHRcXHRcXHRwcl9lbWVyZyhcXFwidW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgZGV2LVxcdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XFxuIFxcdFxcdFxcdFxcdHJlZl90cmFja2VyX2Rpcl9wcmludChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgMTApO1xcbitcXHRcXHRcXHRcXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XFxuK1xcdFxcdFxcdFxcdGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdF9fcnRubF91bmxvY2soKTtcXG4rXFx0XFx0XFx0cmN1X2JhcnJpZXIoKTtcXG4gXFxuIFxcdFxcdFxcdHdhcm5pbmdfdGltZSA9IGppZmZpZXM7XFxuIFxcdFxcdH1cXG5AQCAtMTIwNTksNiArMTIwNzMsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIFxcbiBcXHRkZXYtXFx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XFxuIFxcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuKyNlbmRpZlxcbiBcXHRyZWZfdHJhY2tlcl9kaXJfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcXFwibmV0ZGV2XFxcIik7XFxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXFxuIFxcdGRldi1cXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcXG5AQCAtMTIxNTgsNiArMTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIGZyZWVfcGNwdTpcXG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcXG4gXFx0ZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCk7XFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4gZnJlZV9kZXY6XFxuICNlbmRpZlxcbiBcXHRrdmZyZWUoZGV2KTtcXG5AQCAtMTIyMjYsNiArMTIyNDQsOCBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlcGNwdV9yZWZjbnQpO1xcbiBcXHRkZXYtXFx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcXG4gI2VuZGlmXFxuK1xcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcXG4rXFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNlY29yZV9zdGF0cyk7XFxuIFxcdGRldi1cXHUwMDNlY29yZV9zdGF0cyA9IE5VTEw7XFxuIFxcdGZyZWVfcGVyY3B1KGRldi1cXHUwMDNleGRwX2J1bGtxKTtcXG5AQCAtMTMyMjksNiArMTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xcbiBcXHQuc2V0dXBcXHRcXHRcXHQ9IGJhY2tsb2dfbmFwaV9zZXR1cCxcXG4gfTtcXG4gXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XFxuKyNlbmRpZlxcbitcXG4gLypcXG4gICogICAgICAgVGhpcyBpcyBjYWxsZWQgc2luZ2xlIHRocmVhZGVkIGR1cmluZyBib290LCBzbyBubyBuZWVkXFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxcbkBAIC0xMzIzNyw2ICsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBpLCByYyA9IC1FTk9NRU07XFxuIFxcbitcXHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcXG4gXFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XFxuIFxcbiBcXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xcbkBAIC0xMzM0MCwzICsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXFxuIH1cXG4gXFxuIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xcbitcXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbitcXG4rI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcXG4rc3RhdGljIHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRhdG9taWNfdCBjb3VudDtcXG4rXFx0aW50IG5yX2VudHJpZXM7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XFxuK30gbmV0ZGV2X3RyYWNlX2J1ZmZlcltORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkVdO1xcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XFxuK3N0YXRpYyBib29sIG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkO1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4rXFxuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJbaV0ubGlzdCwgXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcXG4rXFxuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXFxuK3tcXG4rXFx0Y2hhciBidWZmZXJbMzJdID0geyB9O1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCBcXFwiJXBzXFxcIiwgKHZvaWQgKillbnRyaWVzW2ldKTtcXG4rXFx0XFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xcbitcXHRcXHRpZiAoY3ApXFxuK1xcdFxcdFxcdCpjcCA9ICdcXFxcMCc7XFxuK1xcdFxcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcInByb2Nlc3Nfb25lX3dvcmtcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcXG4rXFx0XFx0XFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcXFwia3N5c191bnNoYXJlXFxcIikpXFxuK1xcdFxcdFxcdFxcdHJldHVybiBpICsgMTtcXG4rXFx0XFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ3MnKSB7XFxuK1xcdFxcdFxcdGlmICghc3RyY21wKGJ1ZmZlciwgXFxcInNvY2tfc2VuZG1zZ19ub3NlY1xcXCIpIHx8XFxuK1xcdFxcdFxcdCAgICAhc3RyY21wKGJ1ZmZlciwgXFxcInNvY2tfcmVjdm1zZ19ub3NlY1xcXCIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaSArIDE7XFxuK1xcdFxcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdfJykge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJfX3N5c19iaW5kXFxcIikgfHxcXG4rXFx0XFx0XFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcXFwiX19zb2NrX3JlbGVhc2VcXFwiKSB8fFxcbitcXHRcXHRcXHQgICAgIXN0cmNtcChidWZmZXIsIFxcXCJfX3N5c19icGZcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpZiAoIXN0cmNtcChidWZmZXIsIFxcXCJkb19zb2NrX3NldHNvY2tvcHRcXFwiKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGkgKyAxO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0cmV0dXJuIG5yX2VudHJpZXM7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XFxuK1xcdGludCBjb3VudCwgYmFsYW5jZSA9IDAsIHBvcyA9IDA7XFxuK1xcbitcXHQvKiBUcmltIGNvbW1vbiB0cmFjZXMuICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxcbitcXHRcXHRcXHRcXHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcXG4rXFx0XFx0cHRyLVxcdTAwM2Vucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVxcdTAwM2VlbnRyaWVzLCBwdHItXFx1MDAzZW5yX2VudHJpZXMpO1xcbitcXHR9XFxuK1xcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cXG4rXFx0XFx0aWYgKCFhdG9taWNfcmVhZChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHRcXHRpZiAocHRyLVxcdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cXHUwMDNlbnJfZW50cmllcyB8fFxcbitcXHRcXHRcXHQgICAgbWVtY21wKHB0ci1cXHUwMDNlZW50cmllcywgdG1wLVxcdTAwM2VlbnRyaWVzLFxcbitcXHRcXHRcXHRcXHQgICBwdHItXFx1MDAzZW5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0LyogU2tpcCBlbXB0eSBlbnRyaWVzLiAqL1xcbitcXHRcXHRcXHRjb3VudCA9IGF0b21pY19yZWFkKFxcdTAwMjZ0bXAtXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0aWYgKCFjb3VudClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXFxuK1xcdFxcdFxcdGF0b21pY19hZGQoY291bnQsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0YXRvbWljX3N1Yihjb3VudCwgXFx1MDAyNnRtcC1cXHUwMDNlY291bnQpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXFxuK1xcdFxcdFxcdFxcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xcbitcXHRcXHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXFxuK1xcdFxcdGNvdW50ID0gYXRvbWljX3JlYWQoXFx1MDAyNnB0ci1cXHUwMDNlY291bnQpO1xcbitcXHRcXHRpZiAoIWNvdW50KVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXFxuK1xcdFxcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBvcysrO1xcbitcXHRcXHRiYWxhbmNlICs9IGNvdW50O1xcbitcXHRcXHRwcl9pbmZvKFxcXCJDYWxsIHRyYWNlIGZvciAlc1slZF0gJStkIGF0XFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgY291bnQpO1xcbitcXHRcXHRzdGFja190cmFjZV9wcmludChwdHItXFx1MDAzZWVudHJpZXMsIHB0ci1cXHUwMDNlbnJfZW50cmllcywgNCk7XFxuK1xcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXHR9XFxuK1xcdGlmICghbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQpXFxuK1xcdFxcdHByX2luZm8oXFxcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0LyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgZnJlZV9wZXJjcHUoZGV2LVxcdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcXG4rXFx0ICogY2FsbGVkLCB3aGljaCBtZWFucyB0aGF0IG5vIG1vcmUgX19kZXZfcHV0KCkvX19kZXZfaG9sZCgpIGNhbGwgY2FuIGJlIG1hZGUuXFxuK1xcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxcbitcXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxcbitcXHQgKi9cXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xcbitcXHR9XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcXG4rfVxcbitcXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZW50cmllc1tBUlJBWV9TSVpFKHB0ci1cXHUwMDNlZW50cmllcyldO1xcbitcXHRpbnQgbnJfZW50cmllcztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xcbitcXHRpZiAoaW5fbm1pKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogR2V0IHN0YWNrIHRyYWNlcy4gKi9cXG4rXFx0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXFx1MDAzZWVudHJpZXMpLCAxKTtcXG4rXFx0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxcbitcXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xcbitcXHQgKiBvZiBwcm9jZXNzIGNvbnRleHQgd2hlbiB0cnlpbmcgdG8gY29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMuXFxuK1xcdCAqXFxuK1xcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxcbitcXHQgKi9cXG4rXFx0aWYgKGluX3NvZnRpcnEoKSkge1xcbitcXHRcXHRpbnQgaTtcXG4rXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKGVudHJpZXNbaV0gXFx1MDAzZT0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBlbnRyaWVzW2ldIFxcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xcbitcXHRcXHRcXHRcXHRucl9lbnRyaWVzID0gaSArIDE7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXFxuK1xcdCAqIGNyZWF0ZWQgYnkgcmFjZSBjb25kaXRpb24gd2lsbCBiZSBtZXJnZWQgd2hlbiByZXBvcnRpbmcsIHdlIGRvbid0IHVzZSBsb2NrIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcXG4rXFx0XFx0XFx0XFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XFxuK1xcdFxcdGlmIChwdHItXFx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW1lbWNtcChwdHItXFx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpKSB7XFxuK1xcdFxcdFxcdGF0b21pY19hZGQoZGVsdGEsIFxcdTAwMjZwdHItXFx1MDAzZWNvdW50KTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXFxuK1xcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxcbitcXHQgKiBCdXQgd2UgdXNlIHJhdyBzcGlubG9jayBoZXJlIGluIGNhc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzb21lIG90aGVyXFxuK1xcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXFxuK1xcdCAqL1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcXG4rXFx0XFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cXG4rXFx0XFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2cHRyLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHRyLVxcdTAwM2Vjb3VudCwgZGVsdGEpO1xcbitcXHRcXHRwdHItXFx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xcbitcXHRcXHRtZW1tb3ZlKHB0ci1cXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XFxuK1xcdFxcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXFxuK1xcdFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwdHItXFx1MDAzZWxpc3QsIFxcdTAwMjZkZXYtXFx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTChzYXZlX25ldGRldl90cmFjZV9idWZmZXIpO1xcbitcXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcXG4rXFx0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XFxuK1xcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247XFxuK307XFxuK1xcbisvKiBSZXNvbHZlIGFkZHJlc3Mgb2YgaGFuZGxlX3NvZnRpcnFzKCkgYW5kIGNhY2hlIGl0LCBpbiBvcmRlciB0byBhdm9pZCBsb29raW5nIHVwXFxuKyAqIGthbGxzeW1zIGV2ZXJ5IHRpbWUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcilcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xcbitcXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XFxuK1xcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplO1xcbitcXHRjaGFyICpjcDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XFxuK1xcdFxcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcXG4rXFx0XFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcXFwiaGFuZGxlX3NvZnRpcnFzXFxcIiwgMTUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnKycpO1xcbitcXHRcXHRpZiAoIWNwIHx8IHNzY2FuZihjcCwgXFxcIislbHgvJWx4XFxcIiwgXFx1MDAyNm9mZnNldCwgXFx1MDAyNnNpemUpICE9IDIpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xcbitcXHRcXHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0Y29tcGxldGUoXFx1MDAyNmNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0LCB0aW1lciktXFx1MDAzZWNvbXBsZXRpb24pO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xcbitcXG4rXFx0dGltZXJfc2V0dXBfb25fc3RhY2soXFx1MDAyNnRjLnRpbWVyLCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnRjLmNvbXBsZXRpb24pO1xcbitcXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXFxuK1xcdG1vZF90aW1lcihcXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xcbitcXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovXFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnRjLmNvbXBsZXRpb24pO1xcbitcXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBjb21wbGV0ZS4gKi9cXG4rXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnRjLnRpbWVyKTtcXG4rXFx0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcXHUwMDI2dGMudGltZXIpO1xcbit9XFxuK1xcbisjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXFxuaW5kZXggOGE4MWM1NDMwNzA1My4uYzFhNDQ1OTRjNDkyNSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9sb2NrX2RlYnVnLmNcXG4rKysgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcXG5AQCAtMjksNiArMjksNyBAQCBpbnQgbmV0ZGV2X2RlYnVnX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXFxuIFxcdGNhc2UgTkVUREVWX0RPV046XFxuIFxcdGNhc2UgTkVUREVWX1JFQk9PVDpcXG4gXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4rXFx0Y2FzZSBORVRERVZfREVCVUdfVU5SRUdJU1RFUjpcXG4gXFx0Y2FzZSBORVRERVZfQ0hBTkdFTVRVOlxcbiBcXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxcbiBcXHRjYXNlIE5FVERFVl9QUkVfQ0hBTkdFQUREUjpcXG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXFxuaW5kZXggNjNjNjlhMGZhNzRlMS4uYWY3ZTk5NjM2NDk1NiAxMDA2NDRcXG4tLS0gYS9uZXQvc29ja2V0LmNcXG4rKysgYi9uZXQvc29ja2V0LmNcXG5AQCAtNjk4LDcgKzY5OCwxMSBAQCBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcXG4gXFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3N0YXRpY1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK25vaW5saW5lXFxuKyNlbmRpZlxcbit2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyk7XFxuIFxcbkBAIC03NzAsNyArNzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXFxuIFxcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuK3N0YXRpY1xcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxuK25vaW5saW5lXFxuKyNlbHNlXFxuK2lubGluZVxcbisjZW5kaWZcXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXFxuIHtcXG4gXFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlc2VuZG1zZywgaW5ldDZfc2VuZG1zZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZyxcXG5AQCAtMTEyMCw4ICsxMTMwLDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19yZWN2X2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsIGludCBmXFxuIFxcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi1cXHRcXHRcXHRcXHQgICAgIGludCBmbGFncylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2Vsc2VcXG4raW5saW5lXFxuKyNlbmRpZlxcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxcbiB7XFxuIFxcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZXJlY3Ztc2csXFxuIFxcdFxcdFxcdFxcdCAgICAgaW5ldDZfcmVjdm1zZyxcXG5AQCAtMjYyNCw5ICsyNjM5LDEyIEBAIHN0YXRpYyBpbnQgY29weV9tc2doZHJfZnJvbV91c2VyKHN0cnVjdCBtc2doZHIgKmttc2csXFxuIFxcdHJldHVybiBlcnIgXFx1MDAzYyAwID8gZXJyIDogMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cyxcXG4tXFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXFxuLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcXG4rc3RhdGljXFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG4rbm9pbmxpbmVcXG4rI2VuZGlmXFxuK2ludCBfX19fc3lzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnX3N5cywgdW5zaWduZWQgaW50IGZsYWdzLFxcbitcXHRcXHQgICAgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tc2doZHJfZmxhZ3MpXFxuIHtcXG4gXFx0dW5zaWduZWQgY2hhciBjdGxbc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSArIDIwXVxcbiBcXHRcXHRcXHRcXHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS43NzUxOTY2ODZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTI0MTYzMjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWX1JFRkNOVF9UUkFDS0VSXCIsXG4gICAgXCJLQUxMU1lNU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb21wbGV4IGRlYnVnZ2luZyBmZWF0dXJlIGZvciB0cmFja2luZyBuZXRfZGV2aWNlIHJlZmNvdW50cywgaW52b2x2aW5nIGN1c3RvbSB0cmFjZSBidWZmZXJzLCBsaW5rZWQgbGlzdHMsIFJDVSwgYW5kIHJhdyBzcGlubG9ja3MuIEl0IGlzIG5vdCBwdXJlbHkgZGVjb3JhdGl2ZSBhcyBpdCBtYWludGFpbnMgc2lnbmlmaWNhbnQgc3RhdGUgYW5kIGNvdWxkIGludHJvZHVjZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2Nrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjViN2QxMGU2YTI5OTIyOWEyN2ZjYjNhODg4YWNhZjQ3Yzg3YTA5MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE4OjE5OjU3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDg4NDBiMTI2OTc5ZmYuLjEyZGMyYzFkYzAzMTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtMjE0NCw2ICsyMTQ0LDggQEAgZW51bSBuZXRkZXZfcmVnX3N0YXRlIHtcbiAgKlxuICAqXHRGSVhNRTogY2xlYW51cCBzdHJ1Y3QgbmV0X2RldmljZSBzdWNoIHRoYXQgbmV0d29yayBwcm90b2NvbCBpbmZvXG4gICpcdG1vdmVzIG91dC5cbisgKlxuKyAqXHRAbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0OiBMaW5rZWQgbGlzdCBmb3IgZGVidWdnaW5nIHJlZmNvdW50IGxlYWsuXG4gICovXG4gXG4gc3RydWN0IG5ldF9kZXZpY2Uge1xuQEAgLTIzMDAsNiArMjMwMiw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfVExTX0RFVklDRSlcbiBcdGNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzO1xuICNlbmRpZlxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3Q7XG4rI2VuZGlmXG4gXG4gXHR1bnNpZ25lZCBpbnRcdFx0b3BlcnN0YXRlO1xuIFx0dW5zaWduZWQgY2hhclx0XHRsaW5rX21vZGU7XG5AQCAtMzI1MCw2ICszMjU1LDcgQEAgZW51bSBuZXRkZXZfY21kIHtcbiBcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCxcbiBcdE5FVERFVl9PRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEsXG4gXHRORVRERVZfWERQX0ZFQVRfQ0hBTkdFLFxuK1x0TkVUREVWX0RFQlVHX1VOUkVHSVNURVIsXG4gfTtcbiBjb25zdCBjaGFyICpuZXRkZXZfY21kX3RvX25hbWUoZW51bSBuZXRkZXZfY21kIGNtZCk7XG4gXG5AQCAtNDQ2Niw5ICs0NDcyLDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZfbml0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKSB7IH1cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfcHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAtMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfZGVjKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5AQCAtNDQ4MCw2ICs0NDkzLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9ob2xkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aWYgKGRldikge1xuK1x0XHRzYXZlX25ldGRldl90cmFjZV9idWZmZXIoZGV2LCAxKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0XHR0aGlzX2NwdV9pbmMoKmRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuY1xuaW5kZXggNDQyNWQ4ZGNlNDRiNC4uYzVjMTk0YmVjMzZlMyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zb2Z0aXJxLmNcbisrKyBiL2tlcm5lbC9zb2Z0aXJxLmNcbkBAIC01NzYsNiArNTc2LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrZGVwX3NvZnRpcnFfc3RhcnQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxuICNlbmRpZlxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKTtcbisjZW5kaWZcbitcbiBzdGF0aWMgdm9pZCBoYW5kbGVfc29mdGlycXMoYm9vbCBrc2lycWQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBlbmQgPSBqaWZmaWVzICsgTUFYX1NPRlRJUlFfVElNRTtcbmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbmluZGV4IDc4MDY4YWU4ZjI4YTYuLmQ3NjEyNjg2ODZmMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmNcbisrKyBiL2tlcm5lbC93b3JrcXVldWUuY1xuQEAgLTMyMDMsNiArMzIwMywxMCBAQCBzdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBwcm9jZXNzX29uZV93b3JrKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbisjZW5kaWZcbitcbiAvKipcbiAgKiBwcm9jZXNzX29uZV93b3JrIC0gcHJvY2VzcyBzaW5nbGUgd29ya1xuICAqIEB3b3JrZXI6IHNlbGZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li44NmZkYWEwOTZhZWRiIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTg3NSw2ICsxODc1LDcgQEAgY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpXG4gXHROKFBSRV9DSEFOR0VBRERSKSBOKE9GRkxPQURfWFNUQVRTX0VOQUJMRSkgTihPRkZMT0FEX1hTVEFUU19ESVNBQkxFKVxuIFx0TihPRkZMT0FEX1hTVEFUU19SRVBPUlRfVVNFRCkgTihPRkZMT0FEX1hTVEFUU19SRVBPUlRfREVMVEEpXG4gXHROKFhEUF9GRUFUX0NIQU5HRSlcbitcdE4oREVCVUdfVU5SRUdJU1RFUilcbiBcdH1cbiAjdW5kZWYgTlxuIFx0cmV0dXJuIFwiVU5LTk9XTl9ORVRERVZfRVZFTlRcIjtcbkBAIC0xMTU4Miw2ICsxMTU4MywxNCBAQCBpbnQgbmV0ZGV2X3JlZmNudF9yZWFkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wobmV0ZGV2X3JlZmNudF9yZWFkKTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbitzdGF0aWMgaW5saW5lIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH1cbisjZW5kaWZcbitcbiBpbnQgbmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDtcbiBcbiAjZGVmaW5lIFdBSVRfUkVGU19NSU5fTVNFQ1MgMVxuQEAgLTExNjU1LDExICsxMTY2NCwxNiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl93YWl0X2FsbHJlZnNfYW55KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4gXG4gXHRcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHdhcm5pbmdfdGltZSArXG4gXHRcdFx0ICAgICAgIFJFQURfT05DRShuZXRkZXZfdW5yZWdpc3Rlcl90aW1lb3V0X3NlY3MpICogSFopKSB7XG4rXHRcdFx0cnRubF9sb2NrKCk7XG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsIGxpc3QsIHRvZG9fbGlzdCkge1xuIFx0XHRcdFx0cHJfZW1lcmcoXCJ1bnJlZ2lzdGVyX25ldGRldmljZTogd2FpdGluZyBmb3IgJXMgdG8gYmVjb21lIGZyZWUuIFVzYWdlIGNvdW50ID0gJWRcXG5cIixcbiBcdFx0XHRcdFx0IGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfcmVmY250X3JlYWQoZGV2KSk7XG4gXHRcdFx0XHRyZWZfdHJhY2tlcl9kaXJfcHJpbnQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMCk7XG4rXHRcdFx0XHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RFQlVHX1VOUkVHSVNURVIsIGRldik7XG4rXHRcdFx0XHRkdW1wX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbiBcdFx0XHR9XG4rXHRcdFx0X19ydG5sX3VubG9jaygpO1xuK1x0XHRcdHJjdV9iYXJyaWVyKCk7XG4gXG4gXHRcdFx0d2FybmluZ190aW1lID0gamlmZmllcztcbiBcdFx0fVxuQEAgLTEyMDU5LDYgKzEyMDczLDkgQEAgc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxuIFxuIFx0ZGV2LVx1MDAzZXByaXZfbGVuID0gc2l6ZW9mX3ByaXY7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuKyNlbmRpZlxuIFx0cmVmX3RyYWNrZXJfZGlyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJlZmNudF90cmFja2VyLCAxMjgsIFwibmV0ZGV2XCIpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBhbGxvY19wZXJjcHUoaW50KTtcbkBAIC0xMjE1OCw2ICsxMjE3NSw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBmcmVlX3BjcHU6XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4rXHRlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gZnJlZV9kZXY6XG4gI2VuZGlmXG4gXHRrdmZyZWUoZGV2KTtcbkBAIC0xMjIyNiw2ICsxMjI0NCw4IEBAIHZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCk7XG4gXHRkZXYtXHUwMDNlcGNwdV9yZWZjbnQgPSBOVUxMO1xuICNlbmRpZlxuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuK1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZWNvcmVfc3RhdHMpO1xuIFx0ZGV2LVx1MDAzZWNvcmVfc3RhdHMgPSBOVUxMO1xuIFx0ZnJlZV9wZXJjcHUoZGV2LVx1MDAzZXhkcF9idWxrcSk7XG5AQCAtMTMyMjksNiArMTMyNDksMTIgQEAgc3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuIFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4gfTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpIHsgfTtcbisjZW5kaWZcbitcbiAvKlxuICAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxuICAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxuQEAgLTEzMjM3LDYgKzEzMjYzLDcgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGksIHJjID0gLUVOT01FTTtcbiBcbitcdG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCgpO1xuIFx0QlVHX09OKCFkZXZfYm9vdF9waGFzZSk7XG4gXG4gXHRuZXRfZGV2X3N0cnVjdF9jaGVjaygpO1xuQEAgLTEzMzQwLDMgKzEzMzY3LDI0MiBAQCBzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbiB9XG4gXG4gc3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XG4rXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitcbisjZGVmaW5lIE5FVERFVl9UUkFDRV9CVUZGRVJfU0laRSAzMjc2OFxuK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRhdG9taWNfdCBjb3VudDtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzIwXTtcbit9IG5ldGRldl90cmFjZV9idWZmZXJbTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFXTtcbitzdGF0aWMgTElTVF9IRUFEKG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrKTtcbitzdGF0aWMgYm9vbCBuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVuZF9vZl9oYW5kbGVfc29mdGlycXMgX19yb19hZnRlcl9pbml0O1xuK1xuK3N0YXRpYyBpbnQgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KHZvaWQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkU7IGkrKylcbitcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyW2ldLmxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rcHVyZV9pbml0Y2FsbChuZXRkZXZfdHJhY2VfYnVmZmVyX2luaXQpO1xuK1xuK3N0YXRpYyBpbnQgdHJpbV9uZXRkZXZfdHJhY2UodW5zaWduZWQgbG9uZyAqZW50cmllcywgaW50IG5yX2VudHJpZXMpXG4re1xuK1x0Y2hhciBidWZmZXJbMzJdID0geyB9O1xuK1x0Y2hhciAqY3A7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2VudHJpZXM7IGkrKykge1xuK1x0XHRzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwgXCIlcHNcIiwgKHZvaWQgKillbnRyaWVzW2ldKTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnICcpO1xuK1x0XHRpZiAoY3ApXG4rXHRcdFx0KmNwID0gJ1xcMCc7XG4rXHRcdGlmIChidWZmZXJbMF0gPT0gJ3AnKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcInByb2Nlc3Nfb25lX3dvcmtcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdrJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJrc3lzX3Vuc2hhcmVcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSBpZiAoYnVmZmVyWzBdID09ICdzJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJzb2NrX3NlbmRtc2dfbm9zZWNcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwic29ja19yZWN2bXNnX25vc2VjXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnXycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYmluZFwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3NvY2tfcmVsZWFzZVwiKSB8fFxuK1x0XHRcdCAgICAhc3RyY21wKGJ1ZmZlciwgXCJfX3N5c19icGZcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcImRvX3NvY2tfc2V0c29ja29wdFwiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fVxuK1x0fVxuK1x0cmV0dXJuIG5yX2VudHJpZXM7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHIsICp0bXA7XG4rXHRpbnQgY291bnQsIGJhbGFuY2UgPSAwLCBwb3MgPSAwO1xuK1xuK1x0LyogVHJpbSBjb21tb24gdHJhY2VzLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gdHJpbV9uZXRkZXZfdHJhY2UocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzKTtcbitcdH1cbitcdC8qIE1lcmdlIGR1cGxpY2F0ZWQgZW50cmllcyBhZnRlciB0cmltbWluZyBjb21tb24gdHJhY2VzLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0aWYgKCFhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsIFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBsaXN0LFxuK1x0XHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0XHRpZiAocHRyLVx1MDAzZW5yX2VudHJpZXMgIT0gdG1wLVx1MDAzZW5yX2VudHJpZXMgfHxcbitcdFx0XHQgICAgbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCB0bXAtXHUwMDNlZW50cmllcyxcbitcdFx0XHRcdCAgIHB0ci1cdTAwM2Vucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0XHRjb3VudCA9IGF0b21pY19yZWFkKFx1MDAyNnRtcC1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0aWYgKCFjb3VudClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdC8qIE1vdmUgY291bnQgZnJvbSBub24tZmlyc3QgZW50cnkgdG8gZmlyc3QgZW50cnkuICovXG4rXHRcdFx0YXRvbWljX2FkZChjb3VudCwgXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0XHRhdG9taWNfc3ViKGNvdW50LCBcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBSZXBvcnQgYWxsIGVudHJpZXMgZm9yIHRoaXMgZGV2aWNlLiAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdC8qIFNraXAgZW1wdHkgZW50cmllcy4gKi9cbitcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRpZiAoIWNvdW50KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHQvKiBSZXBvcnQgdGhpcyBlbnRyeS4gSXQgaXMgc2FmZSB0byBjYWxsIGNvbmRfcmVzY2hlZCgpIGJlY2F1c2VcbitcdFx0ICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzY2hlZHVsYWJsZSBjb250ZXh0LlxuK1x0XHQgKi9cbitcdFx0cG9zKys7XG4rXHRcdGJhbGFuY2UgKz0gY291bnQ7XG4rXHRcdHByX2luZm8oXCJDYWxsIHRyYWNlIGZvciAlc1slZF0gJStkIGF0XFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGNvdW50KTtcbitcdFx0c3RhY2tfdHJhY2VfcHJpbnQocHRyLVx1MDAzZWVudHJpZXMsIHB0ci1cdTAwM2Vucl9lbnRyaWVzLCA0KTtcbitcdFx0Y29uZF9yZXNjaGVkKCk7XG4rXHR9XG4rXHRpZiAoIW5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkKVxuK1x0XHRwcl9pbmZvKFwiYmFsYW5jZSBhcyBvZiAlc1slZF0gaXMgJWRcXG5cIiwgZGV2LVx1MDAzZW5hbWUsIHBvcywgYmFsYW5jZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGZyZWVfcGVyY3B1KGRldi1cdTAwM2VwY3B1X3JlZmNudCkgd2FzIGFscmVhZHlcbitcdCAqIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhhdCBubyBtb3JlIF9fZGV2X3B1dCgpL19fZGV2X2hvbGQoKSBjYWxsIGNhbiBiZSBtYWRlLlxuK1x0ICogVGhlcmVmb3JlLCBubyBtb3JlIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcigpIGNhbGwgd2lsbCBiZSBtYWRlLCBhbmQgd2UgY2FuXG4rXHQgKiBzYWZlbHkgcmV0dXJuIGxpc3QgZWxlbWVudHMgdG8gbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LlxuK1x0ICovXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCk7XG4rXHR9XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbit9XG4rXG4rdm9pZCBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRlbHRhKVxuK3tcbitcdHN0cnVjdCBuZXRkZXZfdHJhY2VfYnVmZmVyICpwdHI7XG4rXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuK1x0aW50IG5yX2VudHJpZXM7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0LyogVGhpcyBmdW5jdGlvbiBpcyBub3QgTk1JLXNhZmUuIEdpdmUgdXAgaWYgY2FsbGVkIGZyb20gTk1JIGNvbnRleHQuICovXG4rXHRpZiAoaW5fbm1pKCkpXG4rXHRcdHJldHVybjtcbitcdC8qIEdldCBzdGFjayB0cmFjZXMuICovXG4rXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG4rXHQvKiBUcmltIHRyYWNlcyBvZiBwcm9jZXNzIGNvbnRleHQgbm93IGlmIGNhbGxlZCBmcm9tIHNvZnRpcnEgY29udGV4dCwgZm9yXG4rXHQgKiB3ZSB3aWxsIGVhc2lseSBleGhhdXN0IG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBpZiB3ZSBkb24ndCB0cmltIHRyYWNlc1xuK1x0ICogb2YgcHJvY2VzcyBjb250ZXh0IHdoZW4gdHJ5aW5nIHRvIGNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzLlxuK1x0ICpcbitcdCAqIEF2b2lkIGthbGxzeW1zIGxvb2t1cCwgYnkgdXNpbmcgY2FjaGVkIGFkZHJlc3MgcmVzb2x2ZWQgdXBvbiBib290LlxuK1x0ICovXG4rXHRpZiAoaW5fc29mdGlycSgpKSB7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0XHRpZiAoZW50cmllc1tpXSBcdTAwM2U9IHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgZW50cmllc1tpXSBcdTAwM2MgZW5kX29mX2hhbmRsZV9zb2Z0aXJxcykge1xuK1x0XHRcdFx0bnJfZW50cmllcyA9IGkgKyAxO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHQvKiBDb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyBhdCBiZXN0LWVmZm9ydCBiYXNpcy4gU2luY2UgZHVwbGljYXRlZCBlbnRyaWVzXG4rXHQgKiBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLCB3ZSBkb24ndCB1c2UgbG9jayBoZXJlLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIGxpc3QsXG4rXHRcdFx0XHQvKiBsaXN0IGVsZW1lbnRzIGNhbid0IGdvIGF3YXkuICovIDEpIHtcbitcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzID09IG5yX2VudHJpZXMgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuK1x0XHRcdGF0b21pY19hZGQoZGVsdGEsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXHQvKiBBZGQgYSBuZXcgZW50cnkuIFdlIGRvbid0IHJlLWNvbXBhcmUgd2l0aCBleGlzdGluZyBlbnRyaWVzIHdpdGggbG9jayBoZWxkLCBmb3JcbitcdCAqIGR1cGxpY2F0ZWQgZW50cmllcyBjcmVhdGVkIGJ5IHJhY2UgY29uZGl0aW9uIHdpbGwgYmUgbWVyZ2VkIHdoZW4gcmVwb3J0aW5nLlxuK1x0ICogQnV0IHdlIHVzZSByYXcgc3BpbmxvY2sgaGVyZSBpbiBjYXNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc29tZSBvdGhlclxuK1x0ICogcmF3IHNwaW5sb2NrIGFscmVhZHkgaGVsZC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbGlzdCkpIHtcbitcdFx0LyogUmVtb3ZlIG9uZSBlbnRyeSBmcm9tIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdCBhbmQgaW5pdGlhbGl6ZSBpdC4gKi9cbitcdFx0cHRyID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QsIHR5cGVvZigqcHRyKSwgbGlzdCk7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNnB0ci1cdTAwM2VsaXN0KTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZwdHItXHUwMDNlY291bnQsIGRlbHRhKTtcbitcdFx0cHRyLVx1MDAzZW5yX2VudHJpZXMgPSBucl9lbnRyaWVzO1xuK1x0XHRtZW1tb3ZlKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbitcdFx0LyogQXBwZW5kIGl0IGluIFJDVSBtYW5uZXIsIGZvciByZWFkZXJzIGFyZSBsb2NrbGVzcy4gKi9cbitcdFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cHRyLVx1MDAzZWxpc3QsIFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fSBlbHNlIHtcbitcdFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQgPSB0cnVlO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK0VYUE9SVF9TWU1CT0woc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKTtcbitcbitzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3Qge1xuK1x0c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uO1xuK307XG4rXG4rLyogUmVzb2x2ZSBhZGRyZXNzIG9mIGhhbmRsZV9zb2Z0aXJxcygpIGFuZCBjYWNoZSBpdCwgaW4gb3JkZXIgdG8gYXZvaWQgbG9va2luZyB1cFxuKyAqIGthbGxzeW1zIGV2ZXJ5IHRpbWUuXG4rICovXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzWzQwXTtcbitcdGludCBucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpLCAxKTtcbitcdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4rXHR1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xuK1x0XHRpZiAoc3RybmNtcChidWZmZXIsIFwiaGFuZGxlX3NvZnRpcnFzXCIsIDE1KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0Y3AgPSBzdHJjaHIoYnVmZmVyLCAnKycpO1xuK1x0XHRpZiAoIWNwIHx8IHNzY2FuZihjcCwgXCIrJWx4LyVseFwiLCBcdTAwMjZvZmZzZXQsIFx1MDAyNnNpemUpICE9IDIpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHN0YXJ0X29mX2hhbmRsZV9zb2Z0aXJxcyA9IGVudHJpZXNbaV0gLSBvZmZzZXQ7XG4rXHRcdGVuZF9vZl9oYW5kbGVfc29mdGlycXMgPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgKyBzaXplO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNvbXBsZXRlKFx1MDAyNmNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0LCB0aW1lciktXHUwMDNlY29tcGxldGlvbik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgdGltZXJfY29tcGxldGlvbl9zdHJ1Y3QgdGM7XG4rXG4rXHR0aW1lcl9zZXR1cF9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lciwgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jLCAwKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFNjaGVkdWxlIGEgY2FsbCB0byBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKS4gKi9cbitcdG1vZF90aW1lcihcdTAwMjZ0Yy50aW1lciwgamlmZmllcyk7XG4rXHQvKiBXYWl0IGZvciBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoKSB0byBiZSBjYWxsZWQuICovXG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNnRjLmNvbXBsZXRpb24pO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gY29tcGxldGUuICovXG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZ0Yy50aW1lcik7XG4rXHR0aW1lcl9kZXN0cm95X29uX3N0YWNrKFx1MDAyNnRjLnRpbWVyKTtcbit9XG4rXG4rI2VuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG5pbmRleCA4YTgxYzU0MzA3MDUzLi5jMWE0NDU5NGM0OTI1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG4rKysgYi9uZXQvY29yZS9sb2NrX2RlYnVnLmNcbkBAIC0yOSw2ICsyOSw3IEBAIGludCBuZXRkZXZfZGVidWdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcdGNhc2UgTkVUREVWX0RPV046XG4gXHRjYXNlIE5FVERFVl9SRUJPT1Q6XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuK1x0Y2FzZSBORVRERVZfREVCVUdfVU5SRUdJU1RFUjpcbiBcdGNhc2UgTkVUREVWX0NIQU5HRU1UVTpcbiBcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XG4gXHRjYXNlIE5FVERFVl9QUkVfQ0hBTkdFQUREUjpcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcbmluZGV4IDYzYzY5YTBmYTc0ZTEuLmFmN2U5OTYzNjQ5NTYgMTAwNjQ0XG4tLS0gYS9uZXQvc29ja2V0LmNcbisrKyBiL25ldC9zb2NrZXQuY1xuQEAgLTY5OCw3ICs2OTgsMTEgQEAgc3RydWN0IHNvY2tldCAqc29ja19hbGxvYyh2b2lkKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHNvY2tfYWxsb2MpO1xuIFxuLXN0YXRpYyB2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbmRpZlxuK3ZvaWQgX19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlub2RlICppbm9kZSlcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHMgPSBSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpO1xuIFxuQEAgLTc3MCw3ICs3NzQsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCxcbiBcdHRyYWNlX3NvY2tfc2VuZF9sZW5ndGgoc2ssIHJldCwgMCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfc2VuZG1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2cpXG4ge1xuIFx0aW50IHJldCA9IElORElSRUNUX0NBTExfSU5FVChSRUFEX09OQ0Uoc29jay1cdTAwM2VvcHMpLVx1MDAzZXNlbmRtc2csIGluZXQ2X3NlbmRtc2csXG4gXHRcdFx0XHQgICAgIGluZXRfc2VuZG1zZywgc29jaywgbXNnLFxuQEAgLTExMjAsOCArMTEzMCwxMyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjYWxsX3RyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc3RydWN0IHNvY2sgKnNrLCBpbnQgcmV0LCBpbnQgZlxuIFx0dHJhY2Vfc29ja19yZWN2X2xlbmd0aChzaywgcmV0LCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXG4tXHRcdFx0XHQgICAgIGludCBmbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2Vsc2VcbitpbmxpbmVcbisjZW5kaWZcbitpbnQgc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VyZWN2bXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0Nl9yZWN2bXNnLFxuQEAgLTI2MjQsOSArMjYzOSwxMiBAQCBzdGF0aWMgaW50IGNvcHlfbXNnaGRyX2Zyb21fdXNlcihzdHJ1Y3QgbXNnaGRyICprbXNnLFxuIFx0cmV0dXJuIGVyciBcdTAwM2MgMCA/IGVyciA6IDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsXG4tXHRcdFx0ICAgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbitpbnQgX19fX3N5c19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZ19zeXMsIHVuc2lnbmVkIGludCBmbGFncyxcbitcdFx0ICAgIHN0cnVjdCB1c2VkX2FkZHJlc3MgKnVzZWRfYWRkcmVzcywgdW5zaWduZWQgaW50IGFsbG93ZWRfbXNnaGRyX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgY3RsW3NpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyAyMF1cbiBcdFx0XHRcdF9fYWxpZ25lZChzaXplb2YoX19rZXJuZWxfc2l6ZV90KSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxOTo1OS43NzUxOTg5NDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTgzMzkxMjU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBgbmV0X2RldmljZWAgcmVmY291bnQgbGVha3MuIEl0IGxvb2tzIGxpa2UgaXQgdXRpbGl6ZXMgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgcmVsaWVzIG9uIGBDT05GSUdfS0FMTFNZTVNgIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGVzZSB0cmFjaW5nIG1lY2hhbmlzbXMuICBUaGUgcGF0Y2ggYWRkcyBhIGJ1bmNoIG9mIHN0dWZmOiBhIGBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3RgIHRvIHRoZSBgbmV0X2RldmljZWAgc3RydWN0LCBmdW5jdGlvbnMgbGlrZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCAoY2FsbGVkIGZyb20gaG90IHBhdGhzIGxpa2UgYF9fZGV2X3B1dGAgYW5kIGBfX2Rldl9ob2xkYCksIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyBsaWtlIGBkdW1wX25ldGRldl90cmFjZV9idWZmZXJgIGFuZCBgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAuIEl0IGFsc28gbW9kaWZpZXMgYG5ldGRldl93YWl0X2FsbHJlZnNfYW55YCBhbmQgYWRkcyBhIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBJdCBhbHNvIGFkZHMgYG5vaW5saW5lYCBhdHRyaWJ1dGVzIHRvIHNldmVyYWwgY29yZSBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBzZWVtcyAqcHVyZWx5KiBmb3IgZGVidWdnaW5nLCByaWdodD8gTGlrZSBgcmVmX3RyYWNrZXJgLCBga21lbWxlYWtgLCBvciBgbG9ja2RlcGAuIEl0ICpzZWVtcyogbGlrZSBpdCdzIG5vdCBnb2luZyB0byBtYWtlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVlZCBmdXp6aW5nLiBIb3dldmVyLCBsZXQncyBjYXJlZnVsbHkgZXZhbHVhdGUgdGhpcy4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBsb2dpYyBpbiB0aGUgaG90IHBhdGhzLCBub3RhYmx5IGFyb3VuZCBgX19kZXZfcHV0YCBhbmQgYF9fZGV2X2hvbGRgLlxuXG5UaGVuIEkgcmVtZW1iZXIgdGhhdCB0aGUgcHJvbXB0IHNheXMgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGJ1dCBpcyB0aGlzIHRydWx5IGp1c3QgXCJwdXJlbHkgZGVjb3JhdGl2ZT9cIlxuXG5Tbywgb24gZnVydGhlciByZWZsZWN0aW9uLCB0aGlzIGlzbid0IGp1c3QgYSB0cmFjZXBvaW50IG9yIGEgbG9nLiBUaGlzIGFkZHMgYSB0aW1lciwgYSBsb2NrLCBhbmQgbWFuaXB1bGF0ZXMgYSBsaW5rZWQgbGlzdC4gVGhpcyBhZGRzIHN0YXRlLCB3aGljaCBpcyBhIHBvdGVudGlhbCBzb3VyY2Ugb2YgZXJyb3JzLiAgRXZlbiBpZiB0aGUgKmludGVudGlvbiogaXMgZGVidWdnaW5nLCB0aGVyZSBjb3VsZCBiZSBidWdzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3Mgb3IgZGVhZGxvY2tzLiBJdCBjaGFuZ2VzIGV4ZWN1dGlvbiBmbG93IGluIHRoZXNlIHBhdGhzLiBUaGVyZWZvcmUsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoICppcyogd29ydGggY29uc2lkZXJpbmcuXG5cblRoZSBuZXcgZnVuY3Rpb25zIHRoYXQgd2FycmFudCBleHRyYSBhdHRlbnRpb24gZm9yIGZ1enppbmcgYXJlOiBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLlxuTGV0J3MgY29uZmlybSB0aGF0IGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uIHVzaW5nIGBncmVwcGVyYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjExLjYwOTExNDY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODExMzY5ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0yMTUxPXN0cnVjdCBuZXRfZGV2aWNlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzMDU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjMwNi1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NDczPXZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3NC1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjQ0NzU6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNDQ3Ni12b2lkIHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGVsdGEpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTA1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MDgte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUwOTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTAtXFx0cmVmX3RyYWNrZXJfYWxsb2MoXFx1MDAyNmRldi1cXHUwMDNlcmVmY250X3RyYWNrZXIsIHRyYWNrZXIsIGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTQ1MTc9c3RhdGljIGlubGluZSB2b2lkIG5ldGRldl90cmFja2VyX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MTkte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUyMDojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MjEtXFx0cmVmY291bnRfZGVjKFxcdTAwMjZkZXYtXFx1MDAzZXJlZmNudF90cmFja2VyLm5vX3RyYWNrZXIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD00NTI2PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfdHJhY2tlcl9mcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1Mjgte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NDUyOTojaWZkZWYgQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTQ1MzAtXFx0cmVmX3RyYWNrZXJfZnJlZShcXHUwMDI2ZGV2LVxcdTAwM2VyZWZjbnRfdHJhY2tlciwgdHJhY2tlcik7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRfdHJhY2tlcnMuaC01LVxcbmluY2x1ZGUvbmV0L25ldF90cmFja2Vycy5oOjY6I2lmZGVmIENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuaW5jbHVkZS9uZXQvbmV0X3RyYWNrZXJzLmgtNy10eXBlZGVmIHN0cnVjdCByZWZfdHJhY2tlciAqbmV0ZGV2aWNlX3RyYWNrZXI7XFxuLS1cXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWc9NDA9Q09ORklHX1VCU0FOX1VOUkVBQ0hBQkxFPXlcXG4tLVxcbmtlcm5lbC9jb25maWdzL2RlYnVnLmNvbmZpZy00My0jXFxua2VybmVsL2NvbmZpZ3MvZGVidWcuY29uZmlnOjQ0OkNPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSPXlcXG5rZXJuZWwvY29uZmlncy9kZWJ1Zy5jb25maWctNDUtQ09ORklHX05FVF9OU19SRUZDTlRfVFJBQ0tFUj15XFxuLS1cXG5rZXJuZWwvc29mdGlycS5jPTU3Nj1zdGF0aWMgaW5saW5lIHZvaWQgbG9ja2RlcF9zb2Z0aXJxX2VuZChib29sIGluX2hhcmRpcnEpIHsgfVxcbi0tXFxua2VybmVsL3NvZnRpcnEuYy01NzgtXFxua2VybmVsL3NvZnRpcnEuYzo1Nzk6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbmtlcm5lbC9zb2Z0aXJxLmMtNTgwLXN0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM9MzE4OD1zdGF0aWMgYm9vbCBtYW5hZ2Vfd29ya2VycyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpXFxuLS1cXG5rZXJuZWwvd29ya3F1ZXVlLmMtMzIwNS1cXG5rZXJuZWwvd29ya3F1ZXVlLmM6MzIwNjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxua2VybmVsL3dvcmtxdWV1ZS5jLTMyMDctc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvS2NvbmZpZy5kZWJ1Zy0yLVxcbm5ldC9LY29uZmlnLmRlYnVnOjM6Y29uZmlnIE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJcXG5uZXQvS2NvbmZpZy5kZWJ1Zy00LVxcdGJvb2wgXFxcIkVuYWJsZSBuZXQgZGV2aWNlIHJlZmNvdW50IHRyYWNraW5nXFxcIlxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTE1ODQ9RVhQT1JUX1NZTUJPTChuZXRkZXZfcmVmY250X3JlYWQpO1xcbm5ldC9jb3JlL2Rldi5jLTExNTg1LVxcbm5ldC9jb3JlL2Rldi5jOjExNTg2OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMTU4Ny1zdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjA0Nj1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjA3NS1cXG5uZXQvY29yZS9kZXYuYzoxMjA3NjojaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXFxubmV0L2NvcmUvZGV2LmMtMTIwNzctXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldi1cXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMjQ0PXN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzMjUxLVxcbm5ldC9jb3JlL2Rldi5jOjEzMjUyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvY29yZS9kZXYuYy0xMzI1My1zdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTMzNjk9c3Vic3lzX2luaXRjYWxsKG5ldF9kZXZfaW5pdCk7XFxubmV0L2NvcmUvZGV2LmMtMTMzNzAtXFxubmV0L2NvcmUvZGV2LmM6MTMzNzE6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9jb3JlL2Rldi5jLTEzMzcyLVxcbi0tXFxubmV0L3NvY2tldC5jPTcwMT1zdGF0aWNcXG5uZXQvc29ja2V0LmM6NzAyOiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtNzAzLW5vaW5saW5lXFxuLS1cXG5uZXQvc29ja2V0LmM9Nzc3PXN0YXRpY1xcbm5ldC9zb2NrZXQuYzo3Nzg6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9zb2NrZXQuYy03Nzktbm9pbmxpbmVcXG4tLVxcbm5ldC9zb2NrZXQuYz0xMTMzPXN0YXRpY1xcbm5ldC9zb2NrZXQuYzoxMTM0OiNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcXG5uZXQvc29ja2V0LmMtMTEzNS1ub2lubGluZVxcbi0tXFxubmV0L3NvY2tldC5jPTI2NDI9c3RhdGljXFxubmV0L3NvY2tldC5jOjI2NDM6I2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxcbm5ldC9zb2NrZXQuYy0yNjQ0LW5vaW5saW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE0LjQyMDQ4OTQxNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NzI3MzEzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIERlYnVnIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJg4oCmIEkgdmFndWVseSByZW1lbWJlciBzZWVpbmcgdGhhdCBpbiB0aGUgZGVidWcgS2NvbmZpZyBvcHRpb25zLiBMZXQncyBjb25maXJtIHRoYXQgaXQncyBuZXN0bGVkIGluIGBuZXQvS2NvbmZpZy5kZWJ1Z2AsIHllYWgsIHRoZXJlIGl0IGlzLiBOb3cgdGhlIGludGVyZXN0aW5nIGJpdDogd2hhdCBkb2VzIGVuYWJsaW5nIHRoaXMgdGhpbmcgKmFjdHVhbGx5KiBkZXBlbmQgb24/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHJlcmVxdWlzaXRlcy4gQXJlIHRoZXJlIG90aGVyIGRlYnVnIG9wdGlvbnMgaXQgcGlnZ3liYWNrcyBvbj8gRG9lcyBpdCBpbnRyb2R1Y2UgYW55IG5ldyBrZXJuZWwgZmVhdHVyZXMgb3IgcmVxdWlyZSBzcGVjaWZpYyBrZXJuZWwgbW9kdWxlcz8gQSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcyB3aWxsIGhlbHAgbWUgZmlndXJlIG91dCB3aGVuIGl0J3MgYXBwcm9wcmlhdGUgdG8gZW5hYmxlIHRoaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gaXQgcHJvdmlkZXMuIE9rYXksIGxldCdzIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyB0byBzZWUgdGhlIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE3Ljg5MzIyMzcwNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBORVRfREVWX1JFRkNOVF9UUkFDS0VSXFxuICAgNDpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0IGRldmljZSByZWZjb3VudCB0cmFja2luZ1xcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFxcdTAwMjZcXHUwMDI2IFNUQUNLVFJBQ0VfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBORVRcXG4gICA2OlxcdFxcdHNlbGVjdCBSRUZfVFJBQ0tFUlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCBuXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIEVuYWJsZSBkZWJ1Z2dpbmcgZmVhdHVyZSB0byB0cmFjayBkZXZpY2UgcmVmZXJlbmNlcy5cXG4gIDEwOlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRjb25maWcgTkVUX05TX1JFRkNOVF9UUkFDS0VSXFxuICAxMzpcXHRcXHRib29sIFxcXCJFbmFibGUgbmV0d29ya2luZyBuYW1lc3BhY2UgcmVmY291bnQgdHJhY2tpbmdcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTkVUXFxuICAxNTpcXHRcXHRzZWxlY3QgUkVGX1RSQUNLRVJcXG4gIDE2OlxcdFxcdGRlZmF1bHQgblxcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBFbmFibGUgZGVidWdnaW5nIGZlYXR1cmUgdG8gdHJhY2sgbmV0bnMgcmVmZXJlbmNlcy5cXG4gIDE5OlxcdFxcdCAgVGhpcyBhZGRzIG1lbW9yeSBhbmQgY3B1IGNvc3RzLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjE3Ljg5MzMxMjE3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTY0MDYwMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXQgRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyB0aGUgYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgIGNvbmZpZyBvcHRpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhZGRpbmcgYSBkZWJ1Z2dpbmcgZmVhdHVyZSByZWxhdGVkIHRvIHJlZmNvdW50IHRyYWNraW5nIGZvciBuZXR3b3JrIGRldmljZXMuIFRoZSBtYWluIGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGFyZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYGR1bXBfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAsIGBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCwgYW5kIGBuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXRgLiBXaGlsZSB0aGUgZGVzY3JpcHRpb25zIGNhbGwgaXQgXCJkZWNvcmF0aXZlXCIgaW5pdGlhbGx5LCBhZnRlciBsb29raW5nIGF0IHRoZSBjb2RlIEknbSBub3Qgc28gc3VyZS4gSXQgc2VlbXMgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBzb21lIHByaW50IHN0YXRlbWVudHMsIGl0J3MgYWN0dWFsbHkgc2F2aW5nIHN0YWNrIHRyYWNlcyBpbnRvIGEgY3VzdG9tIHRyYWNlIGJ1ZmZlciwgdGhlIGBuZXRkZXZfdHJhY2VfYnVmZmVyYCBhcnJheS5cblxuTm93LCBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBpcyBjYWxsZWQgd2l0aGluIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAsIHdoaWNoIGFyZSBleHRyZW1lbHkgaG90IHBhdGhzLiBUaGUgcHJvbXB0IHdhcm5lZCBhZ2FpbnN0IGZvY3VzaW5nIG9uIGhvdCBwYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEhvd2V2ZXIsIGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgIGlzIHRoZSAqb25seSogbm9uLXN0YXRpYyBmdW5jdGlvbiBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGFuZCBpdCBpcyBleHBvcnRlZCB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIEl0J3MgdGhlIGNvcmUgbG9naWMgYWRkZWQgYnkgdGhpcyBwYXRjaCwgc28gaXQncyBwcm9iYWJseSB3b3J0aCBpdC5cblxuU28sIEkgdGhpbmsgdGhpcyBwYXRjaCBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgbG9naWMgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgZG9lcyBzdGFjayB0cmFjZSBzYXZlcywgdXNlcyBSQ1UsIHNwaW5sb2NrcyBhbmQgbGlua2VkIGxpc3RzLiBJdCBjb21wYXJlcyBleGlzdGluZyBlbnRyaWVzLCBhZGRpbmcgbmV3IGVudHJpZXMgYW5kIHRoZSBzdGFjayB0cmFjZSBzYXZlIGl0c2VsZi4gSXQgbWF5IGhhdmUgYnVncyAocmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGRlYWRsb2NrcyksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbi4gVGhpcyBpcyBiZWNhdXNlIGl0IGlzIHRoZSBtYWluIGZ1bmN0aW9uIGFkZGVkIGJ5IHRoZSBwYXRjaCBhbmQgaXQncyB0aGUgb25seSBub24tc3RhdGljIGV4cG9ydGVkIHN5bWJvbCwgZXZlbiBpZiBpdCBpcyBhIGhvdCBwYXRoLlxuXG5Ob3csIGZvciBlbmFibGluZyBjb25maWd1cmF0aW9ucywgSSdtIGdvaW5nIHRvIHNldCBgTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmAgYW5kIGBLQUxMU1lNU2AuIGBLQUxMU1lNU2AgdXN1YWxseSBpcyBlbmFibGVkLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gaW5jbHVkZSBpdC5cblxuV29ydGhGdXp6aW5nPXRydWVcbkZvY3VzU3ltYm9scyA9IGBzYXZlX25ldGRldl90cmFjZV9idWZmZXJgXG5FbmFibGVDb25maWdzID0gYE5FVF9ERVZfUkVGQ05UX1RSQUNLRVJgLCBgS0FMTFNZTVNgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTQ3LCJPdXRwdXRUb2tlbnMiOjExMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoyMDo0NC44NTczNzU0ODRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTQ0ODY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUlwiLFxuICAgIFwiS0FMTFNZTVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzYXZlX25ldGRldl90cmFjZV9idWZmZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY29tcGxleCBkZWJ1Z2dpbmcgZmVhdHVyZSBmb3IgdHJhY2tpbmcgbmV0X2RldmljZSByZWZjb3VudHMsIGludm9sdmluZyBjdXN0b20gdHJhY2UgYnVmZmVycywgbGlua2VkIGxpc3RzLCBSQ1UsIGFuZCByYXcgc3BpbmxvY2tzLiBJdCBpcyBub3QgcHVyZWx5IGRlY29yYXRpdmUgYXMgaXQgbWFpbnRhaW5zIHNpZ25pZmljYW50IHN0YXRlIGFuZCBjb3VsZCBpbnRyb2R1Y2UgYnVncyBsaWtlIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjQ1LjAxNjgzMjg0NFoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODg2NDE2NTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjIwOjQ1LjAxNzM5MjcxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODg2MzYwMDY4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDY1YjdkMTBlNmEyOTkyMjlhMjdmY2IzYTg4OGFjYWY0N2M4N2EwOTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxOTo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4ODQwYjEyNjk3OWZmLi4xMmRjMmMxZGMwMzE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTIxNDQsNiArMjE0NCw4IEBAIGVudW0gbmV0ZGV2X3JlZ19zdGF0ZSB7XG4gICpcbiAgKlx0RklYTUU6IGNsZWFudXAgc3RydWN0IG5ldF9kZXZpY2Ugc3VjaCB0aGF0IG5ldHdvcmsgcHJvdG9jb2wgaW5mb1xuICAqXHRtb3ZlcyBvdXQuXG4rICpcbisgKlx0QG5ldGRldl90cmFjZV9idWZmZXJfbGlzdDogTGlua2VkIGxpc3QgZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrLlxuICAqL1xuIFxuIHN0cnVjdCBuZXRfZGV2aWNlIHtcbkBAIC0yMzAwLDYgKzIzMDIsOSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX1RMU19ERVZJQ0UpXG4gXHRjb25zdCBzdHJ1Y3QgdGxzZGV2X29wcyAqdGxzZGV2X29wcztcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK1x0c3RydWN0IGxpc3RfaGVhZFx0bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0O1xuKyNlbmRpZlxuIFxuIFx0dW5zaWduZWQgaW50XHRcdG9wZXJzdGF0ZTtcbiBcdHVuc2lnbmVkIGNoYXJcdFx0bGlua19tb2RlO1xuQEAgLTMyNTAsNiArMzI1NSw3IEBAIGVudW0gbmV0ZGV2X2NtZCB7XG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQsXG4gXHRORVRERVZfT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBLFxuIFx0TkVUREVWX1hEUF9GRUFUX0NIQU5HRSxcbitcdE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLFxuIH07XG4gY29uc3QgY2hhciAqbmV0ZGV2X2NtZF90b19uYW1lKGVudW0gbmV0ZGV2X2NtZCBjbWQpO1xuIFxuQEAgLTQ0NjYsOSArNDQ3MiwxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X25pdF9hY3RpdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiB2b2lkIGRldl9xdWV1ZV94bWl0X25pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSkgeyB9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIF9fZGV2X3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgLTEpO1xuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRcdHRoaXNfY3B1X2RlYygqZGV2LVx1MDAzZXBjcHVfcmVmY250KTtcbiAjZWxzZVxuQEAgLTQ0ODAsNiArNDQ5Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rldl9wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZfaG9sZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGlmIChkZXYpIHtcbitcdFx0c2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldiwgMSk7XG4gI2lmZGVmIENPTkZJR19QQ1BVX0RFVl9SRUZDTlRcbiBcdFx0dGhpc19jcHVfaW5jKCpkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuICNlbHNlXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmNcbmluZGV4IDQ0MjVkOGRjZTQ0YjQuLmM1YzE5NGJlYzM2ZTMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc29mdGlycS5jXG4rKysgYi9rZXJuZWwvc29mdGlycS5jXG5AQCAtNTc2LDYgKzU3NiwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbG9ja2RlcF9zb2Z0aXJxX3N0YXJ0KHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGxvY2tkZXBfc29mdGlycV9lbmQoYm9vbCBpbl9oYXJkaXJxKSB7IH1cbiAjZW5kaWZcbiBcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK3N0YXRpYyBub2lubGluZSB2b2lkIGhhbmRsZV9zb2Z0aXJxcyhib29sIGtzaXJxZCk7XG4rI2VuZGlmXG4rXG4gc3RhdGljIHZvaWQgaGFuZGxlX3NvZnRpcnFzKGJvb2wga3NpcnFkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArIE1BWF9TT0ZUSVJRX1RJTUU7XG5kaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jXG5pbmRleCA3ODA2OGFlOGYyOGE2Li5kNzYxMjY4Njg2ZjJkIDEwMDY0NFxuLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jXG4rKysgYi9rZXJuZWwvd29ya3F1ZXVlLmNcbkBAIC0zMjAzLDYgKzMyMDMsMTAgQEAgc3RhdGljIGJvb2wgbWFuYWdlX3dvcmtlcnMoc3RydWN0IHdvcmtlciAqd29ya2VyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rc3RhdGljIG5vaW5saW5lIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4rI2VuZGlmXG4rXG4gLyoqXG4gICogcHJvY2Vzc19vbmVfd29yayAtIHByb2Nlc3Mgc2luZ2xlIHdvcmtcbiAgKiBAd29ya2VyOiBzZWxmXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uODZmZGFhMDk2YWVkYiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTE4NzUsNiArMTg3NSw3IEBAIGNvbnN0IGNoYXIgKm5ldGRldl9jbWRfdG9fbmFtZShlbnVtIG5ldGRldl9jbWQgY21kKVxuIFx0TihQUkVfQ0hBTkdFQUREUikgTihPRkZMT0FEX1hTVEFUU19FTkFCTEUpIE4oT0ZGTE9BRF9YU1RBVFNfRElTQUJMRSlcbiBcdE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX1VTRUQpIE4oT0ZGTE9BRF9YU1RBVFNfUkVQT1JUX0RFTFRBKVxuIFx0TihYRFBfRkVBVF9DSEFOR0UpXG4rXHROKERFQlVHX1VOUkVHSVNURVIpXG4gXHR9XG4gI3VuZGVmIE5cbiBcdHJldHVybiBcIlVOS05PV05fTkVUREVWX0VWRU5UXCI7XG5AQCAtMTE1ODIsNiArMTE1ODMsMTQgQEAgaW50IG5ldGRldl9yZWZjbnRfcmVhZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKG5ldGRldl9yZWZjbnRfcmVhZCk7XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4rc3RhdGljIHZvaWQgZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4rc3RhdGljIGlubGluZSB2b2lkIGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9XG4rI2VuZGlmXG4rXG4gaW50IG5ldGRldl91bnJlZ2lzdGVyX3RpbWVvdXRfc2VjcyBfX3JlYWRfbW9zdGx5ID0gMTA7XG4gXG4gI2RlZmluZSBXQUlUX1JFRlNfTUlOX01TRUNTIDFcbkBAIC0xMTY1NSwxMSArMTE2NjQsMTYgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfd2FpdF9hbGxyZWZzX2FueShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCB3YXJuaW5nX3RpbWUgK1xuIFx0XHRcdCAgICAgICBSRUFEX09OQ0UobmV0ZGV2X3VucmVnaXN0ZXJfdGltZW91dF9zZWNzKSAqIEhaKSkge1xuK1x0XHRcdHJ0bmxfbG9jaygpO1xuIFx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCBsaXN0LCB0b2RvX2xpc3QpIHtcbiBcdFx0XHRcdHByX2VtZXJnKFwidW5yZWdpc3Rlcl9uZXRkZXZpY2U6IHdhaXRpbmcgZm9yICVzIHRvIGJlY29tZSBmcmVlLiBVc2FnZSBjb3VudCA9ICVkXFxuXCIsXG4gXHRcdFx0XHRcdCBkZXYtXHUwMDNlbmFtZSwgbmV0ZGV2X3JlZmNudF9yZWFkKGRldikpO1xuIFx0XHRcdFx0cmVmX3RyYWNrZXJfZGlyX3ByaW50KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTApO1xuK1x0XHRcdFx0Y2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ERUJVR19VTlJFR0lTVEVSLCBkZXYpO1xuK1x0XHRcdFx0ZHVtcF9uZXRkZXZfdHJhY2VfYnVmZmVyKGRldik7XG4gXHRcdFx0fVxuK1x0XHRcdF9fcnRubF91bmxvY2soKTtcbitcdFx0XHRyY3VfYmFycmllcigpO1xuIFxuIFx0XHRcdHdhcm5pbmdfdGltZSA9IGppZmZpZXM7XG4gXHRcdH1cbkBAIC0xMjA1OSw2ICsxMjA3Myw5IEBAIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXZfbXFzKGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbmFtZSxcbiBcbiBcdGRldi1cdTAwM2Vwcml2X2xlbiA9IHNpemVvZl9wcml2O1xuIFxuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbisjZW5kaWZcbiBcdHJlZl90cmFja2VyX2Rpcl9pbml0KFx1MDAyNmRldi1cdTAwM2VyZWZjbnRfdHJhY2tlciwgMTI4LCBcIm5ldGRldlwiKTtcbiAjaWZkZWYgQ09ORklHX1BDUFVfREVWX1JFRkNOVFxuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gYWxsb2NfcGVyY3B1KGludCk7XG5AQCAtMTIxNTgsNiArMTIxNzUsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4gZnJlZV9wY3B1OlxuICNpZmRlZiBDT05GSUdfUENQVV9ERVZfUkVGQ05UXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuK1x0ZXJhc2VfbmV0ZGV2X3RyYWNlX2J1ZmZlcihkZXYpO1xuIGZyZWVfZGV2OlxuICNlbmRpZlxuIFx0a3ZmcmVlKGRldik7XG5AQCAtMTIyMjYsNiArMTIyNDQsOCBAQCB2b2lkIGZyZWVfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpO1xuIFx0ZGV2LVx1MDAzZXBjcHVfcmVmY250ID0gTlVMTDtcbiAjZW5kaWZcbitcdGVyYXNlX25ldGRldl90cmFjZV9idWZmZXIoZGV2KTtcbitcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2Vjb3JlX3N0YXRzKTtcbiBcdGRldi1cdTAwM2Vjb3JlX3N0YXRzID0gTlVMTDtcbiBcdGZyZWVfcGVyY3B1KGRldi1cdTAwM2V4ZHBfYnVsa3EpO1xuQEAgLTEzMjI5LDYgKzEzMjQ5LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcbiBcdC5zZXR1cFx0XHRcdD0gYmFja2xvZ19uYXBpX3NldHVwLFxuIH07XG4gXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIHZvaWQgX19pbml0IG5ldF9kZXZfcmVmY250X3RyYWNrZXJfaW5pdCh2b2lkKSB7IH07XG4rI2VuZGlmXG4rXG4gLypcbiAgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcbiAgKiAgICAgICB0byB0YWtlIHRoZSBydG5sIHNlbWFwaG9yZS5cbkBAIC0xMzIzNyw2ICsxMzI2Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBpLCByYyA9IC1FTk9NRU07XG4gXG4rXHRuZXRfZGV2X3JlZmNudF90cmFja2VyX2luaXQoKTtcbiBcdEJVR19PTighZGV2X2Jvb3RfcGhhc2UpO1xuIFxuIFx0bmV0X2Rldl9zdHJ1Y3RfY2hlY2soKTtcbkBAIC0xMzM0MCwzICsxMzM2NywyNDIgQEAgc3RhdGljIGludCBfX2luaXQgbmV0X2Rldl9pbml0KHZvaWQpXG4gfVxuIFxuIHN1YnN5c19pbml0Y2FsbChuZXRfZGV2X2luaXQpO1xuK1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rXG4rI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbitzdGF0aWMgc3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0YXRvbWljX3QgY291bnQ7XG4rXHRpbnQgbnJfZW50cmllcztcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1syMF07XG4rfSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG4rc3RhdGljIExJU1RfSEVBRChuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKG5ldGRldl90cmFjZV9idWZmZXJfbG9jayk7XG4rc3RhdGljIGJvb2wgbmV0ZGV2X3RyYWNlX2J1ZmZlcl9leGhhdXN0ZWQ7XG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzIF9fcm9fYWZ0ZXJfaW5pdDtcbitcbitzdGF0aWMgaW50IG5ldGRldl90cmFjZV9idWZmZXJfaW5pdCh2b2lkKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkVUREVWX1RSQUNFX0JVRkZFUl9TSVpFOyBpKyspXG4rXHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcltpXS5saXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK3B1cmVfaW5pdGNhbGwobmV0ZGV2X3RyYWNlX2J1ZmZlcl9pbml0KTtcbitcbitzdGF0aWMgaW50IHRyaW1fbmV0ZGV2X3RyYWNlKHVuc2lnbmVkIGxvbmcgKmVudHJpZXMsIGludCBucl9lbnRyaWVzKVxuK3tcbitcdGNoYXIgYnVmZmVyWzMyXSA9IHsgfTtcbitcdGNoYXIgKmNwO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lbnRyaWVzOyBpKyspIHtcbitcdFx0c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIFwiJXBzXCIsICh2b2lkICopZW50cmllc1tpXSk7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJyAnKTtcbitcdFx0aWYgKGNwKVxuK1x0XHRcdCpjcCA9ICdcXDAnO1xuK1x0XHRpZiAoYnVmZmVyWzBdID09ICdwJykge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJwcm9jZXNzX29uZV93b3JrXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnaycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwia3N5c191bnNoYXJlXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2UgaWYgKGJ1ZmZlclswXSA9PSAncycpIHtcbitcdFx0XHRpZiAoIXN0cmNtcChidWZmZXIsIFwic29ja19zZW5kbXNnX25vc2VjXCIpIHx8XG4rXHRcdFx0ICAgICFzdHJjbXAoYnVmZmVyLCBcInNvY2tfcmVjdm1zZ19ub3NlY1wiKSlcbitcdFx0XHRcdHJldHVybiBpICsgMTtcbitcdFx0fSBlbHNlIGlmIChidWZmZXJbMF0gPT0gJ18nKSB7XG4rXHRcdFx0aWYgKCFzdHJjbXAoYnVmZmVyLCBcIl9fc3lzX2JpbmRcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zb2NrX3JlbGVhc2VcIikgfHxcbitcdFx0XHQgICAgIXN0cmNtcChidWZmZXIsIFwiX19zeXNfYnBmXCIpKVxuK1x0XHRcdFx0cmV0dXJuIGkgKyAxO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGlmICghc3RyY21wKGJ1ZmZlciwgXCJkb19zb2NrX3NldHNvY2tvcHRcIikpXG4rXHRcdFx0XHRyZXR1cm4gaSArIDE7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiBucl9lbnRyaWVzO1xuK31cbitcbitzdGF0aWMgdm9pZCBkdW1wX25ldGRldl90cmFjZV9idWZmZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyLCAqdG1wO1xuK1x0aW50IGNvdW50LCBiYWxhbmNlID0gMCwgcG9zID0gMDtcbitcbitcdC8qIFRyaW0gY29tbW9uIHRyYWNlcy4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHRwdHItXHUwMDNlbnJfZW50cmllcyA9IHRyaW1fbmV0ZGV2X3RyYWNlKHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcyk7XG4rXHR9XG4rXHQvKiBNZXJnZSBkdXBsaWNhdGVkIGVudHJpZXMgYWZ0ZXIgdHJpbW1pbmcgY29tbW9uIHRyYWNlcy4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGlmICghYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wLCBcdTAwMjZwdHItXHUwMDNlbGlzdCwgbGlzdCxcbitcdFx0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdFx0aWYgKHB0ci1cdTAwM2Vucl9lbnRyaWVzICE9IHRtcC1cdTAwM2Vucl9lbnRyaWVzIHx8XG4rXHRcdFx0ICAgIG1lbWNtcChwdHItXHUwMDNlZW50cmllcywgdG1wLVx1MDAzZWVudHJpZXMsXG4rXHRcdFx0XHQgICBwdHItXHUwMDNlbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdFx0Y291bnQgPSBhdG9taWNfcmVhZChcdTAwMjZ0bXAtXHUwMDNlY291bnQpO1xuK1x0XHRcdGlmICghY291bnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHQvKiBNb3ZlIGNvdW50IGZyb20gbm9uLWZpcnN0IGVudHJ5IHRvIGZpcnN0IGVudHJ5LiAqL1xuK1x0XHRcdGF0b21pY19hZGQoY291bnQsIFx1MDAyNnB0ci1cdTAwM2Vjb3VudCk7XG4rXHRcdFx0YXRvbWljX3N1Yihjb3VudCwgXHUwMDI2dG1wLVx1MDAzZWNvdW50KTtcbitcdFx0fVxuK1x0fVxuK1x0LyogUmVwb3J0IGFsbCBlbnRyaWVzIGZvciB0aGlzIGRldmljZS4gKi9cbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgbGlzdCxcbitcdFx0XHRcdC8qIGxpc3QgZWxlbWVudHMgY2FuJ3QgZ28gYXdheS4gKi8gMSkge1xuK1x0XHQvKiBTa2lwIGVtcHR5IGVudHJpZXMuICovXG4rXHRcdGNvdW50ID0gYXRvbWljX3JlYWQoXHUwMDI2cHRyLVx1MDAzZWNvdW50KTtcbitcdFx0aWYgKCFjb3VudClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0LyogUmVwb3J0IHRoaXMgZW50cnkuIEl0IGlzIHNhZmUgdG8gY2FsbCBjb25kX3Jlc2NoZWQoKSBiZWNhdXNlXG4rXHRcdCAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc2NoZWR1bGFibGUgY29udGV4dC5cbitcdFx0ICovXG4rXHRcdHBvcysrO1xuK1x0XHRiYWxhbmNlICs9IGNvdW50O1xuK1x0XHRwcl9pbmZvKFwiQ2FsbCB0cmFjZSBmb3IgJXNbJWRdICUrZCBhdFxcblwiLCBkZXYtXHUwMDNlbmFtZSwgcG9zLCBjb3VudCk7XG4rXHRcdHN0YWNrX3RyYWNlX3ByaW50KHB0ci1cdTAwM2VlbnRyaWVzLCBwdHItXHUwMDNlbnJfZW50cmllcywgNCk7XG4rXHRcdGNvbmRfcmVzY2hlZCgpO1xuK1x0fVxuK1x0aWYgKCFuZXRkZXZfdHJhY2VfYnVmZmVyX2V4aGF1c3RlZClcbitcdFx0cHJfaW5mbyhcImJhbGFuY2UgYXMgb2YgJXNbJWRdIGlzICVkXFxuXCIsIGRldi1cdTAwM2VuYW1lLCBwb3MsIGJhbGFuY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlcmFzZV9uZXRkZXZfdHJhY2VfYnVmZmVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldGRldl90cmFjZV9idWZmZXIgKnB0cjtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHQvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBmcmVlX3BlcmNwdShkZXYtXHUwMDNlcGNwdV9yZWZjbnQpIHdhcyBhbHJlYWR5XG4rXHQgKiBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoYXQgbm8gbW9yZSBfX2Rldl9wdXQoKS9fX2Rldl9ob2xkKCkgY2FsbCBjYW4gYmUgbWFkZS5cbitcdCAqIFRoZXJlZm9yZSwgbm8gbW9yZSBzYXZlX25ldGRldl90cmFjZV9idWZmZXIoKSBjYWxsIHdpbGwgYmUgbWFkZSwgYW5kIHdlIGNhblxuK1x0ICogc2FmZWx5IHJldHVybiBsaXN0IGVsZW1lbnRzIHRvIG5ldGRldl90cmFjZV9idWZmZXJfbGlzdC5cbitcdCAqL1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK1x0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmRldi1cdTAwM2VuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZGV2LVx1MDAzZW5ldGRldl90cmFjZV9idWZmZXJfbGlzdCwgdHlwZW9mKCpwdHIpLCBsaXN0KTtcbitcdFx0bGlzdF9kZWwoXHUwMDI2cHRyLVx1MDAzZWxpc3QpO1xuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpO1xuK1x0fVxuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9sb2NrLCBmbGFncyk7XG4rfVxuK1xuK3ZvaWQgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciAqcHRyO1xuK1x0dW5zaWduZWQgbG9uZyBlbnRyaWVzW0FSUkFZX1NJWkUocHRyLVx1MDAzZWVudHJpZXMpXTtcbitcdGludCBucl9lbnRyaWVzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdC8qIFRoaXMgZnVuY3Rpb24gaXMgbm90IE5NSS1zYWZlLiBHaXZlIHVwIGlmIGNhbGxlZCBmcm9tIE5NSSBjb250ZXh0LiAqL1xuK1x0aWYgKGluX25taSgpKVxuK1x0XHRyZXR1cm47XG4rXHQvKiBHZXQgc3RhY2sgdHJhY2VzLiAqL1xuK1x0bnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyksIDEpO1xuK1x0LyogVHJpbSB0cmFjZXMgb2YgcHJvY2VzcyBjb250ZXh0IG5vdyBpZiBjYWxsZWQgZnJvbSBzb2Z0aXJxIGNvbnRleHQsIGZvclxuK1x0ICogd2Ugd2lsbCBlYXNpbHkgZXhoYXVzdCBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgaWYgd2UgZG9uJ3QgdHJpbSB0cmFjZXNcbitcdCAqIG9mIHByb2Nlc3MgY29udGV4dCB3aGVuIHRyeWluZyB0byBjb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcy5cbitcdCAqXG4rXHQgKiBBdm9pZCBrYWxsc3ltcyBsb29rdXAsIGJ5IHVzaW5nIGNhY2hlZCBhZGRyZXNzIHJlc29sdmVkIHVwb24gYm9vdC5cbitcdCAqL1xuK1x0aWYgKGluX3NvZnRpcnEoKSkge1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdFx0aWYgKGVudHJpZXNbaV0gXHUwMDNlPSBzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgIGVudHJpZXNbaV0gXHUwMDNjIGVuZF9vZl9oYW5kbGVfc29mdGlycXMpIHtcbitcdFx0XHRcdG5yX2VudHJpZXMgPSBpICsgMTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1x0LyogQ29tcGFyZSB3aXRoIGV4aXN0aW5nIGVudHJpZXMgYXQgYmVzdC1lZmZvcnQgYmFzaXMuIFNpbmNlIGR1cGxpY2F0ZWQgZW50cmllc1xuK1x0ICogY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZywgd2UgZG9uJ3QgdXNlIGxvY2sgaGVyZS5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCBsaXN0LFxuK1x0XHRcdFx0LyogbGlzdCBlbGVtZW50cyBjYW4ndCBnbyBhd2F5LiAqLyAxKSB7XG4rXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbitcdFx0XHRhdG9taWNfYWRkKGRlbHRhLCBcdTAwMjZwdHItXHUwMDNlY291bnQpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0fVxuK1x0LyogQWRkIGEgbmV3IGVudHJ5LiBXZSBkb24ndCByZS1jb21wYXJlIHdpdGggZXhpc3RpbmcgZW50cmllcyB3aXRoIGxvY2sgaGVsZCwgZm9yXG4rXHQgKiBkdXBsaWNhdGVkIGVudHJpZXMgY3JlYXRlZCBieSByYWNlIGNvbmRpdGlvbiB3aWxsIGJlIG1lcmdlZCB3aGVuIHJlcG9ydGluZy5cbitcdCAqIEJ1dCB3ZSB1c2UgcmF3IHNwaW5sb2NrIGhlcmUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHNvbWUgb3RoZXJcbitcdCAqIHJhdyBzcGlubG9jayBhbHJlYWR5IGhlbGQuXG4rXHQgKi9cbitcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xvY2ssIGZsYWdzKTtcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QpKSB7XG4rXHRcdC8qIFJlbW92ZSBvbmUgZW50cnkgZnJvbSBuZXRkZXZfdHJhY2VfYnVmZmVyX2xpc3QgYW5kIGluaXRpYWxpemUgaXQuICovXG4rXHRcdHB0ciA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2bmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0LCB0eXBlb2YoKnB0ciksIGxpc3QpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwdHItXHUwMDNlbGlzdCk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cHRyLVx1MDAzZWNvdW50LCBkZWx0YSk7XG4rXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcbitcdFx0bWVtbW92ZShwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7XG4rXHRcdC8qIEFwcGVuZCBpdCBpbiBSQ1UgbWFubmVyLCBmb3IgcmVhZGVycyBhcmUgbG9ja2xlc3MuICovXG4rXHRcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnB0ci1cdTAwM2VsaXN0LCBcdTAwMjZkZXYtXHUwMDNlbmV0ZGV2X3RyYWNlX2J1ZmZlcl9saXN0KTtcbitcdH0gZWxzZSB7XG4rXHRcdG5ldGRldl90cmFjZV9idWZmZXJfZXhoYXVzdGVkID0gdHJ1ZTtcbitcdH1cbitcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm5ldGRldl90cmFjZV9idWZmZXJfbG9jaywgZmxhZ3MpO1xuK31cbitFWFBPUlRfU1lNQk9MKHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcik7XG4rXG4rc3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHtcbitcdHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyO1xuK1x0c3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjtcbit9O1xuK1xuKy8qIFJlc29sdmUgYWRkcmVzcyBvZiBoYW5kbGVfc29mdGlycXMoKSBhbmQgY2FjaGUgaXQsIGluIG9yZGVyIHRvIGF2b2lkIGxvb2tpbmcgdXBcbisgKiBrYWxsc3ltcyBldmVyeSB0aW1lLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBuZXRkZXZfYWRkcl9yZXNvbHZlX2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgZW50cmllc1s0MF07XG4rXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG4rXHRjaGFyIGJ1ZmZlcltLU1lNX1NZTUJPTF9MRU5dID0geyB9O1xuK1x0dW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7XG4rXHRjaGFyICpjcDtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG4rXHRcdHNwcmludF9zeW1ib2woYnVmZmVyLCBlbnRyaWVzW2ldKTtcbitcdFx0aWYgKHN0cm5jbXAoYnVmZmVyLCBcImhhbmRsZV9zb2Z0aXJxc1wiLCAxNSkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGNwID0gc3RyY2hyKGJ1ZmZlciwgJysnKTtcbitcdFx0aWYgKCFjcCB8fCBzc2NhbmYoY3AsIFwiKyVseC8lbHhcIiwgXHUwMDI2b2Zmc2V0LCBcdTAwMjZzaXplKSAhPSAyKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRzdGFydF9vZl9oYW5kbGVfc29mdGlycXMgPSBlbnRyaWVzW2ldIC0gb2Zmc2V0O1xuK1x0XHRlbmRfb2ZfaGFuZGxlX3NvZnRpcnFzID0gc3RhcnRfb2ZfaGFuZGxlX3NvZnRpcnFzICsgc2l6ZTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjb21wbGV0ZShcdTAwMjZjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCB0aW1lcl9jb21wbGV0aW9uX3N0cnVjdCwgdGltZXIpLVx1MDAzZWNvbXBsZXRpb24pO1xuK31cbitcbitzdGF0aWMgdm9pZCBfX2luaXQgbmV0X2Rldl9yZWZjbnRfdHJhY2tlcl9pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IHRpbWVyX2NvbXBsZXRpb25fc3RydWN0IHRjO1xuK1xuK1x0dGltZXJfc2V0dXBfb25fc3RhY2soXHUwMDI2dGMudGltZXIsIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYywgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2dGMuY29tcGxldGlvbik7XG4rXHQvKiBTY2hlZHVsZSBhIGNhbGwgdG8gbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkuICovXG4rXHRtb2RfdGltZXIoXHUwMDI2dGMudGltZXIsIGppZmZpZXMpO1xuK1x0LyogV2FpdCBmb3IgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jKCkgdG8gYmUgY2FsbGVkLiAqL1xuK1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZ0Yy5jb21wbGV0aW9uKTtcbitcdC8qIFdhaXQgZm9yIG5ldGRldl9hZGRyX3Jlc29sdmVfZnVuYygpIHRvIGNvbXBsZXRlLiAqL1xuK1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2dGMudGltZXIpO1xuK1x0dGltZXJfZGVzdHJveV9vbl9zdGFjayhcdTAwMjZ0Yy50aW1lcik7XG4rfVxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2xvY2tfZGVidWcuYyBiL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuaW5kZXggOGE4MWM1NDMwNzA1My4uYzFhNDQ1OTRjNDkyNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2xvY2tfZGVidWcuY1xuKysrIGIvbmV0L2NvcmUvbG9ja19kZWJ1Zy5jXG5AQCAtMjksNiArMjksNyBAQCBpbnQgbmV0ZGV2X2RlYnVnX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4gXHRjYXNlIE5FVERFVl9ET1dOOlxuIFx0Y2FzZSBORVRERVZfUkVCT09UOlxuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbitcdGNhc2UgTkVUREVWX0RFQlVHX1VOUkVHSVNURVI6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VBRERSOlxuIFx0Y2FzZSBORVRERVZfUFJFX0NIQU5HRUFERFI6XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi5hZjdlOTk2MzY0OTU2IDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC02OTgsNyArNjk4LDExIEBAIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZClcbiB9XG4gRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jKTtcbiBcbi1zdGF0aWMgdm9pZCBfX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZW5kaWZcbit2b2lkIF9fc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IHByb3RvX29wcyAqb3BzID0gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKTtcbiBcbkBAIC03NzAsNyArNzc0LDEzIEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNhbGxfdHJhY2Vfc29ja19zZW5kX2xlbmd0aChzdHJ1Y3Qgc29jayAqc2ssIGludCByZXQsXG4gXHR0cmFjZV9zb2NrX3NlbmRfbGVuZ3RoKHNrLCByZXQsIDApO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuK3N0YXRpY1xuKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfS0FMTFNZTVMpXG4rbm9pbmxpbmVcbisjZWxzZVxuK2lubGluZVxuKyNlbmRpZlxuK2ludCBzb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnKVxuIHtcbiBcdGludCByZXQgPSBJTkRJUkVDVF9DQUxMX0lORVQoUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2VzZW5kbXNnLCBpbmV0Nl9zZW5kbXNnLFxuIFx0XHRcdFx0ICAgICBpbmV0X3NlbmRtc2csIHNvY2ssIG1zZyxcbkBAIC0xMTIwLDggKzExMzAsMTMgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2FsbF90cmFjZV9zb2NrX3JlY3ZfbGVuZ3RoKHN0cnVjdCBzb2NrICpzaywgaW50IHJldCwgaW50IGZcbiBcdHRyYWNlX3NvY2tfcmVjdl9sZW5ndGgoc2ssIHJldCwgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBzb2NrX3JlY3Ztc2dfbm9zZWMoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLVx0XHRcdFx0ICAgICBpbnQgZmxhZ3MpXG4rc3RhdGljXG4rI2lmIGRlZmluZWQoQ09ORklHX05FVF9ERVZfUkVGQ05UX1RSQUNLRVIpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19LQUxMU1lNUylcbitub2lubGluZVxuKyNlbHNlXG4raW5saW5lXG4rI2VuZGlmXG4raW50IHNvY2tfcmVjdm1zZ19ub3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBmbGFncylcbiB7XG4gXHRpbnQgcmV0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlcmVjdm1zZyxcbiBcdFx0XHRcdCAgICAgaW5ldDZfcmVjdm1zZyxcbkBAIC0yNjI0LDkgKzI2MzksMTIgQEAgc3RhdGljIGludCBjb3B5X21zZ2hkcl9mcm9tX3VzZXIoc3RydWN0IG1zZ2hkciAqa21zZyxcbiBcdHJldHVybiBlcnIgXHUwMDNjIDAgPyBlcnIgOiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHVzZWRfYWRkcmVzcyAqdXNlZF9hZGRyZXNzLFxuLVx0XHRcdCAgIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcbitzdGF0aWNcbisjaWYgZGVmaW5lZChDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUikgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKVxuK25vaW5saW5lXG4rI2VuZGlmXG4raW50IF9fX19zeXNfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2dfc3lzLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdCAgICBzdHJ1Y3QgdXNlZF9hZGRyZXNzICp1c2VkX2FkZHJlc3MsIHVuc2lnbmVkIGludCBhbGxvd2VkX21zZ2hkcl9mbGFncylcbiB7XG4gXHR1bnNpZ25lZCBjaGFyIGN0bFtzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgMjBdXG4gXHRcdFx0XHRfX2FsaWduZWQoc2l6ZW9mKF9fa2VybmVsX3NpemVfdCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MjA6NDUuMDE3MzkzODA0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4ODYzNTcyNjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRfRGV2aWNlIFJlZmNvdW50IFRyYWNrZXIgUGF0Y2ggZm9yIEtNU0FOIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyBkZXNpZ25lZCB0byBkZWJ1ZyBgbmV0X2RldmljZWAgcmVmY291bnQgbGVha3MuIEl0IHVzZXMgYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCBhbmQgZXNzZW50aWFsbHkgdHJhY2tzIGBfX2Rldl9wdXRgIGFuZCBgX19kZXZfaG9sZGAgY2FsbHMgYnkgc2F2aW5nIHN0YWNrIHRyYWNlcyBpbnRvIGEgYG5ldGRldl90cmFjZV9idWZmZXJgLiBUaGlzIGJ1ZmZlciBnZXRzIGR1bXBlZCBpZiB0aGUgbmV0X2RldmljZSBoYW5ncyB3aGlsZSB1bnJlZ2lzdGVyZWQsIGFuZCBhIG5ldyBgTkVUREVWX0RFQlVHX1VOUkVHSVNURVJgIGNvbW1hbmQgaXMgYWRkZWQuIFNvbWUgZnVuY3Rpb25zIGhhdmUgYWxzbyBiZWVuIG1hcmtlZCBgbm9pbmxpbmVgIGZvciBiZXR0ZXIgc3RhY2sgdHJhY2UgcmVhZGFiaWxpdHkuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIHRyaWdnZXIgdGhlIG5lZWQgZm9yIEtNU0FOIGFuYWx5c2lzLiBMZXQncyBsb29rIGF0IHRoZSBjcml0aWNhbCBzZWN0aW9ucy5cblxuRmlyc3QsIHRoZSB0cmFjZSBidWZmZXI6IGl0J3MgYSBzdGF0aWMgYnVmZmVyLCBkZWNsYXJlZCBhczpcblxuYGBgY1xuI2RlZmluZSBORVRERVZfVFJBQ0VfQlVGRkVSX1NJWkUgMzI3NjhcbnN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3RyYWNlX2J1ZmZlciB7XG5cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcblx0YXRvbWljX3QgY291bnQ7XG5cdGludCBucl9lbnRyaWVzO1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbMjBdO1xufSBuZXRkZXZfdHJhY2VfYnVmZmVyW05FVERFVl9UUkFDRV9CVUZGRVJfU0laRV07XG5gYGBcblxuQmVpbmcgc3RhdGljLCBpdCdzIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnQuXG5cblRoZSBgc2F2ZV9uZXRkZXZfdHJhY2VfYnVmZmVyYCBmdW5jdGlvbiBzYXZlcyB0aGUgc3RhY2sgdHJhY2VzLiBJbnNpZGUsIHdlIHNlZTpcblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbQVJSQVlfU0laRShwdHItXHUwMDNlZW50cmllcyldO1xuXHRpbnQgbnJfZW50cmllcztcbi4uLlxuXHRucl9lbnRyaWVzID0gc3RhY2tfdHJhY2Vfc2F2ZShlbnRyaWVzLCBBUlJBWV9TSVpFKHB0ci1cdTAwM2VlbnRyaWVzKSwgMSk7XG5gYGBcblxuVGhlIGNydWNpYWwgcGFydCBpcyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIHRoZSBgZW50cmllc2AgYXJyYXkuICBgc3RhY2tfdHJhY2Vfc2F2ZWAgcmV0dXJucyBgbnJfZW50cmllc2AsIHdoaWNoIGlzIGhvdyBtYW55IGVudHJpZXMgd2VyZSBhY3R1YWxseSB3cml0dGVuIHRvIHRoZSBgZW50cmllc2AgYXJyYXkuICBUaGVuLCB0aGVyZSdzIGEgY29tcGFyaXNvbjpcblxuYGBgY1xuXHRcdGlmIChwdHItXHUwMDNlbnJfZW50cmllcyA9PSBucl9lbnRyaWVzIFx1MDAyNlx1MDAyNlxuXHRcdCAgICAhbWVtY21wKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkge1xuYGBgXG5cblRoaXMgaXMgKnNhZmUqLiBgbWVtY21wYCBvbmx5IGNvbXBhcmVzIHVwIHRvIHRoZSBpbml0aWFsaXplZCBgbnJfZW50cmllc2AuIFRoZSBjb2RlIGlzIGNhcmVmdWwuICBTaW1pbGFybHksIHdoZW4gY29weWluZzpcblxuYGBgY1xuXHRcdHB0ci1cdTAwM2Vucl9lbnRyaWVzID0gbnJfZW50cmllcztcblx0XHRtZW1tb3ZlKHB0ci1cdTAwM2VlbnRyaWVzLCBlbnRyaWVzLCBucl9lbnRyaWVzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTtcbmBgYFxuXG5UaGUgYG1lbW1vdmVgIGFsc28gb25seSBjb3BpZXMgdGhlIGluaXRpYWxpemVkIHBhcnQuICBUaGlzIGlzIGFsbCBpbnRlcm5hbCBrZXJuZWwgc3RhdGU7IG5vdGhpbmcgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb250cm9sIGZsb3cgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYHN0YWNrX3RyYWNlX3NhdmVgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgdGhlIGBlbnRyaWVzYCBhcnJheSB1cCB0byBgbnJfZW50cmllc2AuXG5cbkxldCdzIGRvdWJsZS1jaGVjay4gVGhlIGNvZGUgYWxzbyB1c2VzIGBzbnByaW50ZmAgaW4gdGhlIGB0cmltX25ldGRldl90cmFjZWAgZnVuY3Rpb246XG5cbmBgYGNcblx0Y2hhciBidWZmZXJbMzJdID0geyB9O1xuLi4uXG5cdFx0c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIFwiJXBzXCIsICh2b2lkICopZW50cmllc1tpXSk7XG5gYGBcblxuVGhpcyBpcyBhbHNvIHNhZmUuIGBzbnByaW50ZmAgd29ya3MganVzdCBmaW5lIG9uIGluZGl2aWR1YWwgZW50cmllcy5cblxuU28sIGluIHN1bW1hcnk6IHRoaXMgcGF0Y2ggaXMgKnB1cmVseSogZm9yIGRlYnVnZ2luZyByZWZjb3VudCBsZWFrcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBObyBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGFyZSBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIE5lZWRzS01TQU4gc2hvdWxkIGJlICpmYWxzZSouXG5cbkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBgZW50cmllc2AgYXJyYXkgaW4gYHNhdmVfbmV0ZGV2X3RyYWNlX2J1ZmZlcmAgaXMgcG9wdWxhdGVkIGJ5IGBzdGFja190cmFjZV9zYXZlYCwgd2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd3JpdHRlbiwgYG5yX2VudHJpZXNgLiBUaGUgcmVzdCBpcyBpbmRlZWQgdW5pbml0aWFsaXplZCwgYnV0IHRoZSBjb2RlIG9ubHkgdXNlcyBgbnJfZW50cmllc2AgdG8gaW5kZXggYW5kIHJlYWQ6XG5cbmBgYGNcblx0XHRpZiAocHRyLVx1MDAzZW5yX2VudHJpZXMgPT0gbnJfZW50cmllcyBcdTAwMjZcdTAwMjZcblx0XHQgICAgIW1lbWNtcChwdHItXHUwMDNlZW50cmllcywgZW50cmllcywgbnJfZW50cmllcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpIHtcbmBgYFxuXG5hbmRcblxuYGBgY1xuXHRcdG1lbW1vdmUocHRyLVx1MDAzZWVudHJpZXMsIGVudHJpZXMsIG5yX2VudHJpZXMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpO1xuYGBgXG5cblNvLCBpdCAqb25seSogcmVhZHMgdGhlIGluaXRpYWxpemVkIHBhcnRzIG9mIHRoZSBhcnJheXMuXG5cbkZpbmFsbHksIHRoZSBgbmV0ZGV2X2FkZHJfcmVzb2x2ZV9mdW5jYDpcblxuYGBgY1xuXHR1bnNpZ25lZCBsb25nIGVudHJpZXNbNDBdO1xuXHRpbnQgbnJfZW50cmllcyA9IHN0YWNrX3RyYWNlX3NhdmUoZW50cmllcywgQVJSQVlfU0laRShlbnRyaWVzKSwgMSk7XG5cdGNoYXIgYnVmZmVyW0tTWU1fU1lNQk9MX0xFTl0gPSB7IH07XG4uLi5cblx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZW50cmllczsgaSsrKSB7XG5cdFx0c3ByaW50X3N5bWJvbChidWZmZXIsIGVudHJpZXNbaV0pO1xuYGBgXG5cbkFnYWluLCB0aGUgY29kZSBvbmx5IHJlYWRzIHVwIHRvIGBuclxuXG4iLCJJbnB1dFRva2VucyI6ODMyNCwiT3V0cHV0VG9rZW5zIjoyMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTc4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MjE6MDMuODgwOTcwMDYzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVidWdnaW5nIG1lY2hhbmlzbSBmb3IgdHJhY2tpbmcgYG5ldF9kZXZpY2VgIHJlZmVyZW5jZSBjb3VudCBsZWFrcyAoYENPTkZJR19ORVRfREVWX1JFRkNOVF9UUkFDS0VSYCkuIEl0IHJlY29yZHMgc3RhY2sgdHJhY2VzIG9uIGBfX2Rldl9ob2xkYCBhbmQgYF9fZGV2X3B1dGAgaW50byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciBhbmQgZHVtcHMgdGhlbSBpZiBhIGRldmljZSBmYWlscyB0byB1bnJlZ2lzdGVyIHdpdGhpbiBhIHRpbWVvdXQuIEFsbCBzdGFjayB0cmFjZXMgYXJlIHNhdmVkIHVzaW5nIGBzdGFja190cmFjZV9zYXZlYCwgYW5kIG9ubHkgdGhlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgbnVtYmVyIG9mIGVudHJpZXMgKGBucl9lbnRyaWVzYCkgYXJlIHN1YnNlcXVlbnRseSByZWFkLCBjb21wYXJlZCwgb3IgY29waWVkLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBpbiB0aGUgdHJhY2UgYnVmZmVyLCB1c2UtYWZ0ZXItZnJlZSBvbiBkZXZpY2UgcG9pbnRlcnMsIG9yIGxvY2tpbmcgaXNzdWVzKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlYnVnZ2luZyBtZWNoYW5pc20gZm9yIHRyYWNraW5nIGBuZXRfZGV2aWNlYCByZWZlcmVuY2UgY291bnQgbGVha3MgKGBDT05GSUdfTkVUX0RFVl9SRUZDTlRfVFJBQ0tFUmApLiBJdCByZWNvcmRzIHN0YWNrIHRyYWNlcyBvbiBgX19kZXZfaG9sZGAgYW5kIGBfX2Rldl9wdXRgIGludG8gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgYW5kIGR1bXBzIHRoZW0gaWYgYSBkZXZpY2UgZmFpbHMgdG8gdW5yZWdpc3RlciB3aXRoaW4gYSB0aW1lb3V0LiBBbGwgc3RhY2sgdHJhY2VzIGFyZSBzYXZlZCB1c2luZyBgc3RhY2tfdHJhY2Vfc2F2ZWAsIGFuZCBvbmx5IHRoZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIG51bWJlciBvZiBlbnRyaWVzIChgbnJfZW50cmllc2ApIGFyZSBzdWJzZXF1ZW50bHkgcmVhZCwgY29tcGFyZWQsIG9yIGNvcGllZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciwgdXNlLWFmdGVyLWZyZWUgb24gZGV2aWNlIHBvaW50ZXJzLCBvciBsb2NraW5nIGlzc3Vlcykgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjw7c7[1] Phase: Succeeded StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 18:21:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2] Phase: Succeeded StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 18:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 18:21:15 +0000 UTC FinishedAt: 2026-08-12 18:21:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-4009834409/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 18:21:25 +0000 UTC FinishedAt: 2026-08-12 18:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 18:21:25 +0000 UTC FinishedAt: 2026-08-12 18:42:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b2fb4443-0155-4e00-a91a-011a612d7e56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-4009834409/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e1d429c5-60c5-4477-a989-11e89c4d9031", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3891765255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 18:21:25 +0000 UTC FinishedAt: 2026-08-12 18:42:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b2fb4443-0155-4e00-a91a-011a612d7e56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-4009834409/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "e1d429c5-60c5-4477-a989-11e89c4d9031", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3891765255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 18:42:23 +0000 UTC FinishedAt: 2026-08-12 18:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 18:42:23 +0000 UTC FinishedAt: 2026-08-12 18:42:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 18:42:23 +0000 UTC FinishedAt: 2026-08-12 18:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 18:42:23 +0000 UTC FinishedAt: 2026-08-12 18:42:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-459096636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 18:42:33 +0000 UTC FinishedAt: 2026-08-12 18:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 18:42:33 +0000 UTC FinishedAt: 2026-08-12 18:44:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1d429c5-60c5-4477-a989-11e89c4d9031,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3891765255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 18:44:38 +0000 UTC FinishedAt: 2026-08-12 18:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 18:44:38 +0000 UTC FinishedAt: 2026-08-12 18:44:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 18:44:38 +0000 UTC FinishedAt: 2026-08-12 19:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 18:44:38 +0000 UTC FinishedAt: 2026-08-12 19:01:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b2fb4443-0155-4e00-a91a-011a612d7e56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-459096636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cb01b338-074f-4d38-98e1-71fbef5a1a33", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3947957400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 18:44:38 +0000 UTC FinishedAt: 2026-08-12 19:01:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b2fb4443-0155-4e00-a91a-011a612d7e56,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-459096636/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "cb01b338-074f-4d38-98e1-71fbef5a1a33", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3947957400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 19:01:57 +0000 UTC FinishedAt: 2026-08-12 19:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 19:01:57 +0000 UTC FinishedAt: 2026-08-12 19:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 19:01:57 +0000 UTC FinishedAt: 2026-08-12 19:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 19:01:57 +0000 UTC FinishedAt: 2026-08-12 19:03:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb01b338-074f-4d38-98e1-71fbef5a1a33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3947957400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e1d429c5-60c5-4477-a989-11e89c4d9031,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb01b338-074f-4d38-98e1-71fbef5a1a33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3891765255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3947957400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 19:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 19:04:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-1424883717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 19:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 19:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 19:04:04 +0000 UTC FinishedAt: 2026-08-12 19:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 19:04:14 +0000 UTC FinishedAt: 2026-08-12 22:05:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjw7c7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["save_netdev_trace_buffer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3d6d817622b0a9721e3cc404df3469171582be13","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEV_REFCNT_TRACKER","KALLSYMS"],"series_id":"943750aa-058d-4d57-b090-ef4ba4d15dcf","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 19:04:14 +0000 UTC FinishedAt: 2026-08-12 22:05:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1d429c5-60c5-4477-a989-11e89c4d9031,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cb01b338-074f-4d38-98e1-71fbef5a1a33,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3891765255/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-build-action-3947957400/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjw7c7/series-workflowjw7c7-convert-artifact-1424883717/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}