Name: series-workflowfv5cj Phase: Succeeded StartedAt: 2026-08-13 17:43:18 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[0] Phase: Succeeded StartedAt: 2026-08-13 17:43:18 +0000 UTC FinishedAt: 2026-08-13 18:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 17:43:18 +0000 UTC FinishedAt: 2026-08-13 18:32:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "537d3548-fb29-44a0-b057-3df3b9840a46" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_set_dio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3Bfc2V0X2RpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDg2MzlmYTM0Yjg0NzAuLjZmMTI5NzYwMzViMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC0xNDUyLDEyICYjNDM7MTQ1MiwxMiBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gXHR9XG4gXG4mIzQzO1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0aWYgKHVzZV9kaW8pXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMTQ1MiwxMiAmIzQzOzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXZmc19mc3luYyhsby0mZ3Q7bG9fYmFja2luZ19maWxlLCAwKTsKIAl9CiAKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwogCWlmICh1c2VfZGlvKQogCQlsby0mZ3Q7bG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPOwogCWVsc2UKIAkJbG8tJmd0O2xvX2ZsYWdzICZhbXA7PSB+TE9fRkxBR1NfRElSRUNUX0lPOwotCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTG9vcCBCbG9jayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBsb29wIGJsb2NrIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29kZSByZW9yZGVyaW5nIHdpdGhpbiB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24uICBJdCYjMzk7cyBtb3ZpbmcgdGhlIGNhbGwgdG8gYGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgdGhlIHF1ZXVlIGxpbWl0cyBhcmUgaGFuZGxlZCByZWxhdGl2ZSB0byBxdWV1ZSBmcmVlemluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgb3JkZXJpbmcgbWF0dGVycy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIGltcGFjdCBpcyBsaWtlbHkgb24gRGlyZWN0IEkvTyAoRElPKSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgbG9vcCBkZXZpY2UuIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYGxvb3Bfc2V0X2Rpb2AgYW5kIHNlZSBob3cgdGhlc2UgdHdvIGNhbGxzIGludGVyYWN0IGFuZCB3aGF0IGVmZmVjdHMgdGhpcyByZW9yZGVyaW5nIG1pZ2h0IGhhdmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsaW1pdHMgdXBkYXRlIGludGVyYWN0cyB3aXRoIHRoZSBmcmVlemluZyBvZiB0aGUgcXVldWUuIElzIHRoaXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnM/IE9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgaW50ZW50IGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTQyND1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mzc6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE1PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcdFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIGlvY3RsIEhhbmRsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgZm9yIGBMT09QX1NFVF9ESVJFQ1RfSU9gLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zLiBJdCYjMzk7cyBtb3ZpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgICpiZWZvcmUqIGBibGtfbXFfZnJlZXplX3F1ZXVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5PyYjMzQ7IEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHJlLW9yZGVyaW5nIG9wZXJhdGlvbnMgbGlrZSB0aGlzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYXNvbiwgZXNwZWNpYWxseSBpbiBrZXJuZWwgY29kZSB3aGVyZSBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgYSBjb25zdGFudCBjb25jZXJuLgoKQWgsIEkgc2VlIGl0IG5vdy4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCBhIHBvdGVudGlhbCBwcm9ibGVtIHdoZXJlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBvciwgbW9yZSBnZW5lcmFsbHksIGV4ZWN1dGUgc29tZSBvcGVyYXRpb24gdGhhdCBjb3VsZCBibG9jay4gSWYgYGJsa19tcV9mcmVlemVfcXVldWVgIGlzIGNhbGxlZCAqYmVmb3JlKiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIGFuZCB0aGUgbGF0dGVyIGJsb2NrcyBmb3IgYW55IHJlYXNvbiB3aGlsZSBob2xkaW5nIGEgbG9jaywgd2UmIzM5O3JlIGluIGRlYWRsb2NrIHRlcnJpdG9yeS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gdGhhdCBjb3VsZCBicmluZyB0aGUgd2hvbGUgdGhpbmcgZG93bi4KCldhaXQgYSBzZWNvbmTigKYgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgICpkb2VzKiB0YWtlIGEgbG9jaywgZG9lc24mIzM5O3QgaXQ/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBtYWtlIHN1cmUgbXkgaW5zdGluY3RzIGFyZSBjb3JyZWN0LiBHb3R0YSBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGF2b2lkaW5nIGEgY3JpdGljYWwgcHJvYmxlbSBoZXJlLiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZCAtIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHVwZGF0aW5nIGNlcnRhaW4gcXVldWUgbGltaXRzLCBzbyBpdCB2ZXJ5IGxpa2VseSBuZWVkcyB0byBtYW5hZ2UgYW5kIHByb3RlY3QgdGhlc2UgcXVldWUgbGltaXRzIHdpdGggbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW50ZWdyaXR5LmM9MjI2PXN0YXRpYyBzc2l6ZV90IGZsYWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQsXG4tLVxuYmxvY2svYmxrLWludGVncml0eS5jLTIzOC1cdC8qIG5vdGUgdGhhdCB0aGUgZmxhZ3MgYXJlIGludmVydGVkIHZzIHRoZSB2YWx1ZXMgaW4gdGhlIHN5c2ZzIGZpbGVzICovXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjM5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDAtXHRpZiAodmFsKVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM4LSAqXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1Mzk6ICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBvYnRhaW5lZCBmcm9tIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQwLSAqIGFuZCB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBmcm96ZW4gdGhlIHF1ZXVlIG9yXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTcxPUVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKTtcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzctICpcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU3ODogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzktICogYW5kIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlcyBieSB0aGUgY2FsbGVyIHRvIEBxLiAgRnJlZXplcyB0aGUgcXVldWVcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01OTY9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKTtcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MDMtICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBmcmVzaGx5IGluaXRpYWxpemVkIHRvIEBxLlxuYmxvY2svYmxrLXNldHRpbmdzLmM6NjA0OiAqIFRvIHVwZGF0ZSBleGlzdGluZyBsaW1pdHMgdXNlIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKSBhbmRcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNS0gKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIGluc3RlYWQuXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9ODc5PXF1ZXVlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtODkxLVxuYmxvY2svYmxrLXN5c2ZzLmM6ODkyOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5ibG9jay9ibGstc3lzZnMuYy04OTMtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjA1OD1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwNjYtXG5ibG9jay9ibGstem9uZWQuYzoyMDY3Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay16b25lZC5jLTIwNjgtXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0xMzAxPXZvaWQgZHJiZF9yZWNvbnNpZGVyX3F1ZXVlX3BhcmFtZXRlcnMoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM0LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoxMzM1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNi1cdGlmIChiZGV2KSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI1PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2LXtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzpcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwMz1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4MzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4NC1cdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXHUwMDI2bGltLCBjb25maWctXHUwMDNlYmxvY2tfc2l6ZSk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTEzNz1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cdCAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTE2MDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTE2MS1cdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM3PXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDU1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDU2LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ5OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0OTk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDAtXHRsb29wX3VwZGF0ZV9saW1pdHMobG8sIFx1MDAyNmxpbSwgYXJnKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTMzND1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUzLVxuZHJpdmVycy9ibG9jay9uYmQuYzozNTQ6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzU1LVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xMDk0PWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTA5LVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTExMDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTExLVx0aWYgKHZpcnRibGtfZ2V0X2NhY2hlX21vZGUodmRldikpXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz0yMDA2PXN0YXRpYyBpbnQgYmxraWZfcmVjb3ZlcihzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTQtXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIwMTU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGluZm8tXHUwMDNlcnEpO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE2LVx0YmxrZnJvbnRfZ2F0aGVyX2JhY2tlbmRfZmVhdHVyZXMoaW5mbyk7XG4tLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jPTIwMjg9aW50IGRtX3RhYmxlX3NldF9yZXN0cmljdGlvbnMoc3RydWN0IGRtX3RhYmxlICp0LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4Mi1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYzoyMDgzOlx0b2xkX2xpbWl0cyA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NC1cdHIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1pdHMpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy01OTcwLVxuZHJpdmVycy9tZC9tZC5jOjU5NzE6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9tZC9tZC5jLTU5NzItXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gbGJzO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz02MjI4PWludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjI0MS1cbmRyaXZlcnMvbWQvbWQuYzo2MjQyOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbWQvbWQuYy02MjQzLVx0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2bGltLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4tLVxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MjY3LVx0XHRyZXR1cm47XG5kcml2ZXJzL21kL21kLmM6NjI2ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL21kL21kLmMtNjI2OS1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5MS1cdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuZHJpdmVycy9tZC9yYWlkNS5jOjcxOTI6XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvcmFpZDUuYy03MTkzLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI1LVx0bnZtZV9zZXRfY3RybF9saW1pdHMobnMtXHUwMDNlY3RybCwgXHUwMDI2bGltLCBmYWxzZSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQzOC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDM5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDQwLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MzpcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjQtXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTctXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY1ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoY3RybC1cdTAwM2VhZG1pbl9xKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0zNjU5LVx0bnZtZV9zZXRfY3RybF9saW1pdHMoY3RybCwgXHUwMDI2bGltLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMyND1zdGF0aWMgaW50IGRhc2Rfc3RhdGVfYmFzaWNfdG9fcmVhZHkoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDYtXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jOjM0NzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoYmxvY2stXHUwMDNlZ2RwLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ4LVx0bGltLm1heF9kZXZfc2VjdG9ycyA9IGRldmljZS1cdTAwM2VkaXNjaXBsaW5lLVx1MDAzZW1heF9zZWN0b3JzKGJsb2NrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jPTEwNjc9bXBpM21yX3VwZGF0ZV9zZGV2KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzctXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jOjEwNzg6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzktXHRtcGkzbXJfY29uZmlndXJlX3RndF9kZXYodGd0ZGV2LCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYz04ODA9c3RhdGljIGludCBzY3NpX2FkZF9sdW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBjaGFyICppbnFfcmVzdWx0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDg5LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTA5MDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDkxLVx0aWYgKCpiZmxhZ3MgXHUwMDI2IEJMSVNUX01BWF81MTIpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9MjIwPWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0yNTgtXG5kcml2ZXJzL3Njc2kvc2QuYzoyNTk6XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTI2MC1cdFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXHUwMDI2bGltKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy01OTItXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTM6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcdTAwMjZsaW0sIG1vZGUpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTY3NT1tYXhfd3JpdGVfc2FtZV9ibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy03MDEtXG5kcml2ZXJzL3Njc2kvc2QuYzo3MDI6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL3Njc2kvc2QuYy03MDMtXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTM3NjA9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTM3ODktXG5kcml2ZXJzL3Njc2kvc2QuYzozNzkwOlx0KmxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTM3OTEtXG4tLVxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcbi0tXG5kcml2ZXJzL3Njc2kvc3IuYy00ODgtXG5kcml2ZXJzL3Njc2kvc3IuYzo0ODk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9zY3NpL3NyLmMtNDkwLVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHNlY3Rvcl9zaXplO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYz01ODQ9c3RhdGljIHNzaXplX3QgbWF4X3NlY3RvcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVx1MDAzZXJlcXVlc3RfcXVldWUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5Ni1cdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwODgtLyoqXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEwODk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSAtIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTAtICogQHE6XHRcdHF1ZXVlIHRvIHVwZGF0ZVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBxdWV1ZV9saW1pdHNcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwMDpxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTAxLVx0X19hY3F1aXJlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTExMj1pbnQgYmxrX3ZhbGlkYXRlX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTExOC0gKiBUaGlzIGZ1bmN0aW9ucyBjYW5jZWxzIGFuIGF0b21pYyB1cGRhdGUgb2YgdGhlIHF1ZXVlIGxpbWl0cyBzdGFydGVkIGJ5XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMTk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBhZnRlclxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTIwLSAqIHN0YXJ0aW5nIHVwZGF0ZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBCbG9jayBEZXZpY2UgUXVldWUgVXBkYXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gc3VzcyBvdXQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIHVwZGF0aW5nIGJsb2NrIGRldmljZSBxdWV1ZSBsaW1pdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBncmFicyBhIGxvY2ssIHNwZWNpZmljYWxseSBgcS0mZ3Q7bGltaXRzX2xvY2tgLiBUaGVuIEkgc2VlIHRoYXQgYGJsa19tcV9mcmVlemVfcXVldWVgIGJhc2ljYWxseSB3YWl0cyBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlIG9uIHRoZSBxdWV1ZS4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGRlYWRsb2NrLiBJZiBhIHJlcXVlc3QgKnNvbWVob3cqIGdldHMgYmxvY2tlZCB3YWl0aW5nIGZvciBgcS0mZ3Q7bGltaXRzX2xvY2tg4oCUd2hpY2ggaXMgdXN1YWxseSB1bmxpa2VseSwgc2luY2UgdGhlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCBmb3IgYSBzaG9ydCB0aW1l4oCUb3IgaWYgYGJsa19tcV9mcmVlemVfcXVldWVgICppdHNlbGYqIGdldHMgY2FsbGVkIHdoaWxlIHRoZSBgbGltaXRzX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0uIFNvbWV0aGluZyBlbHNlIG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgYW5kIHdhaXRpbmcgZm9yIGBsaW1pdHNfbG9ja2AuCgpUaGVuIEkgcmVtZW1iZXIgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCAqcmVsZWFzZXMqIHRoYXQgbG9jay4gT2theSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkmIzM5O20gY29tcGFyaW5nIHRoZSBvbGQgY29kZSB3aXRoIHRoZSBuZXcgY29kZSB0byBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgb2xkIHNlcXVlbmNlIHdhczogZnJlZXplIHRoZSBxdWV1ZSwgc2V0IHRoZSBkaXJlY3QgSU8gZmxhZywgc3RhcnQgdGhlIHVwZGF0ZSwgc2V0IHRoZSBETUEgbGltaXQsIGNvbW1pdCB0aGUgdXBkYXRlLCB0aGVuIHVuZnJlZXplLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGluZ3MgZGlmZmVyZW50bHk6IHN0YXJ0IHRoZSB1cGRhdGUsIGZyZWV6ZSB0aGUgcXVldWUsIHNldCB0aGUgZGlyZWN0IElPIGZsYWcsIHNldCB0aGUgRE1BIGxpbWl0LCBjb21taXQgdGhlIHVwZGF0ZSwgdGhlbiB1bmZyZWV6ZS4KClRoZSBrZXkgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSB0aGUgb3JkZXIgb2YgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIEl0IGxvb2tzIGxpa2UgdGhlIGZyZWV6ZSBpcyBub3cgaGFwcGVuaW5nICphZnRlciogYWNxdWlyaW5nIHRoZSBgbGltaXRzX2xvY2tgLiBUaGlzIGNvdWxkIGJlIHNhZmVyLCBhc3N1bWluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHByb3Blcmx5IHJlbGVhc2VzIHRoZSBsb2NrLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgdG8gYmUgc3VyZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHNhZmUgbWV0aG9kIGlmIGl0cyBvbmx5IGZ1bmN0aW9uIGlzIHRvIHJlbGVhc2UgdGhlIGxvY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWludGVncml0eS5jPTIyNj1zdGF0aWMgc3NpemVfdCBmbGFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50LFxuLS1cbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDQtXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjQ1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHEsIFx1MDAyNmxpbSk7XG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjQ2LVx0aWYgKGVycilcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01MjI9aW50IGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzNC0vKipcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzNTogKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM2LSAqIEBxOlx0XHRxdWV1ZSB0byB1cGRhdGVcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NDU6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQ2LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTcwLX1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU3MTpFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSk7XG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzItXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzMtLyoqXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NzQ6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuIC0gY29tbWl0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzUtICogQHE6XHRcdHF1ZXVlIHRvIHVwZGF0ZVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU4My0gKi9cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU4NDppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTg1LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTkwLVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuYmxvY2svYmxrLXNldHRpbmdzLmM6NTkxOlx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU5Mi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk1LX1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU5NjpFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk3LVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNC0gKiBUbyB1cGRhdGUgZXhpc3RpbmcgbGltaXRzIHVzZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKSBpbnN0ZWFkLlxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA2LSAqXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NjA5PWludCBxdWV1ZV9saW1pdHNfc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjExLVx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYxMjpcdHJldHVybiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW0pO1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNjEzLX1cbi0tXG5ibG9jay9ibGstc3lzZnMuYz0xODk9cXVldWVfcmFfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9ibGstc3lzZnMuYy0yMDAtXHQgKiBpcyB1c3VhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0aGUgcXVldWUgbGltaXRzIGJ5XG5ibG9jay9ibGstc3lzZnMuYzoyMDE6XHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpLlxuYmxvY2svYmxrLXN5c2ZzLmMtMjAyLVx0ICpcbi0tXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9ibGstc3lzZnMuYy04OTktXG5ibG9jay9ibGstc3lzZnMuYzo5MDA6XHRcdHJlcyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcdTAwMjZsaW0pO1xuYmxvY2svYmxrLXN5c2ZzLmMtOTAxLVx0XHRpZiAocmVzKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMTIwLWNvbW1pdDpcbmJsb2NrL2Jsay16b25lZC5jOjIxMjE6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuYmxvY2svYmxrLXpvbmVkLmMtMjEyMi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTE0MDAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjE0MDE6XHRpZiAocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTQwMi1cdFx0ZHJiZF9lcnIoZGV2aWNlLCBcJiMzNDtzZXR0aW5nIG5ldyBxdWV1ZSBsaW1pdHMgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjU9c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQzLVx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyNDQ6XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NS19XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwMz1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg1LVx0LyogTm8gbmVlZCB0byBmcmVlemUgdGhlIHF1ZXVlIGFzIHRoZSBkZXZpY2UgaXNuJiMzOTt0IGJvdW5kIHlldC4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODY6XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Ny1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYzLVx0bGltLmlvX21pbiA9IFNFQ1RPUl9TSVpFO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTE2NDpcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM3PXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDYyOlx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDYzLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQ2Nz1zdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDItXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwMzpcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNC1cdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0zMzQ9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3My1cdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzc0Olx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3NS1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xMDk0PWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTE0LVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTE1Olx0aSA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNi1cdGlmIChpKVxuLS1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE3LVx0YmxraWZfc2V0X3F1ZXVlX2xpbWl0cyhpbmZvLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMDE4Olx0cmMgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShpbmZvLVx1MDAzZXJxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE5LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODMtXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvZG0tdGFibGUuYzoyMDg0Olx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NS1cdGlmIChyKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy01OTc0LVx0XHRtZG5hbWUobWRkZXYpKTtcbmRyaXZlcnMvbWQvbWQuYzo1OTc1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbWQvbWQuYy01OTc2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21kL21kLmM9NjIyOD1pbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTYyNTItXG5kcml2ZXJzL21kL21kLmM6NjI1MzpcdHJldHVybiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9tZC9tZC5jLTYyNTQtfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02MjU4PXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcylcbi0tXG5kcml2ZXJzL21kL21kLmMtNjI2OS1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbmRyaXZlcnMvbWQvbWQuYzo2MjcwOlx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbWQvbWQuYy02MjcxLVx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5OC1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTk5Olx0XHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9tZC9yYWlkNS5jLTcyMDAtXHR9XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMTc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI3LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMjg6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjktXHRzZXRfZGlza19ybyhucy1cdTAwM2VkaXNrLCBudm1lX25zX2lzX3JlYWRvbmx5KG5zLCBpbmZvKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDg4Olx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDg5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1OTMtXHRcdGxpbS53cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkgPSBuc19saW0tXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1OTQ6XHRcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTk1LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTktXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcdTAwMjZsaW0sIHRydWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjM2NjA6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShjdHJsLVx1MDAzZWFkbWluX3EsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY2MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcwLVx0fVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozNzE6XHRyYyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGJsb2NrLVx1MDAzZWdkcC1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jOjEwODA6XHRXQVJOX09OX09OQ0UocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlLCBcdTAwMjZsaW0pKTtcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA4MS19XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTExMDktXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTExMDpcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTExLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zY3NpL3NkLmMtMjYwLVx0XHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NkLmM6MjYxOlx0XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLFxuZHJpdmVycy9zY3NpL3NkLmMtMjYyLVx0XHRcdFx0XHUwMDI2bGltKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcdTAwMjZsaW0sIG1vZGUpO1xuZHJpdmVycy9zY3NpL3NkLmM6NTk1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTU5Ni1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cdHNkX2NvbmZpZ193cml0ZV9zYW1lKHNka3AsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL3Njc2kvc2QuYzo3MDQ6XHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NkLmMtNzA1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz0zNzYwPXN0YXRpYyB2b2lkIHNkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0zODY3LVxuZHJpdmVycy9zY3NpL3NkLmM6Mzg2ODpcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIGxpbSk7XG5kcml2ZXJzL3Njc2kvc2QuYy0zODY5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0zODczLVx0ICogUXVlcnkgY29uY3VycmVudCBwb3NpdGlvbmluZyByYW5nZXMgYWZ0ZXJcbmRyaXZlcnMvc2NzaS9zZC5jOjM4NzQ6XHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIHVubG9ja2VkIHEtXHUwMDNlbGltaXRzX2xvY2sgdG8gYXZvaWRcbmRyaXZlcnMvc2NzaS9zZC5jLTM4NzUtXHQgKiBkZWFkbG9jayB3aXRoIHEtXHUwMDNlc3lzZnNfZGlyX2xvY2sgYW5kIHEtXHUwMDNlc3lzZnNfbG9jay5cbi0tXG5kcml2ZXJzL3Njc2kvc3IuYz00NzY9c3RhdGljIGludCBzcl9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IHNjc2lfY2QgKmNkKVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTQ5MS1cdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuZHJpdmVycy9zY3NpL3NyLmM6NDkyOlx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NyLmMtNDkzLX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM9NTg0PXN0YXRpYyBzc2l6ZV90IG1heF9zZWN0b3JzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVx0bGltLm1heF9od19zZWN0b3JzID0gbXM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk3Olx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTgtXHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTMtICogdG8gcHJldmVudCBvdGhlciB1cGRhdGVzIGFuZCByZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIHRoYXRcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA5NDogKiB0aGUgY2FsbGVyIGNhbiBtb2RpZnkuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTUtICogdG8gZmluaXNoIHRoZSB1cGRhdGUuXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTAwPXF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA1LX1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwNjppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA3LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXHUwMDI2cS1cdTAwM2VsaW1pdHNfbG9jayk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMDg6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA5LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXHUwMDI2cS1cdTAwM2VsaW1pdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZTogRGVhZGxvY2sgQXZvaWRhbmNlKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgcmVsZWFzZXMgdGhlIGxvY2ssIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucy4gVGhlIG9sZCBjb2RlIGhhZCBhIHNwZWNpZmljIHNlcXVlbmNlOiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLCB0aGVuIGdyYWIgdGhlIGxpbWl0cyB1cGRhdGUgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIG1vZGlmeSB0aGUgRE1BIGxpbWl0LCBhbmQgZmluYWxseSBjb21taXQgdGhlIHVwZGF0ZSBhbmQgdW5mcmVlemUuCgpUaGUgbmV3IGNvZGUgcmV2ZXJzZXMgdGhpcy4gV2Ugbm93IHN0YXJ0IHRoZSB1cGRhdGUgZmlyc3Qgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsICp0aGVuKiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IGlmIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB0YWtlcyB0aGUgYGxpbWl0c19sb2NrYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIHdhaXRzIG9uIGNvbXBsZXRpb24gb2YgcmVxdWVzdHMsIGFuZCBzb21lIG90aGVyIHJlcXVlc3QgaXMgKmFsc28qIHdhaXRpbmcgb24gdGhhdCBzYW1lIGBsaW1pdHNfbG9ja2AgKG9yIHNvbWV0aGluZyBpbmRpcmVjdGx5IGRlcGVuZGluZyBvbiBpdCksIHdlIGNvdWxkIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrLgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgd2hldGhlciBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIGl0c2VsZiBtaWdodCBiZSB0aGUgb25lIGZyZWV6aW5nIHRoZSBxdWV1ZSwgYnV0IG5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgZG9lcy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGZ1bGwgcGljdHVyZS4gYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCBkb2VzbiYjMzk7dCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgaXQgKmRvZXMqIHVwZGF0ZSB0aGUgbGltaXRzLCBhbmQgdGhhdCBjb3VsZCBiZSB3aGVyZSB0aGUgY29udGVudGlvbiBsaWVzLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgaW50ZXJuYWwgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24gdGhhdCBjb3VsZCBjYXVzZSB0aGF0IGZyZWV6aW5nIGJlaGF2aW91ci4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBibG9jay9ibGstc2V0dGluZ3MuY2AgZmlsZSBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zZXR0aW5ncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQ0LSAqL1xuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU0Ni1cdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYmxvY2sgZGV2aWNlIHNldHRpbmdzLiBJJiMzOTttIGxvb2tpbmcgYXQgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCB3aXRoaW4gYGJsb2NrL2Jsay1zZXR0aW5ncy5jYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgKmNvbW1pdHRpbmcqIHVwZGF0ZXMgdG8gdGhlIHF1ZXVlIGxpbWl0cyBvZiBhIGJsb2NrIGRldmljZS4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdDogYHF1ZXVlX2xpbWl0c2AgaW5kaWNhdGVzIHdlIGFyZSB3b3JraW5nIHdpdGggdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBJL08gcmVxdWVzdHMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgZGV2aWNlIGFuZCBgY29tbWl0X3VwZGF0ZWAgaW1wbGllcyB0aGF0IHdlJiMzOTtyZSBhcHBseWluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb21taXQuIFRoaXMgaXMgcHJvYmFibHkgY2FsbGVkIGFmdGVyIGEgY2hhbmdlIHRvIHRoZSBzZXR0aW5ncy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB3aGljaCBjYWxscyBhcmUgbWFkZSBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstc2V0dGluZ3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIDU0NjpcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4gNTQ3Olx0e1xuIDU0ODpcdFx0aW50IGVycm9yO1xuIDU0OTpcdFxuIDU1MDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiA1NTE6XHRcbiA1NTI6XHRcdGVycm9yID0gYmxrX3ZhbGlkYXRlX2xpbWl0cyhsaW0pO1xuIDU1MzpcdFx0aWYgKGVycm9yKVxuIDU1NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gNTU1Olx0XG4gNTU2Olx0I2lmZGVmIENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05cbiA1NTc6XHRcdGlmIChxLVx1MDAzZWNyeXB0b19wcm9maWxlIFx1MDAyNlx1MDAyNiBsaW0tXHUwMDNlaW50ZWdyaXR5LnRhZ19zaXplKSB7XG4gNTU4Olx0XHRcdHByX3dhcm4oXCYjMzQ7YmxrLWludGVncml0eTogSW50ZWdyaXR5IGFuZCBoYXJkd2FyZSBpbmxpbmUgZW5jcnlwdGlvbiBhcmUgbm90IHN1cHBvcnRlZCB0b2dldGhlci5cXG5cJiMzNDspO1xuIDU1OTpcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gNTYwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA1NjE6XHRcdH1cbiA1NjI6XHQjZW5kaWZcbiA1NjM6XHRcbiA1NjQ6XHRcdHEtXHUwMDNlbGltaXRzID0gKmxpbTtcbiA1NjU6XHRcdGlmIChxLVx1MDAzZWRpc2spXG4gNTY2Olx0XHRcdGJsa19hcHBseV9iZGlfbGltaXRzKHEtXHUwMDNlZGlzay1cdTAwM2ViZGksIGxpbSk7XG4gNTY3Olx0b3V0X3VubG9jazpcbiA1Njg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiA1Njk6XHRcdHJldHVybiBlcnJvcjtcbiA1NzA6XHR9XG4gNTcxOlx0RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xuIDU3MjpcdFxuIDU3MzpcdC8qKlxuIDU3NDpcdCAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQmxvY2sgTGF5ZXIgUXVldWUgVXBkYXRlIEZpeCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBjb3JyZWN0OiBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgICpkb2VzbiYjMzk7dCogZnJlZXplIHRoZSBxdWV1ZSBkaXJlY3RseS4gVGhlIHB1enpsZSBpcywgd2h5IHRoZSByZW9yZGVyaW5nIG9mIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBiZWZvcmUgYGJsa19tcV9mcmVlemVfcXVldWVgPyBJdCYjMzk7cyBhbGwgYWJvdXQgbG9jayBhY3F1aXNpdGlvbiBvcmRlci4gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGdyYWJzIHRoZSBgcS0mZ3Q7bGltaXRzX2xvY2tgLiBJZiB3ZSBmcm96ZSB0aGUgcXVldWUgKmZpcnN0KiB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgd2UmIzM5O2QgcG90ZW50aWFsbHkgd2FpdCBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlLiBCdXQsIGlmIGEgcmVxdWVzdCBpcyBibG9ja2VkIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYCB3aGlsZSB0aGUgcXVldWUgaXMgdHJ5aW5nIHRvIGZyZWV6ZSwgd2UmIzM5O3ZlIGdvdCBhIGNsYXNzaWMgZGVhZGxvY2sgc2NlbmFyaW8uCgpXaGF0IHJlcXVlc3RzIG1pZ2h0IGJlIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYD8gSXQmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyBpbiBzeXNmcywgb3IgcG90ZW50aWFsbHkgYSBjb25jdXJyZW50IGNhbGwgdG8gc29tZXRoaW5nIGxpa2UgYGxvb3Bfc2V0X2Rpb2AgdGhhdCYjMzk7cyBob2xkaW5nIGBsaW1pdHNfbG9ja2AgYW5kIHRoZW4gZ2V0dGluZyBzdHVjayB3YWl0aW5nIGZvciB0aGUgcXVldWUgdG8gZnJlZXplLiBBbmQgY29uc2lkZXJpbmcgdGhhdCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgY2FuIHRha2Ugc29tZSB0aW1lLCB0aGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudC4gUmVtZW1iZXIgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgZG9lcyB0aGUgZm9sbG93aW5nOgoKYGBgYwppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAoJCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKewoJaW50IHJldDsKCgltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CglyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW0pOwoJYmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTsKCXJldHVybiByZXQ7Cn0KYGBgCgpFZmZlY3RpdmVseSwgdGhpcyBmdW5jdGlvbiBmcmVlemVzIHRoZSBxdWV1ZSAqd2hpbGUqIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBiZWNhdXNlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpcyBjYWxsZWQgZmlyc3QuIFRoZXJlZm9yZSwgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2UuIEl0IGVuc3VyZXMgY29uc2lzdGVuY3kgd2l0aCBob3cgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgb3BlcmF0ZXMgYW5kIGF2b2lkcyBsb2NrIGludmVyc2lvbiBiZXR3ZWVuIHRoZSBgbGltaXRzX2xvY2tgIGFuZCB0aGUgYHFfdXNhZ2VfY291bnRlcmAgKHRoZSBmcmVlemUgbG9jaykuCgpUaGUgcHJvYmxlbSwgc3BlY2lmaWNhbGx5LCBpcyBhIGNhbGwgdG8gYGxvb3Bfc2V0X2Rpb2AgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGBjCgltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTsKCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKYGBgCgpUaGlzIHNlcXVlbmNlIGFjcXVpcmVzIHRoZSBmcmVlemUgbG9jayBhbmQgdGhlbiBgbGltaXRzX2xvY2tgLiBIb3dldmVyLCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBpbnZlcnRzIHRoaXMgb3JkZXIsIGFjcXVpcmluZyBgbGltaXRzX2xvY2tgIGZpcnN0ICh0aHJvdWdoIGBzdGFydF91cGRhdGVgKSwgYW5kIHRoZW4gdGhlIGZyZWV6ZSBsb2NrLiBCb29tLiBBQi1CQSBkZWFkbG9jayBwb3RlbnRpYWwuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvbmNyZXRlIGZpeCBmb3IgYSBwb3RlbnRpYWxseSBzZXJpb3VzIHByb2JsZW0uIERlZmluaXRlbHkgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9zZXRfZGlvYCBmdW5jdGlvbiwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgbG9vcCBkcml2ZXIuIEFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEb3VibGUtQ2hlY2tpbmcgdGhlIExvb3BiYWNrIERJTyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgQkxLX0RFVl9MT09QYCBjb25maWd1cmF0aW9uIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2Agc3ltYm9sIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBEaXJlY3QgSS9PIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgc2V0LCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLgoKQnV0LCB5b3Uga25vdyBob3cgaXQgZ29lcy4uLiBHb3R0YSBiZSB0aG9yb3VnaC4gRXZlbiB0aG91Z2ggSSB0aGluayBJJiMzOTt2ZSBnb3QgdGhlIG1haW4gcG9pbnQgbG9ja2VkIGRvd24sIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3dlZXAgb2YgdGhpcyBwYXRjaCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBvciByZWxhdGVkIGNoYW5nZXMgbHVya2luZyBpbiBvdGhlciBmaWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIGFueSBqdWRnZW1lbnRzLiBHb3R0YSBkb3QgdGhlIEkmIzM5O3MgYW5kIGNyb3NzIHRoZSBUJiMzOTtzLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGNoYW5nZS4gQSBxdWljaywgZm9jdXNlZCBzY2FuIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI0PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzNzpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTU9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI3LVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4Olx0XHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1ODkKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxvb3Bfc2V0X2Rpb2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBzb2xlbHkgZm9jdXNlZCBvbiBgbG9vcF9zZXRfZGlvYC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLCBhbmQgaXQmIzM5O3MgcXVpdGUgbG9jYWxpemVkLiBJdCB1cGRhdGVzIGB1c2VfZGlvYCBhbmQgdGhhdCBpcyBpdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBsaWtlbHkgYSBidWcgZml4IG9yIGFuIG9wdGltaXphdGlvbi4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZml4aW5nIGEgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLiBUaGUgZGlmZiBjbGVhcmx5IHNob3dzIHRoZSByZW9yZGVyaW5nIG9mIGNhbGxzIHJlbGF0ZWQgdG8gcXVldWUgbGltaXQgdXBkYXRlcyBhbmQgcXVldWUgZnJlZXppbmcuICBCZWZvcmUsIGl0IGFwcGVhcnMgdGhlIGNvZGUgd2FzIGZyZWV6aW5nIHRoZSBxdWV1ZSAqYmVmb3JlKiBpbml0aWFsaXppbmcgdGhlIHVwZGF0ZSwgd2hpY2ggaXMgaW5jb3JyZWN0LiBUaGlzIG1lYW5zIHRoZSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgd2FzIGluY29ycmVjdGx5IHBsYWNlZCBhZnRlciB0aGUgYGJsa19tcV9mcmVlemVfcXVldWVgIGNhbGwuIEl0IG5vdyBjb3JyZWN0bHkgc3RhcnRzIHRoZSB1cGRhdGUgKmJlZm9yZSogZnJlZXppbmcuCgpUaGlzIHJlb3JkZXJpbmcgaXMgY3J1Y2lhbC4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBEaXJlY3QgSS9PIChESU8pLCB3aGljaCBJIGtub3cgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGNvZGUgY2hlY2tzIGZvciByZWFkL3dyaXRlIGl0ZXJhdG9ycyBvbiB0aGUgYmFja2luZyBmaWxlLiBGdXJ0aGVybW9yZSwgdGhlIGB2ZnNfZnN5bmNgIGlzIGFsc28gYW4gaW5kaWNhdGlvbi4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgdHdlYWtlZC4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2stcmVsYXRlZCBpc3N1ZXMsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSS9PIGFuZCBxdWV1ZSBtYW5hZ2VtZW50LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIGFyZWEgdGhhdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gQSBsb2NrIGludmVyc2lvbiBpbiB0aGlzIGNvbnRleHQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBzeXN0ZW0gaGFuZyBvciBldmVuIGRhdGEgY29ycnVwdGlvbiwgc28gdGhpcyBpcyBpbXBvcnRhbnQgYW5kIHdvcnRoIHRlc3RpbmcgdGhvcm91Z2hseS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHNldCBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMTQ1MiwxMiAmIzQzOzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXZmc19mc3luYyhsby0mZ3Q7bG9fYmFja2luZ19maWxlLCAwKTsKIAl9CiAKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwogCWlmICh1c2VfZGlvKQogCQlsby0mZ3Q7bG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPOwogCWVsc2UKIAkJbG8tJmd0O2xvX2ZsYWdzICZhbXA7PSB+TE9fRkxBR1NfRElSRUNUX0lPOwotCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcmVvcmRlcmluZyBvZiBzb21lIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2UgbW92ZXMgYGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGZpeCBmb3IgYSBkZWFkbG9jaywgYSBsb2NraW5nIHByb2JsZW0sIG9yIHBlcmhhcHMgc2ltcGx5IGFuIG9wdGltaXphdGlvbiBpbiB0aGUgcXVldWUgbGltaXRzIHVwZGF0ZSBhbmQgZnJlZXplIHNlcXVlbmNlLgoKTGV0JiMzOTtzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGlzIGRvaW5nLiBPa2F5LCBpdCYjMzk7cyByZXR1cm5pbmcgYSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AuIEFoLCByaWdodCwgaXQgdGFrZXMgYSBgc3RydWN0IHJlcXVlc3RfcXVldWUgKnFgIGFzIGlucHV0IGFuZCByZXR1cm5zIGEgYHN0cnVjdCBxdWV1ZV9saW1pdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlIGdpdmVuIGBsaW1gIGlzIGEgbG9jYWwgdmFyaWFibGUuIE5vLCBpdCYjMzk7cyBqdXN0IHJlb3JkZXJpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBzbyBpdCBzaG91bGQgYmUgZmluZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGxvb3Bfc2V0X2Rpb2AgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTQyND1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mzc6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE1PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcdFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDUKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipBbmFseXNpcyBvZiBQYXRjaCBPcmRlcmluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZW9yZGVyaW5nIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgbGlrZWx5IGEgc3VidGxlIGRlYWRsb2NrIHNjZW5hcmlvIG9yIHNvbWUgc29ydCBvZiBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgdGhhdCYjMzk7cyBiZWVuIGV4cG9zZWQuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgbG9ja2luZyBoaWVyYXJjaGllcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGludm9sdmUgcXVldWUgbGltaXRzIGFuZCBmcmVlemluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSBhIHZlcnkgc3BlY2lmaWMgYW5kIGRlbGljYXRlIGZpeCB0byBhdm9pZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZHJpdmVyIG1pZ2h0IGxvY2sgdGhlIHF1ZXVlIGluIHRoZSB3cm9uZyBvcmRlciBvciBhdCB0aGUgd3JvbmcgdGltZS4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJJiMzOTttIHJlYWRpbmcsIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmIGJlY2F1c2UgdGhvc2Uga2luZHMgb2YgYnVncyBhcmUgdGhlIHdvcnN0IHRvIHRyYWNrIGRvd24uIEkgY2FuIGZvY3VzIHB1cmVseSBvbiB0aGUgZnVuY3Rpb25hbCBhc3BlY3RzIG9mIHRoZSByZW9yZGVyaW5nLiBBbmQgdGhlIGZhY3QgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIHRvIGNvbmZpcm0gdGhhdCBpcyBhbHNvIGdyZWF0LCBzaW5jZSB0aGF0IHNpbXBsaWZpZXMgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGlzc3VlIGlzIG5vdCByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHdoaWNoIG1lYW5zIHRoZSByb290IGNhdXNlIGlzIGxpa2VseSBzb21lIGluY29ycmVjdCBvcmRlcmluZyBvZiB0aGUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ0LjYwMTY2NDMzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjk3MDkyMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3Bfc2V0X2Rpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHJlb3JkZXJzIHRoZSBjYWxscyB0byBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlYCBpbiBgbG9vcF9zZXRfZGlvYCB0byBmaXggYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9ja2luZyBpc3N1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9ja2luZyBpc3N1ZXMgKGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgIGFuZCB0aGUgcXVldWUgZnJlZXplIGxvY2sgKGBxX3VzYWdlX2NvdW50ZXJgKSBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgYnkgcmVvcmRlcmluZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWUoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZSAodmlhIHRoZSBgTE9PUF9TRVRfRElSRUNUX0lPYCBpb2N0bCkgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ0LjYwMTY3NDEwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMjA4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxODozMDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggODYzOWZhMzRiODQ3MC4uNmYxMjk3NjAzNWIwOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHZmc19mc3luYyhsby1cXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0aWYgKHVzZV9kaW8pXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuIFxcdGVsc2VcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XFxuLVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcXHUwMDI2bGltKTtcXG4gXFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0NS4xNzI2OTkwMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MDcwNTI4ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX3NldF9kaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gYHEtXFx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTUxZTJiMWIzOGJlNGVmNmJkOTA2ZmVhNTBiOWYzMWMwYzhmMWFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTg6MzA6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtMTQ1MiwxMiArMTQ1MiwxMiBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gXHR9XG4gXG4rXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRpZiAodXNlX2RpbylcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuIFx0ZWxzZVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyBcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbiBcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0NS4xNzI3MDE0NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3MTU4ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExvb3AgQmxvY2sgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGxvb3AgYmxvY2sgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBjb2RlIHJlb3JkZXJpbmcgd2l0aGluIHRoZSBgbG9vcF9zZXRfZGlvYCBmdW5jdGlvbi4gIEl0J3MgbW92aW5nIHRoZSBjYWxsIHRvIGBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIGhvdyB0aGUgcXVldWUgbGltaXRzIGFyZSBoYW5kbGVkIHJlbGF0aXZlIHRvIHF1ZXVlIGZyZWV6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBvcmRlcmluZyBtYXR0ZXJzLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgaW1wYWN0IGlzIGxpa2VseSBvbiBEaXJlY3QgSS9PIChESU8pIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBsb29wIGRldmljZS4gSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgbG9vcF9zZXRfZGlvYCBhbmQgc2VlIGhvdyB0aGVzZSB0d28gY2FsbHMgaW50ZXJhY3QgYW5kIHdoYXQgZWZmZWN0cyB0aGlzIHJlb3JkZXJpbmcgbWlnaHQgaGF2ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpbWl0cyB1cGRhdGUgaW50ZXJhY3RzIHdpdGggdGhlIGZyZWV6aW5nIG9mIHRoZSBxdWV1ZS4gSXMgdGhpcyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucz8gT3IgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlbnQgYW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ5LjY0OTg2NjkyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5OTIzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MjQ9c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDM3OnN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNT1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4OlxcdFxcdGVyciA9IGxvb3Bfc2V0X2RpbyhsbywgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0OS43NjQ4NzgwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM0NjI0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgaW9jdGwgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgZm9yIGBMT09QX1NFVF9ESVJFQ1RfSU9gLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zLiBJdCdzIG1vdmluZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgKmJlZm9yZSogYGJsa19tcV9mcmVlemVfcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHk/XCIgSXQncyB1c3VhbGx5IGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCByZS1vcmRlcmluZyBvcGVyYXRpb25zIGxpa2UgdGhpcyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiwgZXNwZWNpYWxseSBpbiBrZXJuZWwgY29kZSB3aGVyZSBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgYSBjb25zdGFudCBjb25jZXJuLlxuXG5BaCwgSSBzZWUgaXQgbm93LiBUaGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHByb2JsZW0gd2hlcmUgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIG1pZ2h0IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IG9yLCBtb3JlIGdlbmVyYWxseSwgZXhlY3V0ZSBzb21lIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGJsb2NrLiBJZiBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaXMgY2FsbGVkICpiZWZvcmUqIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCwgYW5kIHRoZSBsYXR0ZXIgYmxvY2tzIGZvciBhbnkgcmVhc29uIHdoaWxlIGhvbGRpbmcgYSBsb2NrLCB3ZSdyZSBpbiBkZWFkbG9jayB0ZXJyaXRvcnkuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gdGhhdCBjb3VsZCBicmluZyB0aGUgd2hvbGUgdGhpbmcgZG93bi5cblxuV2FpdCBhIHNlY29uZOKApiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgKmRvZXMqIHRha2UgYSBsb2NrLCBkb2Vzbid0IGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgbWFrZSBzdXJlIG15IGluc3RpbmN0cyBhcmUgY29ycmVjdC4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGF2b2lkaW5nIGEgY3JpdGljYWwgcHJvYmxlbSBoZXJlLiBUaGF0J3MgZXhhY3RseSB3aGF0IEkgc3VzcGVjdGVkIC0gaXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgd2hlbiB1cGRhdGluZyBjZXJ0YWluIHF1ZXVlIGxpbWl0cywgc28gaXQgdmVyeSBsaWtlbHkgbmVlZHMgdG8gbWFuYWdlIGFuZCBwcm90ZWN0IHRoZXNlIHF1ZXVlIGxpbWl0cyB3aXRoIGxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjU0LjM5OTUwNTY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2NDc4Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yMzgtXFx0Lyogbm90ZSB0aGF0IHRoZSBmbGFncyBhcmUgaW52ZXJ0ZWQgdnMgdGhlIHZhbHVlcyBpbiB0aGUgc3lzZnMgZmlsZXMgKi9cXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjM5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLWludGVncml0eS5jLTI0MC1cXHRpZiAodmFsKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzOC0gKlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzOTogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQwLSAqIGFuZCB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBmcm96ZW4gdGhlIHF1ZXVlIG9yXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTc3LSAqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc4OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzktICogYW5kIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlcyBieSB0aGUgY2FsbGVyIHRvIEBxLiAgRnJlZXplcyB0aGUgcXVldWVcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU5Nj1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjAzLSAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgZnJlc2hseSBpbml0aWFsaXplZCB0byBAcS5cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDQ6ICogVG8gdXBkYXRlIGV4aXN0aW5nIGxpbWl0cyB1c2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZFxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNS0gKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIGluc3RlYWQuXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTg5MS1cXG5ibG9jay9ibGstc3lzZnMuYzo4OTI6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTg5My1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNjYtXFxuYmxvY2svYmxrLXpvbmVkLmM6MjA2NzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIwNjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjEzMzU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTEzMzYtXFx0aWYgKGJkZXYpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNT1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjYte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzpcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDAzPXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDgzOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg0LVxcdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXFx1MDAyNmxpbSwgY29uZmlnLVxcdTAwM2VibG9ja19zaXplKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExMzc9c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTYwOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0Mzc9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDU0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NTU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTYtXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDk4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0OTk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDAtXFx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcXHUwMDI2bGltLCBhcmcpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zMzQ9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzU0OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTUtXFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTEwOS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTEwOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMTEtXFx0aWYgKHZpcnRibGtfZ2V0X2NhY2hlX21vZGUodmRldikpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIwMDY9c3RhdGljIGludCBibGtpZl9yZWNvdmVyKHN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE0LVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6MjAxNTpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGluZm8tXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTYtXFx0YmxrZnJvbnRfZ2F0aGVyX2JhY2tlbmRfZmVhdHVyZXMoaW5mbyk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM9MjAyOD1pbnQgZG1fdGFibGVfc2V0X3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODItXFxuZHJpdmVycy9tZC9kbS10YWJsZS5jOjIwODM6XFx0b2xkX2xpbWl0cyA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODQtXFx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NTk1OT1zdGF0aWMgaW50IG1kZGV2X3NldF9sb2dpY2FsX2Jsb2NrX3NpemUoc3RydWN0IG1kZGV2ICptZGRldixcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy01OTcwLVxcbmRyaXZlcnMvbWQvbWQuYzo1OTcxOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL21kL21kLmMtNTk3Mi1cXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gbGJzO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyMjg9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNDEtXFxuZHJpdmVycy9tZC9tZC5jOjYyNDI6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02MjQzLVxcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFxcdTAwMjZsaW0sIHJkZXYtXFx1MDAzZWJkZXYsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNjctXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbWQvbWQuYzo2MjY4OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL21kL21kLmMtNjI2OS1cXHRsaW0uaW9fb3B0ID0gbGltLmlvX21pbiAqIG5yX3N0cmlwZXM7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy03MTkxLVxcdFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTkyOlxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5My1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjIzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyNS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhucy1cXHUwMDNlY3RybCwgXFx1MDAyNmxpbSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDM4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDM5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ0MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU2Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MzpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjQtXFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MzU4OT1zdGF0aWMgaW50IG52bWVfaW5pdF9pZGVudGlmeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjM2NTg6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShjdHJsLVxcdTAwM2VhZG1pbl9xKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY1OS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcXHUwMDI2bGltLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzI0PXN0YXRpYyBpbnQgZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ2LVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzQ3OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoYmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ4LVxcdGxpbS5tYXhfZGV2X3NlY3RvcnMgPSBkZXZpY2UtXFx1MDAzZWRpc2NpcGxpbmUtXFx1MDAzZW1heF9zZWN0b3JzKGJsb2NrKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc3LVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA3ODpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cXHRtcGkzbXJfY29uZmlndXJlX3RndF9kZXYodGd0ZGV2LCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYz04ODA9c3RhdGljIGludCBzY3NpX2FkZF9sdW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBjaGFyICppbnFfcmVzdWx0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwODktXFx0ICovXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jOjEwOTA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMtMTA5MS1cXHRpZiAoKmJmbGFncyBcXHUwMDI2IEJMSVNUX01BWF81MTIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0yMjA9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMjU4LVxcbmRyaXZlcnMvc2NzaS9zZC5jOjI1OTpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjAtXFx0XFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTU5Mi1cXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTM6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zY3NpL3NkLmMtNTk0LVxcdHNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFxcdTAwMjZsaW0sIG1vZGUpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtNzAxLVxcbmRyaXZlcnMvc2NzaS9zZC5jOjcwMjpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy03MDMtXFx0c2RfY29uZmlnX3dyaXRlX3NhbWUoc2RrcCwgXFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0zNzYwPXN0YXRpYyB2b2lkIHNkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTM3ODktXFxuZHJpdmVycy9zY3NpL3NkLmM6Mzc5MDpcXHQqbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zY3NpL3NkLmMtMzc5MS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jPTQ3Nj1zdGF0aWMgaW50IHNyX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3Qgc2NzaV9jZCAqY2QpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc3IuYy00ODgtXFxuZHJpdmVycy9zY3NpL3NyLmM6NDg5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuZHJpdmVycy9zY3NpL3NyLmMtNDkwLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBzZWN0b3Jfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYz01ODQ9c3RhdGljIHNzaXplX3QgbWF4X3NlY3RvcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk1OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5Ni1cXHRsaW0ubWF4X2h3X3NlY3RvcnMgPSBtcztcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4OC0vKipcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEwODk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSAtIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDkwLSAqIEBxOlxcdFxcdHF1ZXVlIHRvIHVwZGF0ZVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHF1ZXVlX2xpbWl0c1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwMDpxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwMS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTExMj1pbnQgYmxrX3ZhbGlkYXRlX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE4LSAqIFRoaXMgZnVuY3Rpb25zIGNhbmNlbHMgYW4gYXRvbWljIHVwZGF0ZSBvZiB0aGUgcXVldWUgbGltaXRzIHN0YXJ0ZWQgYnlcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMTk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBhZnRlclxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEyMC0gKiBzdGFydGluZyB1cGRhdGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjU2LjczNTk5MTY1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTg3MzI2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIEJsb2NrIERldmljZSBRdWV1ZSBVcGRhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gc3VzcyBvdXQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UncmUgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIHF1ZXVlIGxpbWl0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGdyYWJzIGEgbG9jaywgc3BlY2lmaWNhbGx5IGBxLVx1MDAzZWxpbWl0c19sb2NrYC4gVGhlbiBJIHNlZSB0aGF0IGBibGtfbXFfZnJlZXplX3F1ZXVlYCBiYXNpY2FsbHkgd2FpdHMgZm9yIGFsbCByZXF1ZXN0cyB0byBjb21wbGV0ZSBvbiB0aGUgcXVldWUuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBkZWFkbG9jay4gSWYgYSByZXF1ZXN0ICpzb21laG93KiBnZXRzIGJsb2NrZWQgd2FpdGluZyBmb3IgYHEtXHUwMDNlbGltaXRzX2xvY2tg4oCUd2hpY2ggaXMgdXN1YWxseSB1bmxpa2VseSwgc2luY2UgdGhlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCBmb3IgYSBzaG9ydCB0aW1l4oCUb3IgaWYgYGJsa19tcV9mcmVlemVfcXVldWVgICppdHNlbGYqIGdldHMgY2FsbGVkIHdoaWxlIHRoZSBgbGltaXRzX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgd2UndmUgZ290IGEgcHJvYmxlbS4gU29tZXRoaW5nIGVsc2UgbWlnaHQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSBhbmQgd2FpdGluZyBmb3IgYGxpbWl0c19sb2NrYC5cblxuVGhlbiBJIHJlbWVtYmVyIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgKnJlbGVhc2VzKiB0aGF0IGxvY2suIE9rYXksIHRoYXQncyBpbXBvcnRhbnQuIEknbSBjb21wYXJpbmcgdGhlIG9sZCBjb2RlIHdpdGggdGhlIG5ldyBjb2RlIHRvIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIG9sZCBzZXF1ZW5jZSB3YXM6IGZyZWV6ZSB0aGUgcXVldWUsIHNldCB0aGUgZGlyZWN0IElPIGZsYWcsIHN0YXJ0IHRoZSB1cGRhdGUsIHNldCB0aGUgRE1BIGxpbWl0LCBjb21taXQgdGhlIHVwZGF0ZSwgdGhlbiB1bmZyZWV6ZS4gVGhlIG5ldyBjb2RlIGRvZXMgdGhpbmdzIGRpZmZlcmVudGx5OiBzdGFydCB0aGUgdXBkYXRlLCBmcmVlemUgdGhlIHF1ZXVlLCBzZXQgdGhlIGRpcmVjdCBJTyBmbGFnLCBzZXQgdGhlIERNQSBsaW1pdCwgY29tbWl0IHRoZSB1cGRhdGUsIHRoZW4gdW5mcmVlemUuXG5cblRoZSBrZXkgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSB0aGUgb3JkZXIgb2YgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIEl0IGxvb2tzIGxpa2UgdGhlIGZyZWV6ZSBpcyBub3cgaGFwcGVuaW5nICphZnRlciogYWNxdWlyaW5nIHRoZSBgbGltaXRzX2xvY2tgLiBUaGlzIGNvdWxkIGJlIHNhZmVyLCBhc3N1bWluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHByb3Blcmx5IHJlbGVhc2VzIHRoZSBsb2NrLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgdG8gYmUgc3VyZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHNhZmUgbWV0aG9kIGlmIGl0cyBvbmx5IGZ1bmN0aW9uIGlzIHRvIHJlbGVhc2UgdGhlIGxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MDQuODU0NzI3NDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTIyMzg3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDQtXFxuYmxvY2svYmxrLWludGVncml0eS5jOjI0NTpcXHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4ocSwgXFx1MDAyNmxpbSk7XFxuYmxvY2svYmxrLWludGVncml0eS5jLTI0Ni1cXHRpZiAoZXJyKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzNC0vKipcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1MzU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUgLSBjb21taXQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01MzYtICogQHE6XFx0XFx0cXVldWUgdG8gdXBkYXRlXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDYtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTcwLX1cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NzE6RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3Mi1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzMtLyoqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc0OiAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3NS0gKiBAcTpcXHRcXHRxdWV1ZSB0byB1cGRhdGVcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU4My0gKi9cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1ODQ6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01ODUtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTkwLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1OTE6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01OTItXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU5NS19XFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTk2OkVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbik7XFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk3LVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA0LSAqIFRvIHVwZGF0ZSBleGlzdGluZyBsaW1pdHMgdXNlIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKSBhbmRcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKSBpbnN0ZWFkLlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNi0gKlxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NjA5PWludCBxdWV1ZV9saW1pdHNfc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spO1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYxMjpcXHRyZXR1cm4gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MTMtfVxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9MTg5PXF1ZXVlX3JhX3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy0yMDAtXFx0ICogaXMgdXN1YWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIHF1ZXVlIGxpbWl0cyBieVxcbmJsb2NrL2Jsay1zeXNmcy5jOjIwMTpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpLlxcbmJsb2NrL2Jsay1zeXNmcy5jLTIwMi1cXHQgKlxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9ODc5PXF1ZXVlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy04OTktXFxuYmxvY2svYmxrLXN5c2ZzLmM6OTAwOlxcdFxcdHJlcyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcXHUwMDI2bGltKTtcXG5ibG9jay9ibGstc3lzZnMuYy05MDEtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIxMjAtY29tbWl0OlxcbmJsb2NrL2Jsay16b25lZC5jOjIxMjE6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXFx1MDAyNmxpbSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjEyMi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MTMwMT12b2lkIGRyYmRfcmVjb25zaWRlcl9xdWV1ZV9wYXJhbWV0ZXJzKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xNDAwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MTQwMTpcXHRpZiAocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXFx1MDAyNmxpbSkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xNDAyLVxcdFxcdGRyYmRfZXJyKGRldmljZSwgXFxcInNldHRpbmcgbmV3IHF1ZXVlIGxpbWl0cyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI1PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQzLVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NDpcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NS19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDAzPXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4NS1cXHQvKiBObyBuZWVkIHRvIGZyZWV6ZSB0aGUgcXVldWUgYXMgdGhlIGRldmljZSBpc24ndCBib3VuZCB5ZXQuICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4NjpcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Ny1cXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNjMtXFx0bGltLmlvX21pbiA9IFNFQ1RPUl9TSVpFO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjQ6XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQzNz1zdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDYyOlxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2My1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTAyLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MDM6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA0LVxcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTMzND1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzMtXFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzc0OlxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNC1cXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjExMTU6XFx0aSA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNi1cXHRpZiAoaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTctXFx0YmxraWZfc2V0X3F1ZXVlX2xpbWl0cyhpbmZvLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIwMTg6XFx0cmMgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShpbmZvLVxcdTAwM2VycSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4My1cXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM6MjA4NDpcXHRyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltaXRzKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NS1cXHRpZiAocilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTU5NzQtXFx0XFx0bWRuYW1lKG1kZGV2KSk7XFxuZHJpdmVycy9tZC9tZC5jOjU5NzU6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL21kL21kLmMtNTk3Ni1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyMjg9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNTItXFxuZHJpdmVycy9tZC9tZC5jOjYyNTM6XFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNTQtfVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNjktXFx0bGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzO1xcbmRyaXZlcnMvbWQvbWQuYzo2MjcwOlxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNzEtXFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz03MTcyPXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTcxOTgtXFx0XFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTk5OlxcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03MjAwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI3LVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI4OlxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjktXFx0c2V0X2Rpc2tfcm8obnMtXFx1MDAzZWRpc2ssIG52bWVfbnNfaXNfcmVhZG9ubHkobnMsIGluZm8pKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzg3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ4Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjQ4ODpcXHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDg5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU5My1cXHRcXHRsaW0ud3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5ID0gbnNfbGltLVxcdTAwM2V3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1OTQ6XFx0XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU5NS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY1OS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcXHUwMDI2bGltLCB0cnVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY2MDpcXHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShjdHJsLVxcdTAwM2VhZG1pbl9xLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY2MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNzAtXFx0fVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzcxOlxcdHJjID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoYmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc5LVxcdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA4MDpcXHRXQVJOX09OX09OQ0UocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXFx1MDAyNmxpbSkpO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA4MS19XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM9ODgwPXN0YXRpYyBpbnQgc2NzaV9hZGRfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdW5zaWduZWQgY2hhciAqaW5xX3Jlc3VsdCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTA5LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYzoxMTEwOlxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjAtXFx0XFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9zY3NpL3NkLmM6MjYxOlxcdFxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSxcXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjItXFx0XFx0XFx0XFx0XFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTU5NC1cXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcXHUwMDI2bGltLCBtb2RlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTU6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy01OTYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTY3NT1tYXhfd3JpdGVfc2FtZV9ibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYzo3MDQ6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy03MDUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTM3NjA9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMzg2Ny1cXG5kcml2ZXJzL3Njc2kvc2QuYzozODY4OlxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0zODY5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0zODczLVxcdCAqIFF1ZXJ5IGNvbmN1cnJlbnQgcG9zaXRpb25pbmcgcmFuZ2VzIGFmdGVyXFxuZHJpdmVycy9zY3NpL3NkLmM6Mzg3NDpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIHVubG9ja2VkIHEtXFx1MDAzZWxpbWl0c19sb2NrIHRvIGF2b2lkXFxuZHJpdmVycy9zY3NpL3NkLmMtMzg3NS1cXHQgKiBkZWFkbG9jayB3aXRoIHEtXFx1MDAzZXN5c2ZzX2Rpcl9sb2NrIGFuZCBxLVxcdTAwM2VzeXNmc19sb2NrLlxcbi0tXFxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTQ5MS1cXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcXG5kcml2ZXJzL3Njc2kvc3IuYzo0OTI6XFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy00OTMtfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVxcdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTc6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTgtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA5My0gKiB0byBwcmV2ZW50IG90aGVyIHVwZGF0ZXMgYW5kIHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgdGhhdFxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA5NDogKiB0aGUgY2FsbGVyIGNhbiBtb2RpZnkuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDk1LSAqIHRvIGZpbmlzaCB0aGUgdXBkYXRlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTAwPXF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMDUtfVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwNjppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwNy1cXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMDg6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwOS1cXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MDcuNjY2OTczMjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5MDU3NDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlOiBEZWFkbG9jayBBdm9pZGFuY2UqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHJlbGVhc2VzIHRoZSBsb2NrLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIFRoZSBvbGQgY29kZSBoYWQgYSBzcGVjaWZpYyBzZXF1ZW5jZTogZnJlZXplIHRoZSBxdWV1ZSB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgdGhlbiBncmFiIHRoZSBsaW1pdHMgdXBkYXRlIHdpdGggYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgLCBtb2RpZnkgdGhlIERNQSBsaW1pdCwgYW5kIGZpbmFsbHkgY29tbWl0IHRoZSB1cGRhdGUgYW5kIHVuZnJlZXplLlxuXG5UaGUgbmV3IGNvZGUgcmV2ZXJzZXMgdGhpcy4gV2Ugbm93IHN0YXJ0IHRoZSB1cGRhdGUgZmlyc3Qgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsICp0aGVuKiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IGlmIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB0YWtlcyB0aGUgYGxpbWl0c19sb2NrYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIHdhaXRzIG9uIGNvbXBsZXRpb24gb2YgcmVxdWVzdHMsIGFuZCBzb21lIG90aGVyIHJlcXVlc3QgaXMgKmFsc28qIHdhaXRpbmcgb24gdGhhdCBzYW1lIGBsaW1pdHNfbG9ja2AgKG9yIHNvbWV0aGluZyBpbmRpcmVjdGx5IGRlcGVuZGluZyBvbiBpdCksIHdlIGNvdWxkIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgaXRzZWxmIG1pZ2h0IGJlIHRoZSBvbmUgZnJlZXppbmcgdGhlIHF1ZXVlLCBidXQgbm8sIHRoYXQncyBub3QgcmlnaHQuIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW5gIGRvZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBmdWxsIHBpY3R1cmUuIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgZG9lc24ndCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgaXQgKmRvZXMqIHVwZGF0ZSB0aGUgbGltaXRzLCBhbmQgdGhhdCBjb3VsZCBiZSB3aGVyZSB0aGUgY29udGVudGlvbiBsaWVzLiBJIHN1c3BlY3QgdGhlcmUncyBpbnRlcm5hbCBsb2dpYyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0aGF0IGNvdWxkIGNhdXNlIHRoYXQgZnJlZXppbmcgYmVoYXZpb3VyLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgYmxvY2svYmxrLXNldHRpbmdzLmNgIGZpbGUgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjE1LjA1NzU1MDc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MzMxNTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1zZXR0aW5ncy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDYtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMToxNS4xNzM4ODg1NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTQ2MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBibG9jayBkZXZpY2Ugc2V0dGluZ3MuIEknbSBsb29raW5nIGF0IGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgd2l0aGluIGBibG9jay9ibGstc2V0dGluZ3MuY2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciAqY29tbWl0dGluZyogdXBkYXRlcyB0byB0aGUgcXVldWUgbGltaXRzIG9mIGEgYmxvY2sgZGV2aWNlLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0OiBgcXVldWVfbGltaXRzYCBpbmRpY2F0ZXMgd2UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgY29uc3RyYWludHMgb2YgdGhlIEkvTyByZXF1ZXN0cyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZSBkZXZpY2UgYW5kIGBjb21taXRfdXBkYXRlYCBpbXBsaWVzIHRoYXQgd2UncmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb21taXQuIFRoaXMgaXMgcHJvYmFibHkgY2FsbGVkIGFmdGVyIGEgY2hhbmdlIHRvIHRoZSBzZXR0aW5ncy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHdoaWNoIGNhbGxzIGFyZSBtYWRlIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjE5LjI0NTM1NDA0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXNldHRpbmdzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gNTQ2OlxcdFxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4gNTQ3OlxcdHtcXG4gNTQ4OlxcdFxcdGludCBlcnJvcjtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRlcnJvciA9IGJsa192YWxpZGF0ZV9saW1pdHMobGltKTtcXG4gNTUzOlxcdFxcdGlmIChlcnJvcilcXG4gNTU0OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gNTU1OlxcdFxcbiA1NTY6XFx0I2lmZGVmIENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gNTU3OlxcdFxcdGlmIChxLVxcdTAwM2VjcnlwdG9fcHJvZmlsZSBcXHUwMDI2XFx1MDAyNiBsaW0tXFx1MDAzZWludGVncml0eS50YWdfc2l6ZSkge1xcbiA1NTg6XFx0XFx0XFx0cHJfd2FybihcXFwiYmxrLWludGVncml0eTogSW50ZWdyaXR5IGFuZCBoYXJkd2FyZSBpbmxpbmUgZW5jcnlwdGlvbiBhcmUgbm90IHN1cHBvcnRlZCB0b2dldGhlci5cXFxcblxcXCIpO1xcbiA1NTk6XFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NjA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0I2VuZGlmXFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdHEtXFx1MDAzZWxpbWl0cyA9ICpsaW07XFxuIDU2NTpcXHRcXHRpZiAocS1cXHUwMDNlZGlzaylcXG4gNTY2OlxcdFxcdFxcdGJsa19hcHBseV9iZGlfbGltaXRzKHEtXFx1MDAzZWRpc2stXFx1MDAzZWJkaSwgbGltKTtcXG4gNTY3OlxcdG91dF91bmxvY2s6XFxuIDU2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG4gNTY5OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNTcwOlxcdH1cXG4gNTcxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKTtcXG4gNTcyOlxcdFxcbiA1NzM6XFx0LyoqXFxuIDU3NDpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gLSBjb21taXQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MTkuMjQ1NjEyMDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjIxNjA5NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBRdWV1ZSBVcGRhdGUgRml4KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgY29ycmVjdDogYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCAqZG9lc24ndCogZnJlZXplIHRoZSBxdWV1ZSBkaXJlY3RseS4gVGhlIHB1enpsZSBpcywgd2h5IHRoZSByZW9yZGVyaW5nIG9mIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBiZWZvcmUgYGJsa19tcV9mcmVlemVfcXVldWVgPyBJdCdzIGFsbCBhYm91dCBsb2NrIGFjcXVpc2l0aW9uIG9yZGVyLiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgZ3JhYnMgdGhlIGBxLVx1MDAzZWxpbWl0c19sb2NrYC4gSWYgd2UgZnJvemUgdGhlIHF1ZXVlICpmaXJzdCogd2l0aCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAsIHdlJ2QgcG90ZW50aWFsbHkgd2FpdCBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlLiBCdXQsIGlmIGEgcmVxdWVzdCBpcyBibG9ja2VkIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYCB3aGlsZSB0aGUgcXVldWUgaXMgdHJ5aW5nIHRvIGZyZWV6ZSwgd2UndmUgZ290IGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby5cblxuV2hhdCByZXF1ZXN0cyBtaWdodCBiZSB3YWl0aW5nIG9uIGBsaW1pdHNfbG9ja2A/IEl0J3MgbGlrZWx5IHNvbWV0aGluZyBpbiBzeXNmcywgb3IgcG90ZW50aWFsbHkgYSBjb25jdXJyZW50IGNhbGwgdG8gc29tZXRoaW5nIGxpa2UgYGxvb3Bfc2V0X2Rpb2AgdGhhdCdzIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBhbmQgdGhlbiBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBxdWV1ZSB0byBmcmVlemUuIEFuZCBjb25zaWRlcmluZyB0aGF0IGBibGtfbXFfZnJlZXplX3F1ZXVlYCBjYW4gdGFrZSBzb21lIHRpbWUsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50LiBSZW1lbWJlciBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBkb2VzIHRoZSBmb2xsb3dpbmc6XG5cbmBgYGNcbmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5cdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxue1xuXHRpbnQgcmV0O1xuXG5cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcblx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcblx0cmV0dXJuIHJldDtcbn1cbmBgYFxuXG5FZmZlY3RpdmVseSwgdGhpcyBmdW5jdGlvbiBmcmVlemVzIHRoZSBxdWV1ZSAqd2hpbGUqIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBiZWNhdXNlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpcyBjYWxsZWQgZmlyc3QuIFRoZXJlZm9yZSwgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2UuIEl0IGVuc3VyZXMgY29uc2lzdGVuY3kgd2l0aCBob3cgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgb3BlcmF0ZXMgYW5kIGF2b2lkcyBsb2NrIGludmVyc2lvbiBiZXR3ZWVuIHRoZSBgbGltaXRzX2xvY2tgIGFuZCB0aGUgYHFfdXNhZ2VfY291bnRlcmAgKHRoZSBmcmVlemUgbG9jaykuXG5cblRoZSBwcm9ibGVtLCBzcGVjaWZpY2FsbHksIGlzIGEgY2FsbCB0byBgbG9vcF9zZXRfZGlvYCB0aGF0IGRvZXMgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmBgYFxuXG5UaGlzIHNlcXVlbmNlIGFjcXVpcmVzIHRoZSBmcmVlemUgbG9jayBhbmQgdGhlbiBgbGltaXRzX2xvY2tgLiBIb3dldmVyLCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBpbnZlcnRzIHRoaXMgb3JkZXIsIGFjcXVpcmluZyBgbGltaXRzX2xvY2tgIGZpcnN0ICh0aHJvdWdoIGBzdGFydF91cGRhdGVgKSwgYW5kIHRoZW4gdGhlIGZyZWV6ZSBsb2NrLiBCb29tLiBBQi1CQSBkZWFkbG9jayBwb3RlbnRpYWwuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2suIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb25jcmV0ZSBmaXggZm9yIGEgcG90ZW50aWFsbHkgc2VyaW91cyBwcm9ibGVtLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24sIGdpdmVuIHRoYXQgaXQncyBpbiB0aGUgbG9vcCBkcml2ZXIuIEFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjMwLjg2NzIyNTYxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0MDc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTE9PUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjMwLjk1OTYzOTYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc1OTM2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEb3VibGUtQ2hlY2tpbmcgdGhlIExvb3BiYWNrIERJTyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2Agc3ltYm9sIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIERpcmVjdCBJL08gZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBzZXQsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy5cblxuQnV0LCB5b3Uga25vdyBob3cgaXQgZ29lcy4uLiBHb3R0YSBiZSB0aG9yb3VnaC4gRXZlbiB0aG91Z2ggSSB0aGluayBJJ3ZlIGdvdCB0aGUgbWFpbiBwb2ludCBsb2NrZWQgZG93biwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzd2VlcCBvZiB0aGlzIHBhdGNoIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBzaWRlIGVmZmVjdHMgb3IgcmVsYXRlZCBjaGFuZ2VzIGx1cmtpbmcgaW4gb3RoZXIgZmlsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cy4gR290dGEgZG90IHRoZSBJJ3MgYW5kIGNyb3NzIHRoZSBUJ3MuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGNoYW5nZS4gQSBxdWljaywgZm9jdXNlZCBzY2FuIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjM1LjMzNTU3OTA2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTY4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MjQ9c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDM3OnN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNT1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4OlxcdFxcdGVyciA9IGxvb3Bfc2V0X2RpbyhsbywgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTozNS4zODc2NDM5NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNjkzMDE4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbG9vcF9zZXRfZGlvYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHNvbGVseSBmb2N1c2VkIG9uIGBsb29wX3NldF9kaW9gLiAgTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUsIGFuZCBpdCdzIHF1aXRlIGxvY2FsaXplZC4gSXQgdXBkYXRlcyBgdXNlX2Rpb2AgYW5kIHRoYXQgaXMgaXQuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBsaWtlbHkgYSBidWcgZml4IG9yIGFuIG9wdGltaXphdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24gZGVhZGxvY2suIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIHJlb3JkZXJpbmcgb2YgY2FsbHMgcmVsYXRlZCB0byBxdWV1ZSBsaW1pdCB1cGRhdGVzIGFuZCBxdWV1ZSBmcmVlemluZy4gIEJlZm9yZSwgaXQgYXBwZWFycyB0aGUgY29kZSB3YXMgZnJlZXppbmcgdGhlIHF1ZXVlICpiZWZvcmUqIGluaXRpYWxpemluZyB0aGUgdXBkYXRlLCB3aGljaCBpcyBpbmNvcnJlY3QuIFRoaXMgbWVhbnMgdGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkIGFmdGVyIHRoZSBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgY2FsbC4gSXQgbm93IGNvcnJlY3RseSBzdGFydHMgdGhlIHVwZGF0ZSAqYmVmb3JlKiBmcmVlemluZy5cblxuVGhpcyByZW9yZGVyaW5nIGlzIGNydWNpYWwuIEl04oCZcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGxvb3AgZGV2aWNlIGhhbmRsZXMgRGlyZWN0IEkvTyAoRElPKSwgd2hpY2ggSSBrbm93IGludm9sdmVzIGludGVyYWN0aW5nIHdpdGggdGhlIGJhY2tpbmcgZmlsZSdzIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGNvZGUgY2hlY2tzIGZvciByZWFkL3dyaXRlIGl0ZXJhdG9ycyBvbiB0aGUgYmFja2luZyBmaWxlLiBGdXJ0aGVybW9yZSwgdGhlIGB2ZnNfZnN5bmNgIGlzIGFsc28gYW4gaW5kaWNhdGlvbi4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgdHdlYWtlZC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgbG9jay1yZWxhdGVkIGlzc3VlcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIEkvTyBhbmQgcXVldWUgbWFuYWdlbWVudCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIGFyZWEgdGhhdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gQSBsb2NrIGludmVyc2lvbiBpbiB0aGlzIGNvbnRleHQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBzeXN0ZW0gaGFuZyBvciBldmVuIGRhdGEgY29ycnVwdGlvbiwgc28gdGhpcyBpcyBpbXBvcnRhbnQgYW5kIHdvcnRoIHRlc3RpbmcgdGhvcm91Z2hseS4gSSdsbCBtYWtlIHN1cmUgdG8gc2V0IGFwcHJvcHJpYXRlIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1ODksIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjQ1Ljc1Njk1MDQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAzMjA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9zZXRfZGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVxcdTAwM2VsaW1pdHNfbG9ja2AgYW5kIHRoZSBxdWV1ZSBmcmVlemUgbG9jayAoYHFfdXNhZ2VfY291bnRlcmApIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciBieSByZW9yZGVyaW5nIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlICh2aWEgdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX3NldF9kaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gYHEtXFx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTo0NS44Nzc5OTM2NzdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDIwNzQ4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NDUuODc4Njc1MTQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDIwMDYxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uNmYxMjk3NjAzNWIwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHZmc19mc3luYyhsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xuIFx0fVxuIFxuK1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0aWYgKHVzZV9kaW8pXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NDUuODc4Njc2MTY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzYwMTQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29wX3NldF9kaW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlb3JkZXJpbmcgb2Ygc29tZSBvcGVyYXRpb25zLiBUaGUgY2hhbmdlIG1vdmVzIGBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBwb3RlbnRpYWwgZml4IGZvciBhIGRlYWRsb2NrLCBhIGxvY2tpbmcgcHJvYmxlbSwgb3IgcGVyaGFwcyBzaW1wbHkgYW4gb3B0aW1pemF0aW9uIGluIHRoZSBxdWV1ZSBsaW1pdHMgdXBkYXRlIGFuZCBmcmVlemUgc2VxdWVuY2UuXG5cbkxldCdzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGlzIGRvaW5nLiBPa2F5LCBpdCdzIHJldHVybmluZyBhIGBzdHJ1Y3QgcXVldWVfbGltaXRzYC4gQWgsIHJpZ2h0LCBpdCB0YWtlcyBhIGBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcWAgYXMgaW5wdXQgYW5kIHJldHVybnMgYSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIGhlcmUgZ2l2ZW4gYGxpbWAgaXMgYSBsb2NhbCB2YXJpYWJsZS4gTm8sIGl0J3MganVzdCByZW9yZGVyaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgc28gaXQgc2hvdWxkIGJlIGZpbmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGxvb3Bfc2V0X2Rpb2AgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjUxLjMxNDY5NTAwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3OTQ3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI0PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MzYtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzNzpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTU9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MjctXFx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcXHRcXHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NTEuNTgyNjQ3NzY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTYwNTkyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQW5hbHlzaXMgb2YgUGF0Y2ggT3JkZXJpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBsaWtlbHkgYSBzdWJ0bGUgZGVhZGxvY2sgc2NlbmFyaW8gb3Igc29tZSBzb3J0IG9mIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZSB0aGF0J3MgYmVlbiBleHBvc2VkLlwiIEknbSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgbG9ja2luZyBoaWVyYXJjaGllcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGludm9sdmUgcXVldWUgbGltaXRzIGFuZCBmcmVlemluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSBhIHZlcnkgc3BlY2lmaWMgYW5kIGRlbGljYXRlIGZpeCB0byBhdm9pZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZHJpdmVyIG1pZ2h0IGxvY2sgdGhlIHF1ZXVlIGluIHRoZSB3cm9uZyBvcmRlciBvciBhdCB0aGUgd3JvbmcgdGltZS5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEknbSByZWFkaW5nLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCdzIGEgaHVnZSByZWxpZWYgYmVjYXVzZSB0aG9zZSBraW5kcyBvZiBidWdzIGFyZSB0aGUgd29yc3QgdG8gdHJhY2sgZG93bi4gSSBjYW4gZm9jdXMgcHVyZWx5IG9uIHRoZSBmdW5jdGlvbmFsIGFzcGVjdHMgb2YgdGhlIHJlb3JkZXJpbmcuIEFuZCB0aGUgZmFjdCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiB0byBjb25maXJtIHRoYXQgaXMgYWxzbyBncmVhdCwgc2luY2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpc3N1ZSBpcyBub3QgcmVsYXRlZCB0byBtZW1vcnkgc2FmZXR5LCB3aGljaCBtZWFucyB0aGUgcm9vdCBjYXVzZSBpcyBsaWtlbHkgc29tZSBpbmNvcnJlY3Qgb3JkZXJpbmcgb2YgdGhlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTo1Ni4yOTg3MTA5MzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 17:43:18 +0000 UTC FinishedAt: 2026-08-13 18:31:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "a275b5bfc9ee29b7eeef4ee6a635ac5461290df4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "537d3548-fb29-44a0-b057-3df3b9840a46" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_set_dio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3Bfc2V0X2RpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDg2MzlmYTM0Yjg0NzAuLjZmMTI5NzYwMzViMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC0xNDUyLDEyICYjNDM7MTQ1MiwxMiBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gXHR9XG4gXG4mIzQzO1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0aWYgKHVzZV9kaW8pXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMTQ1MiwxMiAmIzQzOzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXZmc19mc3luYyhsby0mZ3Q7bG9fYmFja2luZ19maWxlLCAwKTsKIAl9CiAKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwogCWlmICh1c2VfZGlvKQogCQlsby0mZ3Q7bG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPOwogCWVsc2UKIAkJbG8tJmd0O2xvX2ZsYWdzICZhbXA7PSB+TE9fRkxBR1NfRElSRUNUX0lPOwotCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTG9vcCBCbG9jayBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIHRoZSBsb29wIGJsb2NrIGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGEgY29kZSByZW9yZGVyaW5nIHdpdGhpbiB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24uICBJdCYjMzk7cyBtb3ZpbmcgdGhlIGNhbGwgdG8gYGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgdGhlIHF1ZXVlIGxpbWl0cyBhcmUgaGFuZGxlZCByZWxhdGl2ZSB0byBxdWV1ZSBmcmVlemluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgb3JkZXJpbmcgbWF0dGVycy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gVGhlIGltcGFjdCBpcyBsaWtlbHkgb24gRGlyZWN0IEkvTyAoRElPKSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgbG9vcCBkZXZpY2UuIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gYGxvb3Bfc2V0X2Rpb2AgYW5kIHNlZSBob3cgdGhlc2UgdHdvIGNhbGxzIGludGVyYWN0IGFuZCB3aGF0IGVmZmVjdHMgdGhpcyByZW9yZGVyaW5nIG1pZ2h0IGhhdmUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBsaW1pdHMgdXBkYXRlIGludGVyYWN0cyB3aXRoIHRoZSBmcmVlemluZyBvZiB0aGUgcXVldWUuIElzIHRoaXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnM/IE9yIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJIGhhdmUgdG8gbG9vayBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSB0aGUgaW50ZW50IGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTQyND1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mzc6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE1PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcdFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3MgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIGlvY3RsIEhhbmRsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgZm9yIGBMT09QX1NFVF9ESVJFQ1RfSU9gLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zLiBJdCYjMzk7cyBtb3ZpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgICpiZWZvcmUqIGBibGtfbXFfZnJlZXplX3F1ZXVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2h5PyYjMzQ7IEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHJlLW9yZGVyaW5nIG9wZXJhdGlvbnMgbGlrZSB0aGlzIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYXNvbiwgZXNwZWNpYWxseSBpbiBrZXJuZWwgY29kZSB3aGVyZSBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgYSBjb25zdGFudCBjb25jZXJuLgoKQWgsIEkgc2VlIGl0IG5vdy4gVGhlIGdvYWwgaXMgdG8gcHJldmVudCBhIHBvdGVudGlhbCBwcm9ibGVtIHdoZXJlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBvciwgbW9yZSBnZW5lcmFsbHksIGV4ZWN1dGUgc29tZSBvcGVyYXRpb24gdGhhdCBjb3VsZCBibG9jay4gSWYgYGJsa19tcV9mcmVlemVfcXVldWVgIGlzIGNhbGxlZCAqYmVmb3JlKiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIGFuZCB0aGUgbGF0dGVyIGJsb2NrcyBmb3IgYW55IHJlYXNvbiB3aGlsZSBob2xkaW5nIGEgbG9jaywgd2UmIzM5O3JlIGluIGRlYWRsb2NrIHRlcnJpdG9yeS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gdGhhdCBjb3VsZCBicmluZyB0aGUgd2hvbGUgdGhpbmcgZG93bi4KCldhaXQgYSBzZWNvbmTigKYgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgICpkb2VzKiB0YWtlIGEgbG9jaywgZG9lc24mIzM5O3QgaXQ/IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBtYWtlIHN1cmUgbXkgaW5zdGluY3RzIGFyZSBjb3JyZWN0LiBHb3R0YSBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIGF2b2lkaW5nIGEgY3JpdGljYWwgcHJvYmxlbSBoZXJlLiBUaGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJIHN1c3BlY3RlZCAtIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCB3aGVuIHVwZGF0aW5nIGNlcnRhaW4gcXVldWUgbGltaXRzLCBzbyBpdCB2ZXJ5IGxpa2VseSBuZWVkcyB0byBtYW5hZ2UgYW5kIHByb3RlY3QgdGhlc2UgcXVldWUgbGltaXRzIHdpdGggbG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9ibGstaW50ZWdyaXR5LmM9MjI2PXN0YXRpYyBzc2l6ZV90IGZsYWdfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQsXG4tLVxuYmxvY2svYmxrLWludGVncml0eS5jLTIzOC1cdC8qIG5vdGUgdGhhdCB0aGUgZmxhZ3MgYXJlIGludmVydGVkIHZzIHRoZSB2YWx1ZXMgaW4gdGhlIHN5c2ZzIGZpbGVzICovXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjM5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDAtXHRpZiAodmFsKVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM4LSAqXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1Mzk6ICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBvYnRhaW5lZCBmcm9tIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQwLSAqIGFuZCB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBmcm96ZW4gdGhlIHF1ZXVlIG9yXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTcxPUVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKTtcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzctICpcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU3ODogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzktICogYW5kIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlcyBieSB0aGUgY2FsbGVyIHRvIEBxLiAgRnJlZXplcyB0aGUgcXVldWVcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01OTY9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKTtcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MDMtICogQXBwbHkgdGhlIGxpbWl0cyBpbiBAbGltIHRoYXQgd2VyZSBmcmVzaGx5IGluaXRpYWxpemVkIHRvIEBxLlxuYmxvY2svYmxrLXNldHRpbmdzLmM6NjA0OiAqIFRvIHVwZGF0ZSBleGlzdGluZyBsaW1pdHMgdXNlIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKSBhbmRcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNS0gKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIGluc3RlYWQuXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9ODc5PXF1ZXVlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmMtODkxLVxuYmxvY2svYmxrLXN5c2ZzLmM6ODkyOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5ibG9jay9ibGstc3lzZnMuYy04OTMtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjA1OD1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTIwNjYtXG5ibG9jay9ibGstem9uZWQuYzoyMDY3Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmJsb2NrL2Jsay16b25lZC5jLTIwNjgtXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYz0xMzAxPXZvaWQgZHJiZF9yZWNvbnNpZGVyX3F1ZXVlX3BhcmFtZXRlcnMoc3RydWN0IGRyYmRfZGV2aWNlICpkZXZpY2UsXG4tLVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xMzM0LVxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYzoxMzM1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNi1cdGlmIChiZGV2KSB7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI1PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2LXtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzpcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwMz1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDgyLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4MzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4NC1cdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXHUwMDI2bGltLCBjb25maWctXHUwMDNlYmxvY2tfc2l6ZSk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTEzNz1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cdCAqL1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTE2MDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTE2MS1cdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM3PXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTQtXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDU1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDU2LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ5OC1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0OTk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDAtXHRsb29wX3VwZGF0ZV9saW1pdHMobG8sIFx1MDAyNmxpbSwgYXJnKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTMzND1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUzLVxuZHJpdmVycy9ibG9jay9uYmQuYzozNTQ6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5iZC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzU1LVx0aWYgKG5iZC1cdTAwM2Vjb25maWctXHUwMDNlZmxhZ3MgXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xMDk0PWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTA5LVxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmM6MTExMDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTExLVx0aWYgKHZpcnRibGtfZ2V0X2NhY2hlX21vZGUodmRldikpXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYz0yMDA2PXN0YXRpYyBpbnQgYmxraWZfcmVjb3ZlcihzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTQtXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIwMTU6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGluZm8tXHUwMDNlcnEpO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE2LVx0YmxrZnJvbnRfZ2F0aGVyX2JhY2tlbmRfZmVhdHVyZXMoaW5mbyk7XG4tLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jPTIwMjg9aW50IGRtX3RhYmxlX3NldF9yZXN0cmljdGlvbnMoc3RydWN0IGRtX3RhYmxlICp0LCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4Mi1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYzoyMDgzOlx0b2xkX2xpbWl0cyA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NC1cdHIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW1pdHMpO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy01OTcwLVxuZHJpdmVycy9tZC9tZC5jOjU5NzE6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG1kZGV2LVx1MDAzZWdlbmRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9tZC9tZC5jLTU5NzItXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gbGJzO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz02MjI4PWludCBtZGRldl9zdGFja19uZXdfcmRldihzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBzdHJ1Y3QgbWRfcmRldiAqcmRldilcbi0tXG5kcml2ZXJzL21kL21kLmMtNjI0MS1cbmRyaXZlcnMvbWQvbWQuYzo2MjQyOlx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbWQvbWQuYy02MjQzLVx0cXVldWVfbGltaXRzX3N0YWNrX2JkZXYoXHUwMDI2bGltLCByZGV2LVx1MDAzZWJkZXYsIHJkZXYtXHUwMDNlZGF0YV9vZmZzZXQsXG4tLVxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxuLS1cbmRyaXZlcnMvbWQvbWQuYy02MjY3LVx0XHRyZXR1cm47XG5kcml2ZXJzL21kL21kLmM6NjI2ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL21kL21kLmMtNjI2OS1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5MS1cdFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlO1xuZHJpdmVycy9tZC9yYWlkNS5jOjcxOTI6XHRcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvcmFpZDUuYy03MTkzLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyMy1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI1LVx0bnZtZV9zZXRfY3RybF9saW1pdHMobnMtXHUwMDNlY3RybCwgXHUwMDI2bGltLCBmYWxzZSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQzOC1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDM5Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDQwLVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjItXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MzpcdFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjQtXHRcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy1cdTAwM2VoZWFkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTctXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY1ODpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoY3RybC1cdTAwM2VhZG1pbl9xKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0zNjU5LVx0bnZtZV9zZXRfY3RybF9saW1pdHMoY3RybCwgXHUwMDI2bGltLCB0cnVlKTtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jPTMyND1zdGF0aWMgaW50IGRhc2Rfc3RhdGVfYmFzaWNfdG9fcmVhZHkoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNDYtXG5kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jOjM0NzpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoYmxvY2stXHUwMDNlZ2RwLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ4LVx0bGltLm1heF9kZXZfc2VjdG9ycyA9IGRldmljZS1cdTAwM2VkaXNjaXBsaW5lLVx1MDAzZW1heF9zZWN0b3JzKGJsb2NrKTtcbi0tXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jPTEwNjc9bXBpM21yX3VwZGF0ZV9zZGV2KHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzctXG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jOjEwNzg6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jLTEwNzktXHRtcGkzbXJfY29uZmlndXJlX3RndF9kZXYodGd0ZGV2LCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYz04ODA9c3RhdGljIGludCBzY3NpX2FkZF9sdW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBjaGFyICppbnFfcmVzdWx0LFxuLS1cbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDg5LVx0ICovXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTA5MDpcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMDkxLVx0aWYgKCpiZmxhZ3MgXHUwMDI2IEJMSVNUX01BWF81MTIpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9MjIwPWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0yNTgtXG5kcml2ZXJzL3Njc2kvc2QuYzoyNTk6XHRcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTI2MC1cdFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXHUwMDI2bGltKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy01OTItXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTM6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcdTAwMjZsaW0sIG1vZGUpO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTY3NT1tYXhfd3JpdGVfc2FtZV9ibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy03MDEtXG5kcml2ZXJzL3Njc2kvc2QuYzo3MDI6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSk7XG5kcml2ZXJzL3Njc2kvc2QuYy03MDMtXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcdTAwMjZsaW0pO1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTM3NjA9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTM3ODktXG5kcml2ZXJzL3Njc2kvc2QuYzozNzkwOlx0KmxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTM3OTEtXG4tLVxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcbi0tXG5kcml2ZXJzL3Njc2kvc3IuYy00ODgtXG5kcml2ZXJzL3Njc2kvc3IuYzo0ODk6XHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuZHJpdmVycy9zY3NpL3NyLmMtNDkwLVx0bGltLmxvZ2ljYWxfYmxvY2tfc2l6ZSA9IHNlY3Rvcl9zaXplO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYz01ODQ9c3RhdGljIHNzaXplX3QgbWF4X3NlY3RvcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk1Olx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVx1MDAzZXJlcXVlc3RfcXVldWUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5Ni1cdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwODgtLyoqXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEwODk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSAtIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTAtICogQHE6XHRcdHF1ZXVlIHRvIHVwZGF0ZVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA5OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBxdWV1ZV9saW1pdHNcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwMDpxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTAxLVx0X19hY3F1aXJlcyhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTExMj1pbnQgYmxrX3ZhbGlkYXRlX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTExOC0gKiBUaGlzIGZ1bmN0aW9ucyBjYW5jZWxzIGFuIGF0b21pYyB1cGRhdGUgb2YgdGhlIHF1ZXVlIGxpbWl0cyBzdGFydGVkIGJ5XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMTk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBhZnRlclxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTIwLSAqIHN0YXJ0aW5nIHVwZGF0ZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBCbG9jayBEZXZpY2UgUXVldWUgVXBkYXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gc3VzcyBvdXQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIHVwZGF0aW5nIGJsb2NrIGRldmljZSBxdWV1ZSBsaW1pdHMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBncmFicyBhIGxvY2ssIHNwZWNpZmljYWxseSBgcS0mZ3Q7bGltaXRzX2xvY2tgLiBUaGVuIEkgc2VlIHRoYXQgYGJsa19tcV9mcmVlemVfcXVldWVgIGJhc2ljYWxseSB3YWl0cyBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlIG9uIHRoZSBxdWV1ZS4gVGhlIGNydWNpYWwgdGhpbmcgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciBhIGRlYWRsb2NrLiBJZiBhIHJlcXVlc3QgKnNvbWVob3cqIGdldHMgYmxvY2tlZCB3YWl0aW5nIGZvciBgcS0mZ3Q7bGltaXRzX2xvY2tg4oCUd2hpY2ggaXMgdXN1YWxseSB1bmxpa2VseSwgc2luY2UgdGhlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCBmb3IgYSBzaG9ydCB0aW1l4oCUb3IgaWYgYGJsa19tcV9mcmVlemVfcXVldWVgICppdHNlbGYqIGdldHMgY2FsbGVkIHdoaWxlIHRoZSBgbGltaXRzX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgd2UmIzM5O3ZlIGdvdCBhIHByb2JsZW0uIFNvbWV0aGluZyBlbHNlIG1pZ2h0IGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgYW5kIHdhaXRpbmcgZm9yIGBsaW1pdHNfbG9ja2AuCgpUaGVuIEkgcmVtZW1iZXIgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCAqcmVsZWFzZXMqIHRoYXQgbG9jay4gT2theSwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEkmIzM5O20gY29tcGFyaW5nIHRoZSBvbGQgY29kZSB3aXRoIHRoZSBuZXcgY29kZSB0byBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgb2xkIHNlcXVlbmNlIHdhczogZnJlZXplIHRoZSBxdWV1ZSwgc2V0IHRoZSBkaXJlY3QgSU8gZmxhZywgc3RhcnQgdGhlIHVwZGF0ZSwgc2V0IHRoZSBETUEgbGltaXQsIGNvbW1pdCB0aGUgdXBkYXRlLCB0aGVuIHVuZnJlZXplLiBUaGUgbmV3IGNvZGUgZG9lcyB0aGluZ3MgZGlmZmVyZW50bHk6IHN0YXJ0IHRoZSB1cGRhdGUsIGZyZWV6ZSB0aGUgcXVldWUsIHNldCB0aGUgZGlyZWN0IElPIGZsYWcsIHNldCB0aGUgRE1BIGxpbWl0LCBjb21taXQgdGhlIHVwZGF0ZSwgdGhlbiB1bmZyZWV6ZS4KClRoZSBrZXkgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSB0aGUgb3JkZXIgb2YgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIEl0IGxvb2tzIGxpa2UgdGhlIGZyZWV6ZSBpcyBub3cgaGFwcGVuaW5nICphZnRlciogYWNxdWlyaW5nIHRoZSBgbGltaXRzX2xvY2tgLiBUaGlzIGNvdWxkIGJlIHNhZmVyLCBhc3N1bWluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHByb3Blcmx5IHJlbGVhc2VzIHRoZSBsb2NrLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgdG8gYmUgc3VyZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHNhZmUgbWV0aG9kIGlmIGl0cyBvbmx5IGZ1bmN0aW9uIGlzIHRvIHJlbGVhc2UgdGhlIGxvY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWludGVncml0eS5jPTIyNj1zdGF0aWMgc3NpemVfdCBmbGFnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50LFxuLS1cbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDQtXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjQ1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHEsIFx1MDAyNmxpbSk7XG5ibG9jay9ibGstaW50ZWdyaXR5LmMtMjQ2LVx0aWYgKGVycilcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYz01MjI9aW50IGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzNC0vKipcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzNTogKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNTM2LSAqIEBxOlx0XHRxdWV1ZSB0byB1cGRhdGVcbi0tXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NDU6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQ2LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTcwLX1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU3MTpFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSk7XG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzItXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzMtLyoqXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NzQ6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuIC0gY29tbWl0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzUtICogQHE6XHRcdHF1ZXVlIHRvIHVwZGF0ZVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU4My0gKi9cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU4NDppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTg1LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTkwLVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuYmxvY2svYmxrLXNldHRpbmdzLmM6NTkxOlx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU5Mi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk1LX1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjU5NjpFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk3LVxuLS1cbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNC0gKiBUbyB1cGRhdGUgZXhpc3RpbmcgbGltaXRzIHVzZSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKCkgYW5kXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKSBpbnN0ZWFkLlxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA2LSAqXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmM9NjA5PWludCBxdWV1ZV9saW1pdHNfc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjExLVx0bXV0ZXhfbG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYxMjpcdHJldHVybiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW0pO1xuYmxvY2svYmxrLXNldHRpbmdzLmMtNjEzLX1cbi0tXG5ibG9jay9ibGstc3lzZnMuYz0xODk9cXVldWVfcmFfc3RvcmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbi0tXG5ibG9jay9ibGstc3lzZnMuYy0yMDAtXHQgKiBpcyB1c3VhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0aGUgcXVldWUgbGltaXRzIGJ5XG5ibG9jay9ibGstc3lzZnMuYzoyMDE6XHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpLlxuYmxvY2svYmxrLXN5c2ZzLmMtMjAyLVx0ICpcbi0tXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9ibGstc3lzZnMuYy04OTktXG5ibG9jay9ibGstc3lzZnMuYzo5MDA6XHRcdHJlcyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcdTAwMjZsaW0pO1xuYmxvY2svYmxrLXN5c2ZzLmMtOTAxLVx0XHRpZiAocmVzKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi0tXG5ibG9jay9ibGstem9uZWQuYy0yMTIwLWNvbW1pdDpcbmJsb2NrL2Jsay16b25lZC5jOjIxMjE6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuYmxvY2svYmxrLXpvbmVkLmMtMjEyMi1cbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTE0MDAtXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjE0MDE6XHRpZiAocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKSlcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTQwMi1cdFx0ZHJiZF9lcnIoZGV2aWNlLCBcJiMzNDtzZXR0aW5nIG5ldyBxdWV1ZSBsaW1pdHMgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjU9c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQzLVx0ICovXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyNDQ6XHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NS19XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTAwMz1zdGF0aWMgaW50IGxvb3BfY29uZmlndXJlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGJsa19tb2RlX3QgbW9kZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg1LVx0LyogTm8gbmVlZCB0byBmcmVlemUgdGhlIHF1ZXVlIGFzIHRoZSBkZXZpY2UgaXNuJiMzOTt0IGJvdW5kIHlldC4gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjEwODY6XHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Ny1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYzLVx0bGltLmlvX21pbiA9IFNFQ1RPUl9TSVpFO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTE2NDpcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTE2NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDM3PXN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDYyOlx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXHUwMDNlbG9fcXVldWUsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDYzLVx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQ2Nz1zdGF0aWMgaW50IGxvb3Bfc2V0X2Jsb2NrX3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDItXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MTUwMzpcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUwNC1cdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XG4tLVxuZHJpdmVycy9ibG9jay9uYmQuYz0zMzQ9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3My1cdGxpbS5waHlzaWNhbF9ibG9ja19zaXplID0gYmxrc2l6ZTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzc0Olx0ZXJyb3IgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4obmJkLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL2Jsb2NrL25iZC5jLTM3NS1cdGlmIChlcnJvcilcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYz0xMDk0PWNhY2hlX3R5cGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYy0xMTE0LVx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTE1Olx0aSA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNi1cdGlmIChpKVxuLS1cbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE3LVx0YmxraWZfc2V0X3F1ZXVlX2xpbWl0cyhpbmZvLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYzoyMDE4Olx0cmMgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShpbmZvLVx1MDAzZXJxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE5LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODMtXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcbmRyaXZlcnMvbWQvZG0tdGFibGUuYzoyMDg0Olx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NS1cdGlmIChyKVxuLS1cbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxuLS1cbmRyaXZlcnMvbWQvbWQuYy01OTc0LVx0XHRtZG5hbWUobWRkZXYpKTtcbmRyaXZlcnMvbWQvbWQuYzo1OTc1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbWQvbWQuYy01OTc2LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL21kL21kLmM9NjIyOD1pbnQgbWRkZXZfc3RhY2tfbmV3X3JkZXYoc3RydWN0IG1kZGV2ICptZGRldiwgc3RydWN0IG1kX3JkZXYgKnJkZXYpXG4tLVxuZHJpdmVycy9tZC9tZC5jLTYyNTItXG5kcml2ZXJzL21kL21kLmM6NjI1MzpcdHJldHVybiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShtZGRldi1cdTAwM2VnZW5kaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9tZC9tZC5jLTYyNTQtfVxuLS1cbmRyaXZlcnMvbWQvbWQuYz02MjU4PXZvaWQgbWRkZXZfdXBkYXRlX2lvX29wdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LCB1bnNpZ25lZCBpbnQgbnJfc3RyaXBlcylcbi0tXG5kcml2ZXJzL21kL21kLmMtNjI2OS1cdGxpbS5pb19vcHQgPSBsaW0uaW9fbWluICogbnJfc3RyaXBlcztcbmRyaXZlcnMvbWQvbWQuYzo2MjcwOlx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXHUwMDNlZ2VuZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbWQvbWQuYy02MjcxLVx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcbi0tXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5OC1cdFx0XHRsaW0uZmVhdHVyZXMgXHUwMDI2PSB+QkxLX0ZFQVRfU1RBQkxFX1dSSVRFUztcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTk5Olx0XHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9tZC9yYWlkNS5jLTcyMDAtXHR9XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIyMTc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2dlbmVyaWMoc3RydWN0IG52bWVfbnMgKm5zLFxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI3LVx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVx1MDAzZWRpc2stXHUwMDNlcXVldWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjIyMjg6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShucy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjktXHRzZXRfZGlza19ybyhucy1cdTAwM2VkaXNrLCBudm1lX25zX2lzX3JlYWRvbmx5KG5zLCBpbmZvKSk7XG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ4Ny1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDg4Olx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobnMtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDg5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1OTMtXHRcdGxpbS53cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkgPSBuc19saW0tXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1OTQ6XHRcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5zLVx1MDAzZWhlYWQtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNTk1LVxuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTktXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcdTAwMjZsaW0sIHRydWUpO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjM2NjA6XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShjdHJsLVx1MDAzZWFkbWluX3EsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY2MS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxuLS1cbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcwLVx0fVxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYzozNzE6XHRyYyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGJsb2NrLVx1MDAzZWdkcC1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcyLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL3Njc2kvbXBpM21yL21waTNtcl9vcy5jOjEwODA6XHRXQVJOX09OX09OQ0UocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc2Rldi1cdTAwM2VyZXF1ZXN0X3F1ZXVlLCBcdTAwMjZsaW0pKTtcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA4MS19XG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jPTg4MD1zdGF0aWMgaW50IHNjc2lfYWRkX2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGNoYXIgKmlucV9yZXN1bHQsXG4tLVxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTExMDktXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM6MTExMDpcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTExLVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9zY3NpL3NkLmMtMjYwLVx0XHRzZF9zZXRfZmx1c2hfZmxhZyhzZGtwLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NkLmM6MjYxOlx0XHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLFxuZHJpdmVycy9zY3NpL3NkLmMtMjYyLVx0XHRcdFx0XHUwMDI2bGltKTtcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy01OTQtXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcdTAwMjZsaW0sIG1vZGUpO1xuZHJpdmVycy9zY3NpL3NkLmM6NTk1Olx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXHUwMDNlZGlzay1cdTAwM2VxdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvc2NzaS9zZC5jLTU5Ni1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cdHNkX2NvbmZpZ193cml0ZV9zYW1lKHNka3AsIFx1MDAyNmxpbSk7XG5kcml2ZXJzL3Njc2kvc2QuYzo3MDQ6XHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc2RrcC1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NkLmMtNzA1LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYz0zNzYwPXN0YXRpYyB2b2lkIHNkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0zODY3LVxuZHJpdmVycy9zY3NpL3NkLmM6Mzg2ODpcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVx1MDAzZWRpc2stXHUwMDNlcXVldWUsIGxpbSk7XG5kcml2ZXJzL3Njc2kvc2QuYy0zODY5LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL3Njc2kvc2QuYy0zODczLVx0ICogUXVlcnkgY29uY3VycmVudCBwb3NpdGlvbmluZyByYW5nZXMgYWZ0ZXJcbmRyaXZlcnMvc2NzaS9zZC5jOjM4NzQ6XHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIHVubG9ja2VkIHEtXHUwMDNlbGltaXRzX2xvY2sgdG8gYXZvaWRcbmRyaXZlcnMvc2NzaS9zZC5jLTM4NzUtXHQgKiBkZWFkbG9jayB3aXRoIHEtXHUwMDNlc3lzZnNfZGlyX2xvY2sgYW5kIHEtXHUwMDNlc3lzZnNfbG9jay5cbi0tXG5kcml2ZXJzL3Njc2kvc3IuYz00NzY9c3RhdGljIGludCBzcl9yZXZhbGlkYXRlX2Rpc2soc3RydWN0IHNjc2lfY2QgKmNkKVxuLS1cbmRyaXZlcnMvc2NzaS9zci5jLTQ5MS1cdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuZHJpdmVycy9zY3NpL3NyLmM6NDkyOlx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcdTAwMjZsaW0pO1xuZHJpdmVycy9zY3NpL3NyLmMtNDkzLX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM9NTg0PXN0YXRpYyBzc2l6ZV90IG1heF9zZWN0b3JzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVx0bGltLm1heF9od19zZWN0b3JzID0gbXM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk3Olx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNkZXYtXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXHUwMDI2bGltKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTgtXHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcbi0tXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTMtICogdG8gcHJldmVudCBvdGhlciB1cGRhdGVzIGFuZCByZXR1cm5zIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgbGltaXRzIHRoYXRcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA5NDogKiB0aGUgY2FsbGVyIGNhbiBtb2RpZnkuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTEwOTUtICogdG8gZmluaXNoIHRoZSB1cGRhdGUuXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTAwPXF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA1LX1cbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwNjppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA3LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXHUwMDI2cS1cdTAwM2VsaW1pdHNfbG9jayk7XG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMDg6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTA5LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXHUwMDI2cS1cdTAwM2VsaW1pdHNfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMwOTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIENoYW5nZTogRGVhZGxvY2sgQXZvaWRhbmNlKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgcmVsZWFzZXMgdGhlIGxvY2ssIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBkaWZmZXJlbmNlIGhlcmUgaXMgdGhlIHJlb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucy4gVGhlIG9sZCBjb2RlIGhhZCBhIHNwZWNpZmljIHNlcXVlbmNlOiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLCB0aGVuIGdyYWIgdGhlIGxpbWl0cyB1cGRhdGUgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIG1vZGlmeSB0aGUgRE1BIGxpbWl0LCBhbmQgZmluYWxseSBjb21taXQgdGhlIHVwZGF0ZSBhbmQgdW5mcmVlemUuCgpUaGUgbmV3IGNvZGUgcmV2ZXJzZXMgdGhpcy4gV2Ugbm93IHN0YXJ0IHRoZSB1cGRhdGUgZmlyc3Qgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsICp0aGVuKiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IGlmIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB0YWtlcyB0aGUgYGxpbWl0c19sb2NrYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIHdhaXRzIG9uIGNvbXBsZXRpb24gb2YgcmVxdWVzdHMsIGFuZCBzb21lIG90aGVyIHJlcXVlc3QgaXMgKmFsc28qIHdhaXRpbmcgb24gdGhhdCBzYW1lIGBsaW1pdHNfbG9ja2AgKG9yIHNvbWV0aGluZyBpbmRpcmVjdGx5IGRlcGVuZGluZyBvbiBpdCksIHdlIGNvdWxkIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrLgoKSW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgd2hldGhlciBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIGl0c2VsZiBtaWdodCBiZSB0aGUgb25lIGZyZWV6aW5nIHRoZSBxdWV1ZSwgYnV0IG5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgZG9lcy4gSG93ZXZlciwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIGZ1bGwgcGljdHVyZS4gYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCBkb2VzbiYjMzk7dCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgaXQgKmRvZXMqIHVwZGF0ZSB0aGUgbGltaXRzLCBhbmQgdGhhdCBjb3VsZCBiZSB3aGVyZSB0aGUgY29udGVudGlvbiBsaWVzLiBJIHN1c3BlY3QgdGhlcmUmIzM5O3MgaW50ZXJuYWwgbG9naWMgd2l0aGluIHRoYXQgZnVuY3Rpb24gdGhhdCBjb3VsZCBjYXVzZSB0aGF0IGZyZWV6aW5nIGJlaGF2aW91ci4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBibG9jay9ibGstc2V0dGluZ3MuY2AgZmlsZSBhbmQgZG91YmxlLWNoZWNrIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zZXR0aW5ncy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQ0LSAqL1xuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU0Ni1cdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgdGhlIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgYmxvY2sgZGV2aWNlIHNldHRpbmdzLiBJJiMzOTttIGxvb2tpbmcgYXQgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCB3aXRoaW4gYGJsb2NrL2Jsay1zZXR0aW5ncy5jYC4gVGhpcyBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb24gdGhhdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgKmNvbW1pdHRpbmcqIHVwZGF0ZXMgdG8gdGhlIHF1ZXVlIGxpbWl0cyBvZiBhIGJsb2NrIGRldmljZS4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdDogYHF1ZXVlX2xpbWl0c2AgaW5kaWNhdGVzIHdlIGFyZSB3b3JraW5nIHdpdGggdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBJL08gcmVxdWVzdHMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgZGV2aWNlIGFuZCBgY29tbWl0X3VwZGF0ZWAgaW1wbGllcyB0aGF0IHdlJiMzOTtyZSBhcHBseWluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb21taXQuIFRoaXMgaXMgcHJvYmFibHkgY2FsbGVkIGFmdGVyIGEgY2hhbmdlIHRvIHRoZSBzZXR0aW5ncy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciB3aGljaCBjYWxscyBhcmUgbWFkZSBpbiB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9ibGstc2V0dGluZ3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIDU0NjpcdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4gNTQ3Olx0e1xuIDU0ODpcdFx0aW50IGVycm9yO1xuIDU0OTpcdFxuIDU1MDpcdFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiA1NTE6XHRcbiA1NTI6XHRcdGVycm9yID0gYmxrX3ZhbGlkYXRlX2xpbWl0cyhsaW0pO1xuIDU1MzpcdFx0aWYgKGVycm9yKVxuIDU1NDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gNTU1Olx0XG4gNTU2Olx0I2lmZGVmIENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05cbiA1NTc6XHRcdGlmIChxLVx1MDAzZWNyeXB0b19wcm9maWxlIFx1MDAyNlx1MDAyNiBsaW0tXHUwMDNlaW50ZWdyaXR5LnRhZ19zaXplKSB7XG4gNTU4Olx0XHRcdHByX3dhcm4oXCYjMzQ7YmxrLWludGVncml0eTogSW50ZWdyaXR5IGFuZCBoYXJkd2FyZSBpbmxpbmUgZW5jcnlwdGlvbiBhcmUgbm90IHN1cHBvcnRlZCB0b2dldGhlci5cXG5cJiMzNDspO1xuIDU1OTpcdFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gNTYwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiA1NjE6XHRcdH1cbiA1NjI6XHQjZW5kaWZcbiA1NjM6XHRcbiA1NjQ6XHRcdHEtXHUwMDNlbGltaXRzID0gKmxpbTtcbiA1NjU6XHRcdGlmIChxLVx1MDAzZWRpc2spXG4gNTY2Olx0XHRcdGJsa19hcHBseV9iZGlfbGltaXRzKHEtXHUwMDNlZGlzay1cdTAwM2ViZGksIGxpbSk7XG4gNTY3Olx0b3V0X3VubG9jazpcbiA1Njg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZxLVx1MDAzZWxpbWl0c19sb2NrKTtcbiA1Njk6XHRcdHJldHVybiBlcnJvcjtcbiA1NzA6XHR9XG4gNTcxOlx0RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xuIDU3MjpcdFxuIDU3MzpcdC8qKlxuIDU3NDpcdCAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDY4NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDU4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQmxvY2sgTGF5ZXIgUXVldWUgVXBkYXRlIEZpeCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyBjb3JyZWN0OiBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgICpkb2VzbiYjMzk7dCogZnJlZXplIHRoZSBxdWV1ZSBkaXJlY3RseS4gVGhlIHB1enpsZSBpcywgd2h5IHRoZSByZW9yZGVyaW5nIG9mIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBiZWZvcmUgYGJsa19tcV9mcmVlemVfcXVldWVgPyBJdCYjMzk7cyBhbGwgYWJvdXQgbG9jayBhY3F1aXNpdGlvbiBvcmRlci4gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGdyYWJzIHRoZSBgcS0mZ3Q7bGltaXRzX2xvY2tgLiBJZiB3ZSBmcm96ZSB0aGUgcXVldWUgKmZpcnN0KiB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgd2UmIzM5O2QgcG90ZW50aWFsbHkgd2FpdCBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlLiBCdXQsIGlmIGEgcmVxdWVzdCBpcyBibG9ja2VkIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYCB3aGlsZSB0aGUgcXVldWUgaXMgdHJ5aW5nIHRvIGZyZWV6ZSwgd2UmIzM5O3ZlIGdvdCBhIGNsYXNzaWMgZGVhZGxvY2sgc2NlbmFyaW8uCgpXaGF0IHJlcXVlc3RzIG1pZ2h0IGJlIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYD8gSXQmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyBpbiBzeXNmcywgb3IgcG90ZW50aWFsbHkgYSBjb25jdXJyZW50IGNhbGwgdG8gc29tZXRoaW5nIGxpa2UgYGxvb3Bfc2V0X2Rpb2AgdGhhdCYjMzk7cyBob2xkaW5nIGBsaW1pdHNfbG9ja2AgYW5kIHRoZW4gZ2V0dGluZyBzdHVjayB3YWl0aW5nIGZvciB0aGUgcXVldWUgdG8gZnJlZXplLiBBbmQgY29uc2lkZXJpbmcgdGhhdCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgY2FuIHRha2Ugc29tZSB0aW1lLCB0aGUgaW1wbGljYXRpb25zIGFyZSBzaWduaWZpY2FudC4gUmVtZW1iZXIgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgZG9lcyB0aGUgZm9sbG93aW5nOgoKYGBgYwppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAoJCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSkKewoJaW50IHJldDsKCgltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CglyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShxLCBsaW0pOwoJYmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTsKCXJldHVybiByZXQ7Cn0KYGBgCgpFZmZlY3RpdmVseSwgdGhpcyBmdW5jdGlvbiBmcmVlemVzIHRoZSBxdWV1ZSAqd2hpbGUqIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBiZWNhdXNlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpcyBjYWxsZWQgZmlyc3QuIFRoZXJlZm9yZSwgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2UuIEl0IGVuc3VyZXMgY29uc2lzdGVuY3kgd2l0aCBob3cgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgb3BlcmF0ZXMgYW5kIGF2b2lkcyBsb2NrIGludmVyc2lvbiBiZXR3ZWVuIHRoZSBgbGltaXRzX2xvY2tgIGFuZCB0aGUgYHFfdXNhZ2VfY291bnRlcmAgKHRoZSBmcmVlemUgbG9jaykuCgpUaGUgcHJvYmxlbSwgc3BlY2lmaWNhbGx5LCBpcyBhIGNhbGwgdG8gYGxvb3Bfc2V0X2Rpb2AgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGBjCgltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTsKCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKYGBgCgpUaGlzIHNlcXVlbmNlIGFjcXVpcmVzIHRoZSBmcmVlemUgbG9jayBhbmQgdGhlbiBgbGltaXRzX2xvY2tgLiBIb3dldmVyLCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBpbnZlcnRzIHRoaXMgb3JkZXIsIGFjcXVpcmluZyBgbGltaXRzX2xvY2tgIGZpcnN0ICh0aHJvdWdoIGBzdGFydF91cGRhdGVgKSwgYW5kIHRoZW4gdGhlIGZyZWV6ZSBsb2NrLiBCb29tLiBBQi1CQSBkZWFkbG9jayBwb3RlbnRpYWwuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvbmNyZXRlIGZpeCBmb3IgYSBwb3RlbnRpYWxseSBzZXJpb3VzIHByb2JsZW0uIERlZmluaXRlbHkgd29ydGggZnV6emluZywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBgbG9vcF9zZXRfZGlvYCBmdW5jdGlvbiwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgbG9vcCBkcml2ZXIuIEFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZz0xNDA9Y29uZmlnIEJMS19ERVZfQ09XX0NPTU1PTlxuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDMtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTQ0OmNvbmZpZyBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXHR0cmlzdGF0ZSBcJiMzNDtMb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNzgtXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTgwLVx0aW50IFwmIzM0O051bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwODEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEb3VibGUtQ2hlY2tpbmcgdGhlIExvb3BiYWNrIERJTyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBgQkxLX0RFVl9MT09QYCBjb25maWd1cmF0aW9uIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2Agc3ltYm9sIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBEaXJlY3QgSS9PIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgc2V0LCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjb25jZW50cmF0ZSBteSBlZmZvcnRzLgoKQnV0LCB5b3Uga25vdyBob3cgaXQgZ29lcy4uLiBHb3R0YSBiZSB0aG9yb3VnaC4gRXZlbiB0aG91Z2ggSSB0aGluayBJJiMzOTt2ZSBnb3QgdGhlIG1haW4gcG9pbnQgbG9ja2VkIGRvd24sIEkgbmVlZCB0byB0YWtlIGEgcXVpY2sgc3dlZXAgb2YgdGhpcyBwYXRjaCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IHNpZGUgZWZmZWN0cyBvciByZWxhdGVkIGNoYW5nZXMgbHVya2luZyBpbiBvdGhlciBmaWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZiBiZWZvcmUgSSBtYWtlIGFueSBqdWRnZW1lbnRzLiBHb3R0YSBkb3QgdGhlIEkmIzM5O3MgYW5kIGNyb3NzIHRoZSBUJiMzOTtzLiBJIGRvbiYjMzk7dCB3YW50IHRvIG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgcGVyZm9ybWFuY2Ugb3Igc3RhYmlsaXR5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGNoYW5nZS4gQSBxdWljaywgZm9jdXNlZCBzY2FuIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wX3NldF9kaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI0PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM2LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzNzpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTU9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI3LVx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4Olx0XHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1ODkKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogNjY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGxvb3Bfc2V0X2Rpb2AgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBzb2xlbHkgZm9jdXNlZCBvbiBgbG9vcF9zZXRfZGlvYC4gIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLCBhbmQgaXQmIzM5O3MgcXVpdGUgbG9jYWxpemVkLiBJdCB1cGRhdGVzIGB1c2VfZGlvYCBhbmQgdGhhdCBpcyBpdC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBsaWtlbHkgYSBidWcgZml4IG9yIGFuIG9wdGltaXphdGlvbi4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZml4aW5nIGEgcG90ZW50aWFsIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrLiBUaGUgZGlmZiBjbGVhcmx5IHNob3dzIHRoZSByZW9yZGVyaW5nIG9mIGNhbGxzIHJlbGF0ZWQgdG8gcXVldWUgbGltaXQgdXBkYXRlcyBhbmQgcXVldWUgZnJlZXppbmcuICBCZWZvcmUsIGl0IGFwcGVhcnMgdGhlIGNvZGUgd2FzIGZyZWV6aW5nIHRoZSBxdWV1ZSAqYmVmb3JlKiBpbml0aWFsaXppbmcgdGhlIHVwZGF0ZSwgd2hpY2ggaXMgaW5jb3JyZWN0LiBUaGlzIG1lYW5zIHRoZSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgd2FzIGluY29ycmVjdGx5IHBsYWNlZCBhZnRlciB0aGUgYGJsa19tcV9mcmVlemVfcXVldWVgIGNhbGwuIEl0IG5vdyBjb3JyZWN0bHkgc3RhcnRzIHRoZSB1cGRhdGUgKmJlZm9yZSogZnJlZXppbmcuCgpUaGlzIHJlb3JkZXJpbmcgaXMgY3J1Y2lhbC4gSXTigJlzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgbG9vcCBkZXZpY2UgaGFuZGxlcyBEaXJlY3QgSS9PIChESU8pLCB3aGljaCBJIGtub3cgaW52b2x2ZXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYmFja2luZyBmaWxlJiMzOTtzIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGNvZGUgY2hlY2tzIGZvciByZWFkL3dyaXRlIGl0ZXJhdG9ycyBvbiB0aGUgYmFja2luZyBmaWxlLiBGdXJ0aGVybW9yZSwgdGhlIGB2ZnNfZnN5bmNgIGlzIGFsc28gYW4gaW5kaWNhdGlvbi4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgdHdlYWtlZC4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGxvY2stcmVsYXRlZCBpc3N1ZXMsIGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSS9PIGFuZCBxdWV1ZSBtYW5hZ2VtZW50LCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIGFyZWEgdGhhdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gQSBsb2NrIGludmVyc2lvbiBpbiB0aGlzIGNvbnRleHQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBzeXN0ZW0gaGFuZyBvciBldmVuIGRhdGEgY29ycnVwdGlvbiwgc28gdGhpcyBpcyBpbXBvcnRhbnQgYW5kIHdvcnRoIHRlc3RpbmcgdGhvcm91Z2hseS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRvIHNldCBhcHByb3ByaWF0ZSBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX3NldF9kaW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMTQ1MiwxMiAmIzQzOzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXZmc19mc3luYyhsby0mZ3Q7bG9fYmFja2luZ19maWxlLCAwKTsKIAl9CiAKJiM0MzsJbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwogCW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwogCWlmICh1c2VfZGlvKQogCQlsby0mZ3Q7bG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPOwogCWVsc2UKIAkJbG8tJmd0O2xvX2ZsYWdzICZhbXA7PSB+TE9fRkxBR1NfRElSRUNUX0lPOwotCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKIAlsb29wX3NldF9kbWFfbGltaXQobG8sICZhbXA7bGltKTsKIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKIAlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDg0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIHNwZWNpZmljYWxseSB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgcmVvcmRlcmluZyBvZiBzb21lIG9wZXJhdGlvbnMuIFRoZSBjaGFuZ2UgbW92ZXMgYGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTtgLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIGEgcG90ZW50aWFsIGZpeCBmb3IgYSBkZWFkbG9jaywgYSBsb2NraW5nIHByb2JsZW0sIG9yIHBlcmhhcHMgc2ltcGx5IGFuIG9wdGltaXphdGlvbiBpbiB0aGUgcXVldWUgbGltaXRzIHVwZGF0ZSBhbmQgZnJlZXplIHNlcXVlbmNlLgoKTGV0JiMzOTtzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGlzIGRvaW5nLiBPa2F5LCBpdCYjMzk7cyByZXR1cm5pbmcgYSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AuIEFoLCByaWdodCwgaXQgdGFrZXMgYSBgc3RydWN0IHJlcXVlc3RfcXVldWUgKnFgIGFzIGlucHV0IGFuZCByZXR1cm5zIGEgYHN0cnVjdCBxdWV1ZV9saW1pdHNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlIGdpdmVuIGBsaW1gIGlzIGEgbG9jYWwgdmFyaWFibGUuIE5vLCBpdCYjMzk7cyBqdXN0IHJlb3JkZXJpbmcgdGhlIGZ1bmN0aW9uIGNhbGxzLCBzbyBpdCBzaG91bGQgYmUgZmluZS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGxvb3Bfc2V0X2Rpb2AgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9zZXRfZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MTQyND1zdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0Mzc6c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNTE1PXN0YXRpYyBpbnQgbG9fc2ltcGxlX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGludCBjbWQsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cdGNhc2UgTE9PUF9TRVRfRElSRUNUX0lPOlxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcdFx0ZXJyID0gbG9vcF9zZXRfZGlvKGxvLCBhcmcpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDE4OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDUKCQkJCQkJCW91dHB1dDogMTIwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCB0YWlsb3JlZCBmb3IgbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipBbmFseXNpcyBvZiBQYXRjaCBPcmRlcmluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyByZW9yZGVyaW5nIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgbGlrZWx5IGEgc3VidGxlIGRlYWRsb2NrIHNjZW5hcmlvIG9yIHNvbWUgc29ydCBvZiBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWUgdGhhdCYjMzk7cyBiZWVuIGV4cG9zZWQuJiMzNDsgSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgbG9ja2luZyBoaWVyYXJjaGllcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGludm9sdmUgcXVldWUgbGltaXRzIGFuZCBmcmVlemluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSBhIHZlcnkgc3BlY2lmaWMgYW5kIGRlbGljYXRlIGZpeCB0byBhdm9pZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZHJpdmVyIG1pZ2h0IGxvY2sgdGhlIHF1ZXVlIGluIHRoZSB3cm9uZyBvcmRlciBvciBhdCB0aGUgd3JvbmcgdGltZS4KClRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJJiMzOTttIHJlYWRpbmcsIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGh1Z2UgcmVsaWVmIGJlY2F1c2UgdGhvc2Uga2luZHMgb2YgYnVncyBhcmUgdGhlIHdvcnN0IHRvIHRyYWNrIGRvd24uIEkgY2FuIGZvY3VzIHB1cmVseSBvbiB0aGUgZnVuY3Rpb25hbCBhc3BlY3RzIG9mIHRoZSByZW9yZGVyaW5nLiBBbmQgdGhlIGZhY3QgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIHRvIGNvbmZpcm0gdGhhdCBpcyBhbHNvIGdyZWF0LCBzaW5jZSB0aGF0IHNpbXBsaWZpZXMgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGlzc3VlIGlzIG5vdCByZWxhdGVkIHRvIG1lbW9yeSBzYWZldHksIHdoaWNoIG1lYW5zIHRoZSByb290IGNhdXNlIGlzIGxpa2VseSBzb21lIGluY29ycmVjdCBvcmRlcmluZyBvZiB0aGUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxODozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ0LjYwMTY2NDMzNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjk3MDkyMTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3Bfc2V0X2Rpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGx5IHJlb3JkZXJzIHRoZSBjYWxscyB0byBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlYCBpbiBgbG9vcF9zZXRfZGlvYCB0byBmaXggYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgbG9ja2luZyBpc3N1ZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9ja2luZyBpc3N1ZXMgKGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjYXVnaHQgYnkgTE9DS0RFUCwgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2sgYmV0d2VlbiBgcS1cXHUwMDNlbGltaXRzX2xvY2tgIGFuZCB0aGUgcXVldWUgZnJlZXplIGxvY2sgKGBxX3VzYWdlX2NvdW50ZXJgKSBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgYnkgcmVvcmRlcmluZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWUoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBkcml2ZXIgY29kZSAodmlhIHRoZSBgTE9PUF9TRVRfRElSRUNUX0lPYCBpb2N0bCkgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ0LjYwMTY3NDEwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcwMjA4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxODozMDo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggODYzOWZhMzRiODQ3MC4uNmYxMjk3NjAzNWIwOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHZmc19mc3luYyhsby1cXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcXG4gXFx0fVxcbiBcXG4rXFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0aWYgKHVzZV9kaW8pXFxuIFxcdFxcdGxvLVxcdTAwM2Vsb19mbGFncyB8PSBMT19GTEFHU19ESVJFQ1RfSU87XFxuIFxcdGVsc2VcXG4gXFx0XFx0bG8tXFx1MDAzZWxvX2ZsYWdzIFxcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XFxuLVxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG4gXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcXHUwMDI2bGltKTtcXG4gXFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG4gXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0NS4xNzI2OTkwMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MDcwNTI4ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX3NldF9kaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gYHEtXFx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzOTUxZTJiMWIzOGJlNGVmNmJkOTA2ZmVhNTBiOWYzMWMwYzhmMWFhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTg6MzA6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA4NjM5ZmEzNGI4NDcwLi42ZjEyOTc2MDM1YjA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtMTQ1MiwxMiArMTQ1MiwxMiBAQCBzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dmZzX2ZzeW5jKGxvLVx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XG4gXHR9XG4gXG4rXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRpZiAodXNlX2RpbylcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgfD0gTE9fRkxBR1NfRElSRUNUX0lPO1xuIFx0ZWxzZVxuIFx0XHRsby1cdTAwM2Vsb19mbGFncyBcdTAwMjY9IH5MT19GTEFHU19ESVJFQ1RfSU87XG4tXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbiBcdGxvb3Bfc2V0X2RtYV9saW1pdChsbywgXHUwMDI2bGltKTtcbiBcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pO1xuIFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLVx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0NS4xNzI3MDE0NzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDc3MTU4ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExvb3AgQmxvY2sgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgdGhlIGxvb3AgYmxvY2sgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgYSBjb2RlIHJlb3JkZXJpbmcgd2l0aGluIHRoZSBgbG9vcF9zZXRfZGlvYCBmdW5jdGlvbi4gIEl0J3MgbW92aW5nIHRoZSBjYWxsIHRvIGBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIGhvdyB0aGUgcXVldWUgbGltaXRzIGFyZSBoYW5kbGVkIHJlbGF0aXZlIHRvIHF1ZXVlIGZyZWV6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBvcmRlcmluZyBtYXR0ZXJzLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBUaGUgaW1wYWN0IGlzIGxpa2VseSBvbiBEaXJlY3QgSS9PIChESU8pIG9wZXJhdGlvbnMgd2l0aGluIHRoZSBsb29wIGRldmljZS4gSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgbG9vcF9zZXRfZGlvYCBhbmQgc2VlIGhvdyB0aGVzZSB0d28gY2FsbHMgaW50ZXJhY3QgYW5kIHdoYXQgZWZmZWN0cyB0aGlzIHJlb3JkZXJpbmcgbWlnaHQgaGF2ZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGxpbWl0cyB1cGRhdGUgaW50ZXJhY3RzIHdpdGggdGhlIGZyZWV6aW5nIG9mIHRoZSBxdWV1ZS4gSXMgdGhpcyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucz8gT3IgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEkgaGF2ZSB0byBsb29rIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRlbnQgYW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjQ5LjY0OTg2NjkyN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5OTIzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MjQ9c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDM3OnN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNT1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4OlxcdFxcdGVyciA9IGxvb3Bfc2V0X2RpbyhsbywgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMDo0OS43NjQ4NzgwMzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM0NjI0Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTG9vcCBEZXZpY2UgaW9jdGwgSGFuZGxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGlvY3RsYCBoYW5kbGVyLCBzcGVjaWZpY2FsbHkgZm9yIGBMT09QX1NFVF9ESVJFQ1RfSU9gLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVvcmRlcmluZyBvZiBvcGVyYXRpb25zLiBJdCdzIG1vdmluZyBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgKmJlZm9yZSogYGJsa19tcV9mcmVlemVfcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaHk/XCIgSXQncyB1c3VhbGx5IGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCByZS1vcmRlcmluZyBvcGVyYXRpb25zIGxpa2UgdGhpcyB1bmxlc3MgdGhlcmUncyBhIHNwZWNpZmljIHJlYXNvbiwgZXNwZWNpYWxseSBpbiBrZXJuZWwgY29kZSB3aGVyZSBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRlYWRsb2NrcyBhcmUgYSBjb25zdGFudCBjb25jZXJuLlxuXG5BaCwgSSBzZWUgaXQgbm93LiBUaGUgZ29hbCBpcyB0byBwcmV2ZW50IGEgcG90ZW50aWFsIHByb2JsZW0gd2hlcmUgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIG1pZ2h0IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IG9yLCBtb3JlIGdlbmVyYWxseSwgZXhlY3V0ZSBzb21lIG9wZXJhdGlvbiB0aGF0IGNvdWxkIGJsb2NrLiBJZiBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaXMgY2FsbGVkICpiZWZvcmUqIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCwgYW5kIHRoZSBsYXR0ZXIgYmxvY2tzIGZvciBhbnkgcmVhc29uIHdoaWxlIGhvbGRpbmcgYSBsb2NrLCB3ZSdyZSBpbiBkZWFkbG9jayB0ZXJyaXRvcnkuIFRoYXQncyBhIGNsYXNzaWMgcmFjZSBjb25kaXRpb24gc2NlbmFyaW8gdGhhdCBjb3VsZCBicmluZyB0aGUgd2hvbGUgdGhpbmcgZG93bi5cblxuV2FpdCBhIHNlY29uZOKApiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgKmRvZXMqIHRha2UgYSBsb2NrLCBkb2Vzbid0IGl0PyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgbWFrZSBzdXJlIG15IGluc3RpbmN0cyBhcmUgY29ycmVjdC4gR290dGEgYmUgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIGF2b2lkaW5nIGEgY3JpdGljYWwgcHJvYmxlbSBoZXJlLiBUaGF0J3MgZXhhY3RseSB3aGF0IEkgc3VzcGVjdGVkIC0gaXQncyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgd2hlbiB1cGRhdGluZyBjZXJ0YWluIHF1ZXVlIGxpbWl0cywgc28gaXQgdmVyeSBsaWtlbHkgbmVlZHMgdG8gbWFuYWdlIGFuZCBwcm90ZWN0IHRoZXNlIHF1ZXVlIGxpbWl0cyB3aXRoIGxvY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjcyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjU0LjM5OTUwNTY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM2NDc4Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yMzgtXFx0Lyogbm90ZSB0aGF0IHRoZSBmbGFncyBhcmUgaW52ZXJ0ZWQgdnMgdGhlIHZhbHVlcyBpbiB0aGUgc3lzZnMgZmlsZXMgKi9cXG5ibG9jay9ibGstaW50ZWdyaXR5LmM6MjM5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuYmxvY2svYmxrLWludGVncml0eS5jLTI0MC1cXHRpZiAodmFsKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzOC0gKlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjUzOTogKiBBcHBseSB0aGUgbGltaXRzIGluIEBsaW0gdGhhdCB3ZXJlIG9idGFpbmVkIGZyb20gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTQwLSAqIGFuZCB1cGRhdGVkIGJ5IHRoZSBjYWxsZXIgdG8gQHEuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBmcm96ZW4gdGhlIHF1ZXVlIG9yXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYz01NzE9RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTc3LSAqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc4OiAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgb2J0YWluZWQgZnJvbSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzktICogYW5kIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHZhbHVlcyBieSB0aGUgY2FsbGVyIHRvIEBxLiAgRnJlZXplcyB0aGUgcXVldWVcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jPTU5Nj1FWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4pO1xcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjAzLSAqIEFwcGx5IHRoZSBsaW1pdHMgaW4gQGxpbSB0aGF0IHdlcmUgZnJlc2hseSBpbml0aWFsaXplZCB0byBAcS5cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDQ6ICogVG8gdXBkYXRlIGV4aXN0aW5nIGxpbWl0cyB1c2UgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZFxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNS0gKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIGluc3RlYWQuXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYz04Nzk9cXVldWVfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jLTg5MS1cXG5ibG9jay9ibGstc3lzZnMuYzo4OTI6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTg5My1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIwNjYtXFxuYmxvY2svYmxrLXpvbmVkLmM6MjA2NzpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIwNjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jPTEzMDE9dm9pZCBkcmJkX3JlY29uc2lkZXJfcXVldWVfcGFyYW1ldGVycyhzdHJ1Y3QgZHJiZF9kZXZpY2UgKmRldmljZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMtMTMzNC1cXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jOjEzMzU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jLTEzMzYtXFx0aWYgKGJkZXYpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNT1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjYte1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNzpcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjgtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDAzPXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Mi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMDgzOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMDg0LVxcdGxvb3BfdXBkYXRlX2xpbWl0cyhsbywgXFx1MDAyNmxpbSwgY29uZmlnLVxcdTAwM2VibG9ja19zaXplKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExMzc9c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE1OS1cXHQgKi9cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTYwOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTYxLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBTRUNUT1JfU0laRTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE0Mzc9c3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDU0LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0NTU6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NTYtXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKGxvLVxcdTAwM2Vsb19xdWV1ZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDk4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE0OTk6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MDAtXFx0bG9vcF91cGRhdGVfbGltaXRzKGxvLCBcXHUwMDI2bGltLCBhcmcpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0zMzQ9c3RhdGljIGludCBuYmRfc2V0X3NpemUoc3RydWN0IG5iZF9kZXZpY2UgKm5iZCwgbG9mZl90IGJ5dGVzaXplLCBsb2ZmX3QgYmxrc2l6ZSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzUzLVxcbmRyaXZlcnMvYmxvY2svbmJkLmM6MzU0OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobmJkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNTUtXFx0aWYgKG5iZC1cXHUwMDNlY29uZmlnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5CRF9GTEFHX1NFTkRfVFJJTSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTEwOS1cXG5kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYzoxMTEwOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jLTExMTEtXFx0aWYgKHZpcnRibGtfZ2V0X2NhY2hlX21vZGUodmRldikpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jPTIwMDY9c3RhdGljIGludCBibGtpZl9yZWNvdmVyKHN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE0LVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM6MjAxNTpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGluZm8tXFx1MDAzZXJxKTtcXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTYtXFx0YmxrZnJvbnRfZ2F0aGVyX2JhY2tlbmRfZmVhdHVyZXMoaW5mbyk7XFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM9MjAyOD1pbnQgZG1fdGFibGVfc2V0X3Jlc3RyaWN0aW9ucyhzdHJ1Y3QgZG1fdGFibGUgKnQsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODItXFxuZHJpdmVycy9tZC9kbS10YWJsZS5jOjIwODM6XFx0b2xkX2xpbWl0cyA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuZHJpdmVycy9tZC9kbS10YWJsZS5jLTIwODQtXFx0ciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIGxpbWl0cyk7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9NTk1OT1zdGF0aWMgaW50IG1kZGV2X3NldF9sb2dpY2FsX2Jsb2NrX3NpemUoc3RydWN0IG1kZGV2ICptZGRldixcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy01OTcwLVxcbmRyaXZlcnMvbWQvbWQuYzo1OTcxOlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL21kL21kLmMtNTk3Mi1cXHRsaW0ubG9naWNhbF9ibG9ja19zaXplID0gbGJzO1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyMjg9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNDEtXFxuZHJpdmVycy9tZC9tZC5jOjYyNDI6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShtZGRldi1cXHUwMDNlZ2VuZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbWQvbWQuYy02MjQzLVxcdHF1ZXVlX2xpbWl0c19zdGFja19iZGV2KFxcdTAwMjZsaW0sIHJkZXYtXFx1MDAzZWJkZXYsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNjctXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbWQvbWQuYzo2MjY4OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL21kL21kLmMtNjI2OS1cXHRsaW0uaW9fb3B0ID0gbGltLmlvX21pbiAqIG5yX3N0cmlwZXM7XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQ1LmM9NzE3Mj1yYWlkNV9zdG9yZV9za2lwX2NvcHkoc3RydWN0IG1kZGV2ICptZGRldiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbilcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYy03MTkxLVxcdFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTkyOlxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL3JhaWQ1LmMtNzE5My1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjIzLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI0OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjIyNS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhucy1cXHUwMDNlY3RybCwgXFx1MDAyNmxpbSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzODc9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDM4LVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDM5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobnMtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ0MC1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU2Mi1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjU2MzpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI1NjQtXFx0XFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKG5zLVxcdTAwM2VoZWFkLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MzU4OT1zdGF0aWMgaW50IG52bWVfaW5pdF9pZGVudGlmeShzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTM2NTctXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjM2NTg6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShjdHJsLVxcdTAwM2VhZG1pbl9xKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY1OS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcXHUwMDI2bGltLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM9MzI0PXN0YXRpYyBpbnQgZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ2LVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzQ3OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoYmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzQ4LVxcdGxpbS5tYXhfZGV2X3NlY3RvcnMgPSBkZXZpY2UtXFx1MDAzZWRpc2NpcGxpbmUtXFx1MDAzZW1heF9zZWN0b3JzKGJsb2NrKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc3LVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA3ODpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUpO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA3OS1cXHRtcGkzbXJfY29uZmlndXJlX3RndF9kZXYodGd0ZGV2LCBcXHUwMDI2bGltKTtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYz04ODA9c3RhdGljIGludCBzY3NpX2FkZF9sdW4oc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBjaGFyICppbnFfcmVzdWx0LFxcbi0tXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jLTEwODktXFx0ICovXFxuZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jOjEwOTA6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGV2LVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMtMTA5MS1cXHRpZiAoKmJmbGFncyBcXHUwMDI2IEJMSVNUX01BWF81MTIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0yMjA9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMjU4LVxcbmRyaXZlcnMvc2NzaS9zZC5jOjI1OTpcXHRcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjAtXFx0XFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTU5Mi1cXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTM6XFx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zY3NpL3NkLmMtNTk0LVxcdHNkX2NvbmZpZ19kaXNjYXJkKHNka3AsIFxcdTAwMjZsaW0sIG1vZGUpO1xcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmM9Njc1PW1heF93cml0ZV9zYW1lX2Jsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtNzAxLVxcbmRyaXZlcnMvc2NzaS9zZC5jOjcwMjpcXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy03MDMtXFx0c2RfY29uZmlnX3dyaXRlX3NhbWUoc2RrcCwgXFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz0zNzYwPXN0YXRpYyB2b2lkIHNkX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTM3ODktXFxuZHJpdmVycy9zY3NpL3NkLmM6Mzc5MDpcXHQqbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSk7XFxuZHJpdmVycy9zY3NpL3NkLmMtMzc5MS1cXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jPTQ3Nj1zdGF0aWMgaW50IHNyX3JldmFsaWRhdGVfZGlzayhzdHJ1Y3Qgc2NzaV9jZCAqY2QpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc3IuYy00ODgtXFxuZHJpdmVycy9zY3NpL3NyLmM6NDg5OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuZHJpdmVycy9zY3NpL3NyLmMtNDkwLVxcdGxpbS5sb2dpY2FsX2Jsb2NrX3NpemUgPSBzZWN0b3Jfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYz01ODQ9c3RhdGljIHNzaXplX3QgbWF4X3NlY3RvcnNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmM6NTk1OlxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jLTU5Ni1cXHRsaW0ubWF4X2h3X3NlY3RvcnMgPSBtcztcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA4OC0vKipcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEwODk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSAtIHN0YXJ0IGFuIGF0b21pYyB1cGRhdGUgb2YgcXVldWUgbGltaXRzXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDkwLSAqIEBxOlxcdFxcdHF1ZXVlIHRvIHVwZGF0ZVxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMDk5PXN0YXRpYyBpbmxpbmUgc3RydWN0IHF1ZXVlX2xpbWl0c1xcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwMDpxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwMS1cXHRfX2FjcXVpcmVzKFxcdTAwMjZxLVxcdTAwM2VsaW1pdHNfbG9jaylcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTExMj1pbnQgYmxrX3ZhbGlkYXRlX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMTE4LSAqIFRoaXMgZnVuY3Rpb25zIGNhbmNlbHMgYW4gYXRvbWljIHVwZGF0ZSBvZiB0aGUgcXVldWUgbGltaXRzIHN0YXJ0ZWQgYnlcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMTk6ICogcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZSgpIGFuZCBzaG91bGQgYmUgdXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyBhZnRlclxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEyMC0gKiBzdGFydGluZyB1cGRhdGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMwOjU2LjczNTk5MTY1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMTg3MzI2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFJhY2UgQ29uZGl0aW9uIGluIEJsb2NrIERldmljZSBRdWV1ZSBVcGRhdGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gc3VzcyBvdXQgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUgcmVsYXRlZCB0byBob3cgd2UncmUgdXBkYXRpbmcgYmxvY2sgZGV2aWNlIHF1ZXVlIGxpbWl0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGdyYWJzIGEgbG9jaywgc3BlY2lmaWNhbGx5IGBxLVx1MDAzZWxpbWl0c19sb2NrYC4gVGhlbiBJIHNlZSB0aGF0IGBibGtfbXFfZnJlZXplX3F1ZXVlYCBiYXNpY2FsbHkgd2FpdHMgZm9yIGFsbCByZXF1ZXN0cyB0byBjb21wbGV0ZSBvbiB0aGUgcXVldWUuIFRoZSBjcnVjaWFsIHRoaW5nIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgYSBkZWFkbG9jay4gSWYgYSByZXF1ZXN0ICpzb21laG93KiBnZXRzIGJsb2NrZWQgd2FpdGluZyBmb3IgYHEtXHUwMDNlbGltaXRzX2xvY2tg4oCUd2hpY2ggaXMgdXN1YWxseSB1bmxpa2VseSwgc2luY2UgdGhlIGxvY2sgaXMgbm9ybWFsbHkgaGVsZCBmb3IgYSBzaG9ydCB0aW1l4oCUb3IgaWYgYGJsa19tcV9mcmVlemVfcXVldWVgICppdHNlbGYqIGdldHMgY2FsbGVkIHdoaWxlIHRoZSBgbGltaXRzX2xvY2tgIGlzIGFscmVhZHkgaGVsZCwgd2UndmUgZ290IGEgcHJvYmxlbS4gU29tZXRoaW5nIGVsc2UgbWlnaHQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSBhbmQgd2FpdGluZyBmb3IgYGxpbWl0c19sb2NrYC5cblxuVGhlbiBJIHJlbWVtYmVyIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgKnJlbGVhc2VzKiB0aGF0IGxvY2suIE9rYXksIHRoYXQncyBpbXBvcnRhbnQuIEknbSBjb21wYXJpbmcgdGhlIG9sZCBjb2RlIHdpdGggdGhlIG5ldyBjb2RlIHRvIHNlZSB3aGF0J3MgY2hhbmdlZC4gVGhlIG9sZCBzZXF1ZW5jZSB3YXM6IGZyZWV6ZSB0aGUgcXVldWUsIHNldCB0aGUgZGlyZWN0IElPIGZsYWcsIHN0YXJ0IHRoZSB1cGRhdGUsIHNldCB0aGUgRE1BIGxpbWl0LCBjb21taXQgdGhlIHVwZGF0ZSwgdGhlbiB1bmZyZWV6ZS4gVGhlIG5ldyBjb2RlIGRvZXMgdGhpbmdzIGRpZmZlcmVudGx5OiBzdGFydCB0aGUgdXBkYXRlLCBmcmVlemUgdGhlIHF1ZXVlLCBzZXQgdGhlIGRpcmVjdCBJTyBmbGFnLCBzZXQgdGhlIERNQSBsaW1pdCwgY29tbWl0IHRoZSB1cGRhdGUsIHRoZW4gdW5mcmVlemUuXG5cblRoZSBrZXkgZGlmZmVyZW5jZSBzZWVtcyB0byBiZSB0aGUgb3JkZXIgb2YgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIEl0IGxvb2tzIGxpa2UgdGhlIGZyZWV6ZSBpcyBub3cgaGFwcGVuaW5nICphZnRlciogYWNxdWlyaW5nIHRoZSBgbGltaXRzX2xvY2tgLiBUaGlzIGNvdWxkIGJlIHNhZmVyLCBhc3N1bWluZyBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHByb3Blcmx5IHJlbGVhc2VzIHRoZSBsb2NrLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgdG8gYmUgc3VyZS4gSXQgc2hvdWxkIGJlIGEgcHJldHR5IHNhZmUgbWV0aG9kIGlmIGl0cyBvbmx5IGZ1bmN0aW9uIGlzIHRvIHJlbGVhc2UgdGhlIGxvY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczMjYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MDQuODU0NzI3NDY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTIyMzg3NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1pbnRlZ3JpdHkuYz0yMjY9c3RhdGljIHNzaXplX3QgZmxhZ19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCxcXG4tLVxcbmJsb2NrL2Jsay1pbnRlZ3JpdHkuYy0yNDQtXFxuYmxvY2svYmxrLWludGVncml0eS5jOjI0NTpcXHRlcnIgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4ocSwgXFx1MDAyNmxpbSk7XFxuYmxvY2svYmxrLWludGVncml0eS5jLTI0Ni1cXHRpZiAoZXJyKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NTIyPWludCBibGtfc2V0X2RlZmF1bHRfbGltaXRzKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTUzNC0vKipcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1MzU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUgLSBjb21taXQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01MzYtICogQHE6XFx0XFx0cXVldWUgdG8gdXBkYXRlXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDYtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTcwLX1cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1NzE6RVhQT1JUX1NZTUJPTF9HUEwocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUpO1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3Mi1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NzMtLyoqXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTc0OiAqIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbiAtIGNvbW1pdCBhbiBhdG9taWMgdXBkYXRlIG9mIHF1ZXVlIGxpbWl0c1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU3NS0gKiBAcTpcXHRcXHRxdWV1ZSB0byB1cGRhdGVcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU4My0gKi9cXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1ODQ6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01ODUtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTkwLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo1OTE6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01OTItXFx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcXG4tLVxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTU5NS19XFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTk2OkVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbik7XFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNTk3LVxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmMtNjA0LSAqIFRvIHVwZGF0ZSBleGlzdGluZyBsaW1pdHMgdXNlIHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKSBhbmRcXG5ibG9jay9ibGstc2V0dGluZ3MuYzo2MDU6ICogcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoKSBpbnN0ZWFkLlxcbmJsb2NrL2Jsay1zZXR0aW5ncy5jLTYwNi0gKlxcbi0tXFxuYmxvY2svYmxrLXNldHRpbmdzLmM9NjA5PWludCBxdWV1ZV9saW1pdHNfc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spO1xcbmJsb2NrL2Jsay1zZXR0aW5ncy5jOjYxMjpcXHRyZXR1cm4gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcXG5ibG9jay9ibGstc2V0dGluZ3MuYy02MTMtfVxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9MTg5PXF1ZXVlX3JhX3N0b3JlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy0yMDAtXFx0ICogaXMgdXN1YWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIHF1ZXVlIGxpbWl0cyBieVxcbmJsb2NrL2Jsay1zeXNmcy5jOjIwMTpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpLlxcbmJsb2NrL2Jsay1zeXNmcy5jLTIwMi1cXHQgKlxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9ODc5PXF1ZXVlX2F0dHJfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy04OTktXFxuYmxvY2svYmxrLXN5c2ZzLmM6OTAwOlxcdFxcdHJlcyA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcXHUwMDI2bGltKTtcXG5ibG9jay9ibGstc3lzZnMuYy05MDEtXFx0XFx0aWYgKHJlcylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTIwNTg9c3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTIxMjAtY29tbWl0OlxcbmJsb2NrL2Jsay16b25lZC5jOjIxMjE6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXFx1MDAyNmxpbSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjEyMi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM9MTMwMT12b2lkIGRyYmRfcmVjb25zaWRlcl9xdWV1ZV9wYXJhbWV0ZXJzKHN0cnVjdCBkcmJkX2RldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xNDAwLVxcbmRyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmM6MTQwMTpcXHRpZiAocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXFx1MDAyNmxpbSkpXFxuZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYy0xNDAyLVxcdFxcdGRyYmRfZXJyKGRldmljZSwgXFxcInNldHRpbmcgbmV3IHF1ZXVlIGxpbWl0cyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI1PXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjQzLVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI0NDpcXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI0NS19XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDAzPXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4NS1cXHQvKiBObyBuZWVkIHRvIGZyZWV6ZSB0aGUgcXVldWUgYXMgdGhlIGRldmljZSBpc24ndCBib3VuZCB5ZXQuICovXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTA4NjpcXHRlcnJvciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTA4Ny1cXHRpZiAoZXJyb3IpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMTM3PXN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNjMtXFx0bGltLmlvX21pbiA9IFNFQ1RPUl9TSVpFO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjExNjQ6XFx0cXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTY1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTQzNz1zdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0NjEtXFx0bG9vcF9zZXRfZG1hX2xpbWl0KGxvLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDYyOlxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQ2My1cXHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXFx1MDAzZWxvX3F1ZXVlLCBtZW1mbGFncyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDY3PXN0YXRpYyBpbnQgbG9vcF9zZXRfYmxvY2tfc2l6ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTAyLVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE1MDM6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobG8tXFx1MDAzZWxvX3F1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTA0LVxcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTMzND1zdGF0aWMgaW50IG5iZF9zZXRfc2l6ZShzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCBsb2ZmX3QgYnl0ZXNpemUsIGxvZmZfdCBibGtzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYy0zNzMtXFx0bGltLnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBibGtzaXplO1xcbmRyaXZlcnMvYmxvY2svbmJkLmM6Mzc0OlxcdGVycm9yID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKG5iZC1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvYmxvY2svbmJkLmMtMzc1LVxcdGlmIChlcnJvcilcXG4tLVxcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jPTEwOTQ9Y2FjaGVfdHlwZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNC1cXHRcXHRsaW0uZmVhdHVyZXMgXFx1MDAyNj0gfkJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbmRyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jOjExMTU6XFx0aSA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMtMTExNi1cXHRpZiAoaSlcXG4tLVxcbmRyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmM9MjAwNj1zdGF0aWMgaW50IGJsa2lmX3JlY292ZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jLTIwMTctXFx0YmxraWZfc2V0X3F1ZXVlX2xpbWl0cyhpbmZvLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jOjIwMTg6XFx0cmMgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShpbmZvLVxcdTAwM2VycSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYy0yMDE5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbWQvZG0tdGFibGUuYz0yMDI4PWludCBkbV90YWJsZV9zZXRfcmVzdHJpY3Rpb25zKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4My1cXHRvbGRfbGltaXRzID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShxKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmM6MjA4NDpcXHRyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltaXRzKTtcXG5kcml2ZXJzL21kL2RtLXRhYmxlLmMtMjA4NS1cXHRpZiAocilcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz01OTU5PXN0YXRpYyBpbnQgbWRkZXZfc2V0X2xvZ2ljYWxfYmxvY2tfc2l6ZShzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTU5NzQtXFx0XFx0bWRuYW1lKG1kZGV2KSk7XFxuZHJpdmVycy9tZC9tZC5jOjU5NzU6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobWRkZXYtXFx1MDAzZWdlbmRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL21kL21kLmMtNTk3Ni1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyMjg9aW50IG1kZGV2X3N0YWNrX25ld19yZGV2KHN0cnVjdCBtZGRldiAqbWRkZXYsIHN0cnVjdCBtZF9yZGV2ICpyZGV2KVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNTItXFxuZHJpdmVycy9tZC9tZC5jOjYyNTM6XFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNTQtfVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTYyNTg9dm9pZCBtZGRldl91cGRhdGVfaW9fb3B0KHN0cnVjdCBtZGRldiAqbWRkZXYsIHVuc2lnbmVkIGludCBucl9zdHJpcGVzKVxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTYyNjktXFx0bGltLmlvX29wdCA9IGxpbS5pb19taW4gKiBucl9zdHJpcGVzO1xcbmRyaXZlcnMvbWQvbWQuYzo2MjcwOlxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG1kZGV2LVxcdTAwM2VnZW5kaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9tZC9tZC5jLTYyNzEtXFx0bWRkZXZfcmVzdW1lKG1kZGV2KTtcXG4tLVxcbmRyaXZlcnMvbWQvcmFpZDUuYz03MTcyPXJhaWQ1X3N0b3JlX3NraXBfY29weShzdHJ1Y3QgbWRkZXYgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbi0tXFxuZHJpdmVycy9tZC9yYWlkNS5jLTcxOTgtXFx0XFx0XFx0bGltLmZlYXR1cmVzIFxcdTAwMjY9IH5CTEtfRkVBVF9TVEFCTEVfV1JJVEVTO1xcbmRyaXZlcnMvbWQvcmFpZDUuYzo3MTk5OlxcdFxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvbWQvcmFpZDUuYy03MjAwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMjE3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19nZW5lcmljKHN0cnVjdCBudm1lX25zICpucyxcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yMjI3LVxcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUpO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyMjI4OlxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKG5zLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTIyMjktXFx0c2V0X2Rpc2tfcm8obnMtXFx1MDAzZWRpc2ssIG52bWVfbnNfaXNfcmVhZG9ubHkobnMsIGluZm8pKTtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yMzg3PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mb19ibG9jayhzdHJ1Y3QgbnZtZV9ucyAqbnMsXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ4Ny1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MjQ4ODpcXHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShucy1cXHUwMDNlZGlzay1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDg5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTIwPXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU5My1cXHRcXHRsaW0ud3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5ID0gbnNfbGltLVxcdTAwM2V3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHk7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI1OTQ6XFx0XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUobnMtXFx1MDAzZWhlYWQtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjU5NS1cXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0zNTg5PXN0YXRpYyBpbnQgbnZtZV9pbml0X2lkZW50aWZ5KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpXFxuLS1cXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY1OS1cXHRudm1lX3NldF9jdHJsX2xpbWl0cyhjdHJsLCBcXHUwMDI2bGltLCB0cnVlKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmM6MzY2MDpcXHRyZXQgPSBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShjdHJsLVxcdTAwM2VhZG1pbl9xLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMzY2MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYz0zMjQ9c3RhdGljIGludCBkYXNkX3N0YXRlX2Jhc2ljX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYy0zNzAtXFx0fVxcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmM6MzcxOlxcdHJjID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoYmxvY2stXFx1MDAzZWdkcC1cXHUwMDNlcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMtMzcyLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM9MTA2Nz1tcGkzbXJfdXBkYXRlX3NkZXYoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9zY3NpL21waTNtci9tcGkzbXJfb3MuYy0xMDc5LVxcdG1waTNtcl9jb25maWd1cmVfdGd0X2Rldih0Z3RkZXYsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmM6MTA4MDpcXHRXQVJOX09OX09OQ0UocXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUoc2Rldi1cXHUwMDNlcmVxdWVzdF9xdWV1ZSwgXFx1MDAyNmxpbSkpO1xcbmRyaXZlcnMvc2NzaS9tcGkzbXIvbXBpM21yX29zLmMtMTA4MS19XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmM9ODgwPXN0YXRpYyBpbnQgc2NzaV9hZGRfbHVuKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdW5zaWduZWQgY2hhciAqaW5xX3Jlc3VsdCxcXG4tLVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTA5LVxcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYzoxMTEwOlxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYy0xMTExLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTIyMD1jYWNoZV90eXBlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjAtXFx0XFx0c2Rfc2V0X2ZsdXNoX2ZsYWcoc2RrcCwgXFx1MDAyNmxpbSk7XFxuZHJpdmVycy9zY3NpL3NkLmM6MjYxOlxcdFxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSxcXG5kcml2ZXJzL3Njc2kvc2QuYy0yNjItXFx0XFx0XFx0XFx0XFx1MDAyNmxpbSk7XFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYz01NzU9cHJvdmlzaW9uaW5nX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTU5NC1cXHRzZF9jb25maWdfZGlzY2FyZChzZGtwLCBcXHUwMDI2bGltLCBtb2RlKTtcXG5kcml2ZXJzL3Njc2kvc2QuYzo1OTU6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy01OTYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTY3NT1tYXhfd3JpdGVfc2FtZV9ibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jLTcwMy1cXHRzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYzo3MDQ6XFx0ZXJyID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNka3AtXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy03MDUtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvc2NzaS9zZC5jPTM3NjA9c3RhdGljIHZvaWQgc2RfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi0tXFxuZHJpdmVycy9zY3NpL3NkLmMtMzg2Ny1cXG5kcml2ZXJzL3Njc2kvc2QuYzozODY4OlxcdGVyciA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihzZGtwLVxcdTAwM2VkaXNrLVxcdTAwM2VxdWV1ZSwgbGltKTtcXG5kcml2ZXJzL3Njc2kvc2QuYy0zODY5LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL3Njc2kvc2QuYy0zODczLVxcdCAqIFF1ZXJ5IGNvbmN1cnJlbnQgcG9zaXRpb25pbmcgcmFuZ2VzIGFmdGVyXFxuZHJpdmVycy9zY3NpL3NkLmM6Mzg3NDpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpIHVubG9ja2VkIHEtXFx1MDAzZWxpbWl0c19sb2NrIHRvIGF2b2lkXFxuZHJpdmVycy9zY3NpL3NkLmMtMzg3NS1cXHQgKiBkZWFkbG9jayB3aXRoIHEtXFx1MDAzZXN5c2ZzX2Rpcl9sb2NrIGFuZCBxLVxcdTAwM2VzeXNmc19sb2NrLlxcbi0tXFxuZHJpdmVycy9zY3NpL3NyLmM9NDc2PXN0YXRpYyBpbnQgc3JfcmV2YWxpZGF0ZV9kaXNrKHN0cnVjdCBzY3NpX2NkICpjZClcXG4tLVxcbmRyaXZlcnMvc2NzaS9zci5jLTQ5MS1cXHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfUk9UQVRJT05BTDtcXG5kcml2ZXJzL3Njc2kvc3IuYzo0OTI6XFx0cmV0dXJuIHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbihxLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL3Njc2kvc3IuYy00OTMtfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jPTU4ND1zdGF0aWMgc3NpemVfdCBtYXhfc2VjdG9yc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMtNTk2LVxcdGxpbS5tYXhfaHdfc2VjdG9ycyA9IG1zO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYzo1OTc6XFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHNkZXYtXFx1MDAzZXJlcXVlc3RfcXVldWUsIFxcdTAwMjZsaW0pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYy01OTgtXFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg9MTA4MD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtfYm91bmRhcnlfc2VjdG9yc19sZWZ0KHNlY3Rvcl90IG9mZnNldCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTA5My0gKiB0byBwcmV2ZW50IG90aGVyIHVwZGF0ZXMgYW5kIHJldHVybnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsaW1pdHMgdGhhdFxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTA5NDogKiB0aGUgY2FsbGVyIGNhbiBtb2RpZnkuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZSgpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMDk1LSAqIHRvIGZpbmlzaCB0aGUgdXBkYXRlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMTAwPXF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oLTExMDUtfVxcbmluY2x1ZGUvbGludXgvYmxrZGV2Lmg6MTEwNjppbnQgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwNy1cXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjExMDg6aW50IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTEwOS1cXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pIF9fcmVsZWFzZXMoXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MDcuNjY2OTczMjI5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM5MDU3NDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlOiBEZWFkbG9jayBBdm9pZGFuY2UqKlxuXG5BbHJpZ2h0LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgIHJlbGVhc2VzIHRoZSBsb2NrLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgZGlmZmVyZW5jZSBoZXJlIGlzIHRoZSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIFRoZSBvbGQgY29kZSBoYWQgYSBzcGVjaWZpYyBzZXF1ZW5jZTogZnJlZXplIHRoZSBxdWV1ZSB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgdGhlbiBncmFiIHRoZSBsaW1pdHMgdXBkYXRlIHdpdGggYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgLCBtb2RpZnkgdGhlIERNQSBsaW1pdCwgYW5kIGZpbmFsbHkgY29tbWl0IHRoZSB1cGRhdGUgYW5kIHVuZnJlZXplLlxuXG5UaGUgbmV3IGNvZGUgcmV2ZXJzZXMgdGhpcy4gV2Ugbm93IHN0YXJ0IHRoZSB1cGRhdGUgZmlyc3Qgd2l0aCBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsICp0aGVuKiBmcmVlemUgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jay4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IGlmIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB0YWtlcyB0aGUgYGxpbWl0c19sb2NrYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIHdhaXRzIG9uIGNvbXBsZXRpb24gb2YgcmVxdWVzdHMsIGFuZCBzb21lIG90aGVyIHJlcXVlc3QgaXMgKmFsc28qIHdhaXRpbmcgb24gdGhhdCBzYW1lIGBsaW1pdHNfbG9ja2AgKG9yIHNvbWV0aGluZyBpbmRpcmVjdGx5IGRlcGVuZGluZyBvbiBpdCksIHdlIGNvdWxkIGhhdmUgYSBjbGFzc2ljIGRlYWRsb2NrLlxuXG5Jbml0aWFsbHksIEkgY29uc2lkZXJlZCB3aGV0aGVyIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgaXRzZWxmIG1pZ2h0IGJlIHRoZSBvbmUgZnJlZXppbmcgdGhlIHF1ZXVlLCBidXQgbm8sIHRoYXQncyBub3QgcmlnaHQuIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW5gIGRvZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byByZW1pbmQgbXlzZWxmIG9mIHRoZSBmdWxsIHBpY3R1cmUuIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgZG9lc24ndCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgaXQgKmRvZXMqIHVwZGF0ZSB0aGUgbGltaXRzLCBhbmQgdGhhdCBjb3VsZCBiZSB3aGVyZSB0aGUgY29udGVudGlvbiBsaWVzLiBJIHN1c3BlY3QgdGhlcmUncyBpbnRlcm5hbCBsb2dpYyB3aXRoaW4gdGhhdCBmdW5jdGlvbiB0aGF0IGNvdWxkIGNhdXNlIHRoYXQgZnJlZXppbmcgYmVoYXZpb3VyLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgYmxvY2svYmxrLXNldHRpbmdzLmNgIGZpbGUgYW5kIGRvdWJsZS1jaGVjayBleGFjdGx5IHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDkyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjE1LjA1NzU1MDc0N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MzMxNTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay1zZXR0aW5ncy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay1zZXR0aW5ncy5jPTUyMj1pbnQgYmxrX3NldF9kZWZhdWx0X2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDQtICovXFxuYmxvY2svYmxrLXNldHRpbmdzLmM6NTQ1OmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG5ibG9jay9ibGstc2V0dGluZ3MuYy01NDYtXFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMToxNS4xNzM4ODg1NDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA3MTQ2MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBibG9jayBkZXZpY2Ugc2V0dGluZ3MuIEknbSBsb29raW5nIGF0IGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZWAgd2l0aGluIGBibG9jay9ibGstc2V0dGluZ3MuY2AuIFRoaXMgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb24gdGhhdCdzIHJlc3BvbnNpYmxlIGZvciAqY29tbWl0dGluZyogdXBkYXRlcyB0byB0aGUgcXVldWUgbGltaXRzIG9mIGEgYmxvY2sgZGV2aWNlLiBUaGUgbmFtZSBpdHNlbGYgaXMgcHJldHR5IGV4cGxpY2l0OiBgcXVldWVfbGltaXRzYCBpbmRpY2F0ZXMgd2UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgY29uc3RyYWludHMgb2YgdGhlIEkvTyByZXF1ZXN0cyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZSBkZXZpY2UgYW5kIGBjb21taXRfdXBkYXRlYCBpbXBsaWVzIHRoYXQgd2UncmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdHJpZ2dlcnMgdGhpcyBjb21taXQuIFRoaXMgaXMgcHJvYmFibHkgY2FsbGVkIGFmdGVyIGEgY2hhbmdlIHRvIHRoZSBzZXR0aW5ncy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHdoaWNoIGNhbGxzIGFyZSBtYWRlIGluIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjE5LjI0NTM1NDA0NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTEyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmxrLXNldHRpbmdzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdGludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4gNTQ2OlxcdFxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4gNTQ3OlxcdHtcXG4gNTQ4OlxcdFxcdGludCBlcnJvcjtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cS1cXHUwMDNlbGltaXRzX2xvY2spO1xcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRlcnJvciA9IGJsa192YWxpZGF0ZV9saW1pdHMobGltKTtcXG4gNTUzOlxcdFxcdGlmIChlcnJvcilcXG4gNTU0OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gNTU1OlxcdFxcbiA1NTY6XFx0I2lmZGVmIENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05cXG4gNTU3OlxcdFxcdGlmIChxLVxcdTAwM2VjcnlwdG9fcHJvZmlsZSBcXHUwMDI2XFx1MDAyNiBsaW0tXFx1MDAzZWludGVncml0eS50YWdfc2l6ZSkge1xcbiA1NTg6XFx0XFx0XFx0cHJfd2FybihcXFwiYmxrLWludGVncml0eTogSW50ZWdyaXR5IGFuZCBoYXJkd2FyZSBpbmxpbmUgZW5jcnlwdGlvbiBhcmUgbm90IHN1cHBvcnRlZCB0b2dldGhlci5cXFxcblxcXCIpO1xcbiA1NTk6XFx0XFx0XFx0ZXJyb3IgPSAtRUlOVkFMO1xcbiA1NjA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiA1NjE6XFx0XFx0fVxcbiA1NjI6XFx0I2VuZGlmXFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdHEtXFx1MDAzZWxpbWl0cyA9ICpsaW07XFxuIDU2NTpcXHRcXHRpZiAocS1cXHUwMDNlZGlzaylcXG4gNTY2OlxcdFxcdFxcdGJsa19hcHBseV9iZGlfbGltaXRzKHEtXFx1MDAzZWRpc2stXFx1MDAzZWJkaSwgbGltKTtcXG4gNTY3OlxcdG91dF91bmxvY2s6XFxuIDU2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnEtXFx1MDAzZWxpbWl0c19sb2NrKTtcXG4gNTY5OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gNTcwOlxcdH1cXG4gNTcxOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKTtcXG4gNTcyOlxcdFxcbiA1NzM6XFx0LyoqXFxuIDU3NDpcXHQgKiBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4gLSBjb21taXQgYW4gYXRvbWljIHVwZGF0ZSBvZiBxdWV1ZSBsaW1pdHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6MTkuMjQ1NjEyMDA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjIxNjA5NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBMYXllciBRdWV1ZSBVcGRhdGUgRml4KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgY29ycmVjdDogYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlYCAqZG9lc24ndCogZnJlZXplIHRoZSBxdWV1ZSBkaXJlY3RseS4gVGhlIHB1enpsZSBpcywgd2h5IHRoZSByZW9yZGVyaW5nIG9mIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBiZWZvcmUgYGJsa19tcV9mcmVlemVfcXVldWVgPyBJdCdzIGFsbCBhYm91dCBsb2NrIGFjcXVpc2l0aW9uIG9yZGVyLiBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAgZ3JhYnMgdGhlIGBxLVx1MDAzZWxpbWl0c19sb2NrYC4gSWYgd2UgZnJvemUgdGhlIHF1ZXVlICpmaXJzdCogd2l0aCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAsIHdlJ2QgcG90ZW50aWFsbHkgd2FpdCBmb3IgYWxsIHJlcXVlc3RzIHRvIGNvbXBsZXRlLiBCdXQsIGlmIGEgcmVxdWVzdCBpcyBibG9ja2VkIHdhaXRpbmcgb24gYGxpbWl0c19sb2NrYCB3aGlsZSB0aGUgcXVldWUgaXMgdHJ5aW5nIHRvIGZyZWV6ZSwgd2UndmUgZ290IGEgY2xhc3NpYyBkZWFkbG9jayBzY2VuYXJpby5cblxuV2hhdCByZXF1ZXN0cyBtaWdodCBiZSB3YWl0aW5nIG9uIGBsaW1pdHNfbG9ja2A/IEl0J3MgbGlrZWx5IHNvbWV0aGluZyBpbiBzeXNmcywgb3IgcG90ZW50aWFsbHkgYSBjb25jdXJyZW50IGNhbGwgdG8gc29tZXRoaW5nIGxpa2UgYGxvb3Bfc2V0X2Rpb2AgdGhhdCdzIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBhbmQgdGhlbiBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBxdWV1ZSB0byBmcmVlemUuIEFuZCBjb25zaWRlcmluZyB0aGF0IGBibGtfbXFfZnJlZXplX3F1ZXVlYCBjYW4gdGFrZSBzb21lIHRpbWUsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHNpZ25pZmljYW50LiBSZW1lbWJlciBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBkb2VzIHRoZSBmb2xsb3dpbmc6XG5cbmBgYGNcbmludCBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZV9mcm96ZW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG5cdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxue1xuXHRpbnQgcmV0O1xuXG5cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcblx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgbGltKTtcblx0YmxrX21xX3VuZnJlZXplX3F1ZXVlKHEsIG1lbWZsYWdzKTtcblx0cmV0dXJuIHJldDtcbn1cbmBgYFxuXG5FZmZlY3RpdmVseSwgdGhpcyBmdW5jdGlvbiBmcmVlemVzIHRoZSBxdWV1ZSAqd2hpbGUqIGhvbGRpbmcgYGxpbWl0c19sb2NrYCBiZWNhdXNlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBpcyBjYWxsZWQgZmlyc3QuIFRoZXJlZm9yZSwgdGhlIHJlb3JkZXJpbmcgbWFrZXMgc2Vuc2UuIEl0IGVuc3VyZXMgY29uc2lzdGVuY3kgd2l0aCBob3cgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlX2Zyb3plbmAgb3BlcmF0ZXMgYW5kIGF2b2lkcyBsb2NrIGludmVyc2lvbiBiZXR3ZWVuIHRoZSBgbGltaXRzX2xvY2tgIGFuZCB0aGUgYHFfdXNhZ2VfY291bnRlcmAgKHRoZSBmcmVlemUgbG9jaykuXG5cblRoZSBwcm9ibGVtLCBzcGVjaWZpY2FsbHksIGlzIGEgY2FsbCB0byBgbG9vcF9zZXRfZGlvYCB0aGF0IGRvZXMgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbmBgYFxuXG5UaGlzIHNlcXVlbmNlIGFjcXVpcmVzIHRoZSBmcmVlemUgbG9jayBhbmQgdGhlbiBgbGltaXRzX2xvY2tgLiBIb3dldmVyLCBgcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGVfZnJvemVuYCBpbnZlcnRzIHRoaXMgb3JkZXIsIGFjcXVpcmluZyBgbGltaXRzX2xvY2tgIGZpcnN0ICh0aHJvdWdoIGBzdGFydF91cGRhdGVgKSwgYW5kIHRoZW4gdGhlIGZyZWV6ZSBsb2NrLiBCb29tLiBBQi1CQSBkZWFkbG9jayBwb3RlbnRpYWwuXG5cblNvLCB0aGUgcGF0Y2ggaXMgZml4aW5nIGEgbG9jayBpbnZlcnNpb24gZGVhZGxvY2suIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb25jcmV0ZSBmaXggZm9yIGEgcG90ZW50aWFsbHkgc2VyaW91cyBwcm9ibGVtLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2AgZnVuY3Rpb24sIGdpdmVuIHRoYXQgaXQncyBpbiB0aGUgbG9vcCBkcml2ZXIuIEFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY4NCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjMwLjg2NzIyNTYxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0MDc1MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTE9PUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjMwLjk1OTYzOTYxNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc1OTM2MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEb3VibGUtQ2hlY2tpbmcgdGhlIExvb3BiYWNrIERJTyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVwLCBjb25maXJtZWQuIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgYEJMS19ERVZfTE9PUGAgY29uZmlndXJhdGlvbiBoZXJlLiBUaGF0J3MgdGhlIGNvcmUgb2YgdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGUgYGxvb3Bfc2V0X2Rpb2Agc3ltYm9sIOKAkyB0aGF0J3Mgd2hlcmUgdGhlIGNyaXRpY2FsIERpcmVjdCBJL08gZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBzZXQsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy5cblxuQnV0LCB5b3Uga25vdyBob3cgaXQgZ29lcy4uLiBHb3R0YSBiZSB0aG9yb3VnaC4gRXZlbiB0aG91Z2ggSSB0aGluayBJJ3ZlIGdvdCB0aGUgbWFpbiBwb2ludCBsb2NrZWQgZG93biwgSSBuZWVkIHRvIHRha2UgYSBxdWljayBzd2VlcCBvZiB0aGlzIHBhdGNoIHRvIGVuc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNuZWFreSBzaWRlIGVmZmVjdHMgb3IgcmVsYXRlZCBjaGFuZ2VzIGx1cmtpbmcgaW4gb3RoZXIgZmlsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYmVmb3JlIEkgbWFrZSBhbnkganVkZ2VtZW50cy4gR290dGEgZG90IHRoZSBJJ3MgYW5kIGNyb3NzIHRoZSBUJ3MuIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eS4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGZvciB0aGlzIGNoYW5nZS4gQSBxdWljaywgZm9jdXNlZCBzY2FuIGlzIGluIG9yZGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjM1LjMzNTU3OTA2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTY4MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcF9zZXRfZGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTE0MjQ9c3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTQzNi1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNDM3OnN0YXRpYyBpbnQgbG9vcF9zZXRfZGlvKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHVuc2lnbmVkIGxvbmcgYXJnKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0Mzgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MTUxNT1zdGF0aWMgaW50IGxvX3NpbXBsZV9pb2N0bChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyNy1cXHRjYXNlIExPT1BfU0VUX0RJUkVDVF9JTzpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxNTI4OlxcdFxcdGVyciA9IGxvb3Bfc2V0X2RpbyhsbywgYXJnKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNTI5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTozNS4zODc2NDM5NzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNjkzMDE4MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbG9vcF9zZXRfZGlvYCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIHNvbGVseSBmb2N1c2VkIG9uIGBsb29wX3NldF9kaW9gLiAgTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUsIGFuZCBpdCdzIHF1aXRlIGxvY2FsaXplZC4gSXQgdXBkYXRlcyBgdXNlX2Rpb2AgYW5kIHRoYXQgaXMgaXQuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLCBzbyBsaWtlbHkgYSBidWcgZml4IG9yIGFuIG9wdGltaXphdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgYSBwb3RlbnRpYWwgbG9jayBpbnZlcnNpb24gZGVhZGxvY2suIFRoZSBkaWZmIGNsZWFybHkgc2hvd3MgdGhlIHJlb3JkZXJpbmcgb2YgY2FsbHMgcmVsYXRlZCB0byBxdWV1ZSBsaW1pdCB1cGRhdGVzIGFuZCBxdWV1ZSBmcmVlemluZy4gIEJlZm9yZSwgaXQgYXBwZWFycyB0aGUgY29kZSB3YXMgZnJlZXppbmcgdGhlIHF1ZXVlICpiZWZvcmUqIGluaXRpYWxpemluZyB0aGUgdXBkYXRlLCB3aGljaCBpcyBpbmNvcnJlY3QuIFRoaXMgbWVhbnMgdGhlIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkIGFmdGVyIHRoZSBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgY2FsbC4gSXQgbm93IGNvcnJlY3RseSBzdGFydHMgdGhlIHVwZGF0ZSAqYmVmb3JlKiBmcmVlemluZy5cblxuVGhpcyByZW9yZGVyaW5nIGlzIGNydWNpYWwuIEl04oCZcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgdGhlIGxvb3AgZGV2aWNlIGhhbmRsZXMgRGlyZWN0IEkvTyAoRElPKSwgd2hpY2ggSSBrbm93IGludm9sdmVzIGludGVyYWN0aW5nIHdpdGggdGhlIGJhY2tpbmcgZmlsZSdzIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gVGhlIGNvZGUgY2hlY2tzIGZvciByZWFkL3dyaXRlIGl0ZXJhdG9ycyBvbiB0aGUgYmFja2luZyBmaWxlLiBGdXJ0aGVybW9yZSwgdGhlIGB2ZnNfZnN5bmNgIGlzIGFsc28gYW4gaW5kaWNhdGlvbi4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsLCB3aGljaCByZWluZm9yY2VzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgdHdlYWtlZC5cblxuR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgbG9jay1yZWxhdGVkIGlzc3VlcywgYW5kIHRoZSBmYWN0IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIEkvTyBhbmQgcXVldWUgbWFuYWdlbWVudCwgSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIGNvbmN1cnJlbmN5IHByb2JsZW1zLiAgVGhpcyBpcyBkZWZpbml0ZWx5IGFuIGFyZWEgdGhhdCBuZWVkcyBzb21lIHNlcmlvdXMgZnV6emluZy4gQSBsb2NrIGludmVyc2lvbiBpbiB0aGlzIGNvbnRleHQgY291bGQgZWFzaWx5IGxlYWQgdG8gYSBzeXN0ZW0gaGFuZyBvciBldmVuIGRhdGEgY29ycnVwdGlvbiwgc28gdGhpcyBpcyBpbXBvcnRhbnQgYW5kIHdvcnRoIHRlc3RpbmcgdGhvcm91Z2hseS4gSSdsbCBtYWtlIHN1cmUgdG8gc2V0IGFwcHJvcHJpYXRlIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1ODksIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjQ1Ljc1Njk1MDQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAzMjA4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9MT09QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibG9vcF9zZXRfZGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2NrIGludmVyc2lvbiBkZWFkbG9jayBiZXR3ZWVuIGBxLVxcdTAwM2VsaW1pdHNfbG9ja2AgYW5kIHRoZSBxdWV1ZSBmcmVlemUgbG9jayAoYHFfdXNhZ2VfY291bnRlcmApIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciBieSByZW9yZGVyaW5nIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKClgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZSgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBjb2RlICh2aWEgdGhlIGBMT09QX1NFVF9ESVJFQ1RfSU9gIGlvY3RsKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX3NldF9kaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvY2sgaW52ZXJzaW9uIGRlYWRsb2NrIGJldHdlZW4gYHEtXFx1MDAzZWxpbWl0c19sb2NrYCBhbmQgdGhlIHF1ZXVlIGZyZWV6ZSBsb2NrIChgcV91c2FnZV9jb3VudGVyYCkgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIGJ5IHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUoKWAgYW5kIGBibGtfbXFfZnJlZXplX3F1ZXVlKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGNvZGUgKHZpYSB0aGUgYExPT1BfU0VUX0RJUkVDVF9JT2AgaW9jdGwpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTo0NS44Nzc5OTM2NzdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDIwNzQ4NzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NDUuODc4Njc1MTQ3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwNDIwMDYxMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzk1MWUyYjFiMzhiZTRlZjZiZDkwNmZlYTUwYjlmMzFjMGM4ZjFhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDE4OjMwOjQzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuaW5kZXggODYzOWZhMzRiODQ3MC4uNmYxMjk3NjAzNWIwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuQEAgLTE0NTIsMTIgKzE0NTIsMTIgQEAgc3RhdGljIGludCBsb29wX3NldF9kaW8oc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRcdHZmc19mc3luYyhsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xuIFx0fVxuIFxuK1x0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuIFx0aWYgKHVzZV9kaW8pXG4gXHRcdGxvLVx1MDAzZWxvX2ZsYWdzIHw9IExPX0ZMQUdTX0RJUkVDVF9JTztcbiBcdGVsc2VcbiBcdFx0bG8tXHUwMDNlbG9fZmxhZ3MgXHUwMDI2PSB+TE9fRkxBR1NfRElSRUNUX0lPO1xuLVx0bGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4gXHRsb29wX3NldF9kbWFfbGltaXQobG8sIFx1MDAyNmxpbSk7XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NDUuODc4Njc2MTY3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzYwMTQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9ibG9jay9sb29wLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBsb29wX3NldF9kaW9gIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHJlb3JkZXJpbmcgb2Ygc29tZSBvcGVyYXRpb25zLiBUaGUgY2hhbmdlIG1vdmVzIGBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtgIGFoZWFkIG9mIGBtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBwb3RlbnRpYWwgZml4IGZvciBhIGRlYWRsb2NrLCBhIGxvY2tpbmcgcHJvYmxlbSwgb3IgcGVyaGFwcyBzaW1wbHkgYW4gb3B0aW1pemF0aW9uIGluIHRoZSBxdWV1ZSBsaW1pdHMgdXBkYXRlIGFuZCBmcmVlemUgc2VxdWVuY2UuXG5cbkxldCdzIGRyaWxsIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGlzIGRvaW5nLiBPa2F5LCBpdCdzIHJldHVybmluZyBhIGBzdHJ1Y3QgcXVldWVfbGltaXRzYC4gQWgsIHJpZ2h0LCBpdCB0YWtlcyBhIGBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcWAgYXMgaW5wdXQgYW5kIHJldHVybnMgYSBgc3RydWN0IHF1ZXVlX2xpbWl0c2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIGhlcmUgZ2l2ZW4gYGxpbWAgaXMgYSBsb2NhbCB2YXJpYWJsZS4gTm8sIGl0J3MganVzdCByZW9yZGVyaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgc28gaXQgc2hvdWxkIGJlIGZpbmUuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGxvb3Bfc2V0X2Rpb2AgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDE4OjMxOjUxLjMxNDY5NTAwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3OTQ3ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3Bfc2V0X2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuYz0xNDI0PXN0YXRpYyBpbnQgbG9vcF9zZXRfY2FwYWNpdHkoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE0MzYtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTQzNzpzdGF0aWMgaW50IGxvb3Bfc2V0X2RpbyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xNDM4LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE1MTU9c3RhdGljIGludCBsb19zaW1wbGVfaW9jdGwoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE1MjctXFx0Y2FzZSBMT09QX1NFVF9ESVJFQ1RfSU86XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTUyODpcXHRcXHRlcnIgPSBsb29wX3NldF9kaW8obG8sIGFyZyk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTUyOS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTg6MzE6NTEuNTgyNjQ3NzY3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MTYwNTkyNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHRhaWxvcmVkIGZvciBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQW5hbHlzaXMgb2YgUGF0Y2ggT3JkZXJpbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCB0d2Vha2luZyB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB3aXRoaW4gdGhlIGJsb2NrIEkvTyBsYXllci4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlb3JkZXJpbmcgYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBsaWtlbHkgYSBzdWJ0bGUgZGVhZGxvY2sgc2NlbmFyaW8gb3Igc29tZSBzb3J0IG9mIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZSB0aGF0J3MgYmVlbiBleHBvc2VkLlwiIEknbSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgbG9ja2luZyBoaWVyYXJjaGllcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IGludm9sdmUgcXVldWUgbGltaXRzIGFuZCBmcmVlemluZyBtZWNoYW5pc21zLiBUaGlzIGlzIGxpa2VseSBhIHZlcnkgc3BlY2lmaWMgYW5kIGRlbGljYXRlIGZpeCB0byBhdm9pZCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgZHJpdmVyIG1pZ2h0IGxvY2sgdGhlIHF1ZXVlIGluIHRoZSB3cm9uZyBvcmRlciBvciBhdCB0aGUgd3JvbmcgdGltZS5cblxuVGhlIGdvb2QgbmV3cyBpcywgZnJvbSB3aGF0IEknbSByZWFkaW5nLCBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhhdCdzIGEgaHVnZSByZWxpZWYgYmVjYXVzZSB0aG9zZSBraW5kcyBvZiBidWdzIGFyZSB0aGUgd29yc3QgdG8gdHJhY2sgZG93bi4gSSBjYW4gZm9jdXMgcHVyZWx5IG9uIHRoZSBmdW5jdGlvbmFsIGFzcGVjdHMgb2YgdGhlIHJlb3JkZXJpbmcuIEFuZCB0aGUgZmFjdCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiB0byBjb25maXJtIHRoYXQgaXMgYWxzbyBncmVhdCwgc2luY2UgdGhhdCBzaW1wbGlmaWVzIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBpc3N1ZSBpcyBub3QgcmVsYXRlZCB0byBtZW1vcnkgc2FmZXR5LCB3aGljaCBtZWFucyB0aGUgcm9vdCBjYXVzZSBpcyBsaWtlbHkgc29tZSBpbmNvcnJlY3Qgb3JkZXJpbmcgb2YgdGhlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwNSwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxODozMTo1Ni4yOTg3MTA5MzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gYHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGVgIGFuZCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgaW4gYGxvb3Bfc2V0X2Rpb2AgdG8gZml4IGEgcG90ZW50aWFsIGRlYWRsb2NrIG9yIGxvY2tpbmcgaXNzdWUuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvY2tpbmcgaXNzdWVzIChkZWFkbG9ja3MpLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IExPQ0tERVAsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbHkgcmVvcmRlcnMgdGhlIGNhbGxzIHRvIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCBhbmQgYGJsa19tcV9mcmVlemVfcXVldWVgIGluIGBsb29wX3NldF9kaW9gIHRvIGZpeCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBsb2NraW5nIGlzc3VlLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2NraW5nIGlzc3VlcyAoZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNhdWdodCBieSBMT0NLREVQLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[1] Phase: Succeeded StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 18:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 18:32:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2] Phase: Succeeded StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 18:32:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 18:32:21 +0000 UTC FinishedAt: 2026-08-13 18:32:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfv5cj/series-workflowfv5cj-convert-artifact-1001176173/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 18:32:31 +0000 UTC FinishedAt: 2026-08-13 18:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 18:32:31 +0000 UTC FinishedAt: 2026-08-13 18:54:03 +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:*caf4dc9d-9e55-49f3-a619-ef7945b718e9,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-workflowfv5cj/series-workflowfv5cj-convert-artifact-1001176173/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": "7aeb5b7f-1775-4b22-bb72-2767986dd97c", "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-workflowfv5cj/series-workflowfv5cj-build-action-2989565539/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 18:32:31 +0000 UTC FinishedAt: 2026-08-13 18:53:41 +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:*caf4dc9d-9e55-49f3-a619-ef7945b718e9,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-workflowfv5cj/series-workflowfv5cj-convert-artifact-1001176173/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": "7aeb5b7f-1775-4b22-bb72-2767986dd97c", "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-workflowfv5cj/series-workflowfv5cj-build-action-2989565539/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 18:54:03 +0000 UTC FinishedAt: 2026-08-13 18:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 18:54:03 +0000 UTC FinishedAt: 2026-08-13 18:54:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 18:54:03 +0000 UTC FinishedAt: 2026-08-13 18:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 18:54:03 +0000 UTC FinishedAt: 2026-08-13 18:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfv5cj/series-workflowfv5cj-convert-artifact-3501280968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 18:54:13 +0000 UTC FinishedAt: 2026-08-13 18:56:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 18:54:13 +0000 UTC FinishedAt: 2026-08-13 18:56:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7aeb5b7f-1775-4b22-bb72-2767986dd97c,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-workflowfv5cj/series-workflowfv5cj-build-action-2989565539/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-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 18:56:19 +0000 UTC FinishedAt: 2026-08-13 18:56:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 18:56:19 +0000 UTC FinishedAt: 2026-08-13 18:56:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 18:56:19 +0000 UTC FinishedAt: 2026-08-13 19:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 18:56:19 +0000 UTC FinishedAt: 2026-08-13 19:17:09 +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:*caf4dc9d-9e55-49f3-a619-ef7945b718e9,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-workflowfv5cj/series-workflowfv5cj-convert-artifact-3501280968/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": "0693e439-3cba-4174-b82a-3ddc85d3c382", "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-workflowfv5cj/series-workflowfv5cj-build-action-1419412340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 18:56:19 +0000 UTC FinishedAt: 2026-08-13 19:16: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:*caf4dc9d-9e55-49f3-a619-ef7945b718e9,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-workflowfv5cj/series-workflowfv5cj-convert-artifact-3501280968/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": "0693e439-3cba-4174-b82a-3ddc85d3c382", "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-workflowfv5cj/series-workflowfv5cj-build-action-1419412340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 19:17:09 +0000 UTC FinishedAt: 2026-08-13 19:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 19:17:09 +0000 UTC FinishedAt: 2026-08-13 19:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 19:17:09 +0000 UTC FinishedAt: 2026-08-13 19:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 19:17:09 +0000 UTC FinishedAt: 2026-08-13 19:19:02 +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:*0693e439-3cba-4174-b82a-3ddc85d3c382,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-workflowfv5cj/series-workflowfv5cj-build-action-1419412340/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-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"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:*7aeb5b7f-1775-4b22-bb72-2767986dd97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0693e439-3cba-4174-b82a-3ddc85d3c382,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-workflowfv5cj/series-workflowfv5cj-build-action-2989565539/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-workflowfv5cj/series-workflowfv5cj-build-action-1419412340/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 19:19:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 19:19:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"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-workflowfv5cj/series-workflowfv5cj-convert-artifact-2552175745/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 19:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 19:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 19:19:13 +0000 UTC FinishedAt: 2026-08-13 19:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 19:19:23 +0000 UTC FinishedAt: 2026-08-13 22:24:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv5cj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_set_dio"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a275b5bfc9ee29b7eeef4ee6a635ac5461290df4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"537d3548-fb29-44a0-b057-3df3b9840a46","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 19:19:23 +0000 UTC FinishedAt: 2026-08-13 22:24:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7aeb5b7f-1775-4b22-bb72-2767986dd97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0693e439-3cba-4174-b82a-3ddc85d3c382,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-workflowfv5cj/series-workflowfv5cj-build-action-2989565539/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-workflowfv5cj/series-workflowfv5cj-build-action-1419412340/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-workflowfv5cj/series-workflowfv5cj-convert-artifact-2552175745/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,}