Name: series-workflownts4b Phase: Succeeded StartedAt: 2026-06-24 10:05:00 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[0] Phase: Succeeded StartedAt: 2026-06-24 10:05:00 +0000 UTC FinishedAt: 2026-06-24 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 10:05:00 +0000 UTC FinishedAt: 2026-06-24 10:17:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE" ], "series_id": "56ff04e4-fb27-4eb5-8861-59d00f6f2250" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_vma_mapped_walk", "try_to_migrate_one", "migrate_vma_setup", "dmirror_devmem_fault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOGZhMTNkYzlhNThkYjBmZTI2YTBmZTdjMWY0YWUwYjNlMjdlMWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTA6MTQ6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMjcwLDIxICYjNDM7MjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuJiM0MztcdFx0XHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XG4gXG4gXHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIFx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdFx0fVxuIFxuLVx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbi1cdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4tXHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnB2bXctXHUwMDNlcG1kKTtcbiBcbi1cdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbiYjNDM7XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiYjNDM7XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxuJiM0MztcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiYjNDM7XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4mIzQzO1x0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4mIzQzO1x0XHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKCFtYXBfcHRlKHB2bXcsIFx1MDAyNnBtZGUsIFx1MDAyNnB0bCkpIHtcbiBcdFx0XHRpZiAoIXB2bXctXHUwMDNlcHRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4ZmExM2RjOWE1OGRiMGZlMjZhMGZlN2MxZjRhZTBiM2UyN2UxZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NAotLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwpAQCAtMjcwLDIxICYjNDM7MjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKIAkJCXB2bXctJmd0O3B0bCA9IE5VTEw7CiAJCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7Ci0JCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiYjNDM7CQkJc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpOwogCiAJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiAJCQkJcHZtdy0mZ3Q7cHRsID0gcG1kX2xvY2sobW0sIHB2bXctJmd0O3BtZCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9CiAKLQkJCWlmICgocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19TWU5DKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctJmd0O2FkZHJlc3MsCi0JCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKLQkJCSAgICAocHZtdy0mZ3Q7bnJfcGFnZXMgJmd0Oz0gSFBBR0VfUE1EX05SKSkKLQkJCQlzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcHZtdy0mZ3Q7cG1kKTsKIAotCQkJc3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTsKLQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiYjNDM7CQkJCQlpZiAocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT04pCiYjNDM7CQkJCQkJcmV0dXJuIG5vdF9mb3VuZChwdm13KTsKJiM0MzsJCQkJCWlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKQomIzQzOwkJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CiYjNDM7CQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJfQomIzQzOwkJCQkvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovCiYjNDM7CQkJCXNwaW5fdW5sb2NrKHB2bXctJmd0O3B0bCk7CiYjNDM7CQkJCXB2bXctJmd0O3B0bCA9IE5VTEw7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJaWYgKChwdm13LSZndDtmbGFncyAmYW1wOyBQVk1XX1NZTkMpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LSZndDthZGRyZXNzLAomIzQzOwkJCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIChwdm13LSZndDtucl9wYWdlcyAmZ3Q7PSBIUEFHRV9QTURfTlIpKQomIzQzOwkJCQkJc3luY193aXRoX2ZvbGlvX3BtZF96YXAobW0sIHB2bXctJmd0O3BtZCk7CiYjNDM7CiYjNDM7CQkJCXN0ZXBfZm9yd2FyZChwdm13LCBQTURfU0laRSk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCQlpZiAoIW1hcF9wdGUocHZtdywgJmFtcDtwbWRlLCAmYW1wO3B0bCkpIHsKIAkJCWlmICghcHZtdy0mZ3Q7cHRlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUE1EIEhhbmRsaW5nIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZWx2ZSBpbnRvIHRoZSBncml0dHkgZGV0YWlscyBvZiBob3cgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgYXJlIG1hbmFnZWQuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggdGhlc2UgZW50cmllcy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2suIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG5vdyBjb25zaWRlcmluZyBgcHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT05gIGluIGNvbmp1bmN0aW9uIHdpdGggYGNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KWAuIFRoaXMgaGFzIHRvIGJlIGluIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlJiMzOTtyZSBjb3ZlcmluZyBvdXIgYmFzZXMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGFkZGl0aW9uYWwgY29tcGxleGl0eSByZWxhdGVkIHRvIGhhbmRsaW5nIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyeSBtaWdodCBoYXZlIGJlZW4gc3BsaXQgdW5kZXJuZWF0aCB0aGUgZXhpc3Rpbmcgb3BlcmF0aW9ucy4gVGhpcyBzdWdnZXN0cyB3ZSBtYXkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhY2NvdW50IGZvciB0aGlzIHNjZW5hcmlvIHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZXMuCgpJIHRoaW5rIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2Agc291cmNlIGNvZGUgZGlyZWN0bHkgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNjE6XHRcdFx0XHR9XG4gMjYyOlx0XHRcdFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcbiAyNjM6XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyNjQ6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjU6XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxuIDI2NjpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI2NzpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjY4Olx0XHRcdFx0fVxuIDI2OTpcdFx0XHRcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjcwOlx0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuIDI3MTpcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyNzI6XHRcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiAyNzM6XHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XG4gMjc0Olx0XG4gMjc1Olx0XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIDI3NjpcdFx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuIDI3NzpcdFxuIDI3ODpcdFx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcHZtdy1cdTAwM2VwbWQpO1xuIDI3OTpcdFxuIDI4MDpcdFx0XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIDI4MTpcdFx0XHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4gMjgyOlx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyODM6XHRcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjg0Olx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyODU6XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjg2Olx0XHRcdFx0XHR9XG4gMjg3Olx0XHRcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjg4Olx0XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjg5Olx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjkwOlx0XHRcdFx0fSBlbHNlIHtcbiAyOTE6XHRcdFx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbiAyOTI6XHRcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI5MzpcdFx0XHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdFx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4gMjk1Olx0XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjk2Olx0XG4gMjk3Olx0XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuIDI5ODpcdFx0XHRcdFx0Y29udGludWU7XG4gMjk5Olx0XHRcdFx0fVxuIDMwMDpcdFx0XHR9XG4gMzAxOlx0XHRcdGlmICghbWFwX3B0ZShwdm13LCBcdTAwMjZwbWRlLCBcdTAwMjZwdGwpKSB7XG4gMzAyOlx0XHRcdFx0aWYgKCFwdm13LVx1MDAzZXB0ZSlcbiAzMDM6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiAzMDQ6XHRcdFx0XHRnb3RvIG5leHRfcHRlO1xuIDMwNTpcdFx0XHR9XG4gMzA2Olx0dGhpc19wdGU6XG4gMzA3Olx0XHRcdGlmIChjaGVja19wdGUocHZtdywgMSkpXG4gMzA4Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMzA5Olx0bmV4dF9wdGU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGV2aWNlLVByaXZhdGUgTWVtb3J5IGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGFuZCBkb2luZyBpdHMgam9iLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW55IGRldmljZS1wcml2YXRlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aXRoaW4gaXRzIHNjb3BlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZmxhZ3MgdGhhdCBtaWdodCBiZSB0aWVkIHRvIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHRvIGluZGljYXRlIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgc2VhcmNoIHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4NC1cdFx0XHRcdHByZXNlbnQgPSB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTIzNj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ4LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjQ5OiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjUwLSAqIHdyaXRhYmxlIGVudHJ5P1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1NS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYxLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjYyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2My0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY2LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjY3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDEtXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzQyOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0My1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTg0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTg1LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NjpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4Ny19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjE4Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE5LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuLS1cbm1tL2htbS5jPTIzNT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2htbS5jLTI2Ni1cdFx0ICovXG5tbS9obW0uYzoyNjc6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9obW0uYy0yNjgtXHRcdCAgICBwYWdlX3BnbWFwKHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpKS1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTI3MC1cdFx0XHRjcHVfZmxhZ3MgPSBITU1fUEZOX1ZBTElEO1xubW0vaG1tLmM6MjcxOlx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9obW0uYy0yNzItXHRcdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0yODQtXG5tbS9obW0uYzoyODU6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9obW0uYy0yODYtXHRcdFx0Z290byBmYXVsdDtcbi0tXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2htbS5jLTM0NS1cbm1tL2htbS5jOjM0NjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9obW0uYy0zNDctXHQgICAgc29mdGxlYWZfdG9fZm9saW8oZW50cnkpLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyID09XG4tLVxubW0vaG1tLmMtMzUzLVxubW0vaG1tLmM6MzU0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMzU1LVx0XHRcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xuLS1cbm1tL2htbS5jLTM3Mi1cdGlmIChyZXF1aXJlZF9mYXVsdCkge1xubW0vaG1tLmM6MzczOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMzc0LVx0XHRcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cdFx0c2V0X3BtZF9hdChzcmNfbW0sIGFkZHIsIHNyY19wbWQsIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODI5LVx0XHQvKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU1NT1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTc1LVx0XHRcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XG5tbS9odWdlX21lbW9yeS5jOjI1NzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNTc3LVx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMjMtXG5tbS9odWdlX21lbW9yeS5jOjMxMjQ6XHRcdHdyaXRlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYy0zMTI1LVx0XHRhbm9uX2V4Y2x1c2l2ZSA9IFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Nj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg5NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg5NjpcdFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShvbGRfZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYy00ODk3LVx0XHRzb2Z0ZGlydHkgPSBwbWRfc3dwX3NvZnRfZGlydHkocG1kdmFsKTtcbi0tXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05OTAtXHRcdH1cbm1tL21lbW9yeS5jOjk5MTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy05OTItXHRcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDE1LVx0XHQgKi9cbm1tL21lbW9yeS5jOjEwMTY6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDE3LVx0XHQgICAgaXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTc0NC1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vbWVtb3J5LmM6MTc0NTpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jLTE3NDYtXHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi0tXG5tbS9tZW1vcnkuYz00NzQ3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3NzMtXHRcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbm1tL21lbW9yeS5jOjQ3NzQ6XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00Nzc1LVx0XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzAtXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcyLVx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzg6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTE3OS1cdFx0XHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTUtXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyOTY6XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTI5Ny1cdFx0XHRcdGdvdG8gbmV4dDtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNi1cdFx0XHRcdFx0TUlHUkFURV9QRk5fTUlHUkFURTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzI3Olx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMyOC1cdFx0XHRcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzNS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyMzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vbXByb3RlY3QuYy0yMzctXHRcdC8qXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI0LVx0XHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjU6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI2LVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4MD1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzQtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzU6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc2LVx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3OS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI4MDpcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI4MS1cdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMC1cbm1tL3JtYXAuYzoyNjAxOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDItXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBBaCwgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBkaXNzZWN0IGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBhcmd1bWVudHMsIHRoZSByZXR1cm4gdHlwZSwgYW5kLCBjcnVjaWFsbHksIHRoZSBsb2dpYyB3aXRoaW4uIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyBpdCB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSAmIzM0O3NvZnRsZWFmJiMzNDsgaXMgcHJpdmF0ZSB0byBhIHBhcnRpY3VsYXIgZGV2aWNlLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGludGVyZXN0aW5nLiBXaGF0IGV4YWN0bHkgY29uc3RpdHV0ZXMgYSAmIzM0O3NvZnRsZWFmJiMzNDs/IEFuZCB3aGF0IGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoaXMgJiMzNDtkZXZpY2UgcHJpdmFjeSYjMzQ7PyBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIHdlIGNhbiBnbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRcbiAyNjE6XHQvKipcbiAyNjI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjYzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI2NDpcdCAqXG4gMjY1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjY2Olx0ICovXG4gMjY3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjY4Olx0e1xuIDI2OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI3MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyNzE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyNzI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjczOlx0XHRkZWZhdWx0OlxuIDI3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjc1Olx0XHR9XG4gMjc2Olx0fVxuIDI3NzpcdFxuIDI3ODpcdC8qKlxuIDI3OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3NAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIEtleXdvcmQgSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgcG90ZW50aWFsbHkgYSBtb3JlIGdlbmVyaWMgYERFVklDRV9QUklWQVRFYCBjb25maWd1cmF0aW9uIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgdGhvc2Ugc3BlY2lmaWMgc3RyaW5ncyBkaXJlY3RseSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgdXN1YWxseSBlZmZlY3RpdmUgZmlyc3Qgc3RlcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgZGVmaW5pdGlvbnMgb3IgcmVmZXJlbmNlcyB0byByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBsZWFkIHRvIGEgY29uZGl0aW9uYWwgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbCEgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHB1cnBvc2UgYW5kIHNjb3BlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFzIEkgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4MC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4MTogICAgcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4Mi0gICAgcGFnZW1hcC5yYW5nZS5zdGFydCA9IHJlcy1cdTAwM2VzdGFydDtcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxMC0gICBgYE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU1gYCB3aWxsIG9ubHkgbWlncmF0ZSBzeXN0ZW0gbWVtb3J5IGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxMTogICBgYE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURWBgIHdpbGwgb25seSBtaWdyYXRlIHBhZ2VzIHJlc2lkaW5nIGluXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzEyLSAgIGRldmljZSBwcml2YXRlIG1lbW9yeS4gSWYgdGhlIGxhdHRlciBmbGFnIGlzIHNldCwgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzMS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzI6ICAgIHBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMzLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTg6ICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEVgYCDlsIblj6rov4Hnp7vpqbvnlZnlnKjorr7lpIfnp4HmnInlhoXlrZjkuK3nmoTpobVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU5LSAgIOmdouOAguWmguaenOWQjuiAheiiq+iuvue9ru+8jCBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXooqvnlKjmnaXor4bliKvpqbHliqjmiYDmi6XmnInnmoTorr7lpIdcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01NDE9Y29uZmlnIFBQQ19VVlxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0My1cdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTQ0Olx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTQ1LVx0ZGVmYXVsdCBuXG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9Njg9Q09ORklHX1pPTkVfREVWSUNFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjY5OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy03MC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzMS1cdG1pZy5wZ21hcF9vd25lciA9IFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTMyOlx0bWlnLmZsYWdzID0gTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzMtXHRtaWcuZmF1bHRfcGFnZSA9IGZhdWx0X3BhZ2U7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4Mi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE4MzpcdGt2bXBwY191dm1lbV9wZ21hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTg0LVx0a3ZtcHBjX3V2bWVtX3BnbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jPTY4Mz1zdGF0aWMgYm9vbCBpc19hbGxvd2VkX3JhbmdlKHU2NCBiYXNlX2FkZHIsIHU2NCBzaXplKVxuLS1cbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jLTY5Ny1cdFx0SU9SRVNfREVTQ19QRVJTSVNURU5UX01FTU9SWV9MRUdBQ1ksXG5kcml2ZXJzL2FjcGkvYXBlaS9laW5qLWNvcmUuYzo2OTg6XHRcdC8qIFRyZWF0IElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZIGFzIE1NSU8uICovXG5kcml2ZXJzL2FjcGkvYXBlaS9laW5qLWNvcmUuYy02OTktXHRcdElPUkVTX0RFU0NfUkVTRVJWRUQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oPTEwND1zdHJ1Y3QgYW1kZ3B1X2tmZF9kZXYge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaC0xMTMtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmg6MTE0Olx0LyogSE1NIHBhZ2UgbWlncmF0aW9uIE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBtYXBwaW5nXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgtMTE1LVx0ICogTXVzdCBiZSBsYXN0IC0tZW5kcyBpbiBhIGZsZXhpYmxlLWFycmF5IG1lbWJlci5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTE1PWNvbmZpZyBIU0FfQU1EX1NWTVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIEhNTS1iYXNlZCBzaGFyZWQgdmlydHVhbCBtZW1vcnkgbWFuYWdlclwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gSFNBX0FNRCBcdTAwMjZcdTAwMjYgREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMTgtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzE1LVx0ZWxzZVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MTY6XHRcdG1pZ3JhdGUuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjU9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNTYtXHRcdHBnbWFwLVx1MDAzZXJhbmdlLmVuZCA9IHJlcy1cdTAwM2VlbmQ7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNTc6XHRcdHBnbWFwLVx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNTgtXHR9XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIEhNTSBkZXZpY2UgbWVtb3J5XFxuXCYjMzQ7KTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA3MDpcdFx0aWYgKHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDcxLVx0XHRcdGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGFkZXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlc3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE3PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXHRcdC5mbGFnc1x0XHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gfCBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUzMDpcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFIHwgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5ELFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTMxLVx0fTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVx0XHQucGdtYXBfb3duZXJcdD0gcGFnZV9wZ21hcChwYWdlKS1cdTAwM2Vvd25lcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XHRcdC5mbGFnc1x0XHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIyLVx0XHRcdFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnPTk0PWNvbmZpZyBEUk1fTk9VVkVBVV9TVk1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXHRib29sIFwmIzM0OyhFWFBFUklNRU5UQUwpIEVuYWJsZSBTVk0gKFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSkgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTctXHRkZXBlbmRzIG9uIERSTV9OT1VWRUFVXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0xOTUtXHRcdC5mYXVsdF9wYWdlXHQ9IHZtZi1cdTAwM2VwYWdlLFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MTk2Olx0XHQuZmxhZ3NcdFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUgfFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMTk3LVx0XHRcdFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMjAtXHRjaHVuay1cdTAwM2Vkcm0gPSBkcm07XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMjE6XHRjaHVuay1cdTAwM2VwYWdlbWFwLnR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMjItXHRjaHVuay1cdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXHRkZWZhdWx0IHlcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg1Olx0c2VsZWN0IERFVklDRV9QUklWQVRFXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04Ni1cdHNlbGVjdCBEUk1fR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3Njk9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwNC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODA1Olx0cGFnZW1hcC1cdTAwM2V0eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDYtXHRwYWdlbWFwLVx1MDAzZXJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC02LVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjc6I2lmbmRlZiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfX1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjg6I2RlZmluZSBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfX1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oLTktXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oPTI4PVNUT1JBR0VfQ0xBU1NfR1BfREVWSUNFX0MgaHJ0X2RhdGEgZ3BfZGV2aWNlX3JlZ19sb2FkKFxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC0zNy1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaDozODojZW5kaWYgLyogX19HUF9ERVZJQ0VfUFJJVkFURV9IX0lOQ0xVREVEX18gKi9cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L3RpbWVkX2N0cmxfcHJpdmF0ZS5oPTE2PVNUT1JBR0VfQ0xBU1NfVElNRURfQ1RSTF9DIHZvaWQgdGltZWRfY3RybF9yZWdfc3RvcmUoXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaC0yNS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvdGltZWRfY3RybF9wcml2YXRlLmg6MjY6I2VuZGlmIC8qIF9fR1BfREVWSUNFX1BSSVZBVEVfSF9JTkNMVURFRF9fICovXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xND1zdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyO1xuLS1cbmluY2x1ZGUvbGludXgvaG1tLmgtMjEtICogICAgICAgICAgICAgICAgIGxlYXN0IHJlYWRhYmxlLiBJZiBkZXZfcHJpdmF0ZV9vd25lciBpcyAhTlVMTCB0aGVuIHRoaXMgY291bGRcbmluY2x1ZGUvbGludXgvaG1tLmg6MjI6ICogICAgICAgICAgICAgICAgIHBvaW50IGF0IGEgREVWSUNFX1BSSVZBVEUgcGFnZS5cbmluY2x1ZGUvbGludXgvaG1tLmgtMjMtICogSE1NX1BGTl9XUklURSAtIGlmIHRoZSBwYWdlIG1lbW9yeSBjYW4gYmUgd3JpdHRlbiB0byAocmVxdWlyZXMgSE1NX1BGTl9WQUxJRClcbi0tXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oPTEzNj1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTE0Mi1cdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZXHQ9IDUsXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oOjE0MzpcdElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZXHQ9IDYsXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTE0NC1cdElPUkVTX0RFU0NfUkVTRVJWRURcdFx0XHQ9IDcsXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTk9ZW51bSBzb2Z0bGVhZl90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNy1cdC8qIERldmljZSB0eXBlcy4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4Olx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRCxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5Olx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUsXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMC1cdFNPRlRMRUFGX0RFVklDRV9FWENMVVNJVkUsXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTYyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTYzOlx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjQtXHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2NTpcdFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjYtXHRjYXNlIFNXUF9ERVZJQ0VfRVhDTFVTSVZFOlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTg6XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjktXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzA6XHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcxOlx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjcyLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjE9c3RydWN0IHZtZW1fYWx0bWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMzMtICpcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDozNDogKiBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMzUtICogRGV2aWNlIG1lbW9yeSB0aGF0IGlzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSBieSB0aGUgQ1BVOiBDUFUgY2FuIG5laXRoZXJcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Njg9ZW51bSBtZW1vcnlfdHlwZSB7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtNjktXHQvKiAwIGlzIHJlc2VydmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgdHlwZSBmaWVsZHMgKi9cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo3MDpcdE1FTU9SWV9ERVZJQ0VfUFJJVkFURSA9IDEsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtNzEtXHRNRU1PUllfREVWSUNFX0NPSEVSRU5ULFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNjY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE2OS1cdFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE3MDpcdFx0Zm9saW8tXHUwMDNlcGdtYXAtXHUwMDNldHlwZSA9PSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTcxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3NC17XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTc1Olx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzYtXHRcdGZvbGlvX2lzX2RldmljZV9wcml2YXRlKHBhZ2VfZm9saW8ocGFnZSkpO1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1MT1lbnVtIG1pZ3JhdGVfdm1hX2RpcmVjdGlvbiB7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTItXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNID0gMSBcdTAwM2NcdTAwM2MgMCxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE1MzpcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA9IDEgXHUwMDNjXHUwMDNjIDEsXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTQtXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UID0gMSBcdTAwM2NcdTAwM2MgMixcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNzctXHQgKiBmb3IgbWlncmF0aW5nIG91dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIFRoZSBmbGFncyBhbHNvIG5lZWQgdG9cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE3ODpcdCAqIGJlIHNldCB0byBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUuXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNzktXHQgKiBUaGUgY2FsbGVyIHNob3VsZCBhbHdheXMgc2V0IHRoaXMgZmllbGQgd2hlbiB1c2luZyBtbXUgbm90aWZpZXJcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0zND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTc1LSAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NzY6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzctI2RlZmluZSBTV1BfREVWSUNFX05VTSAzXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dwX3RvX3JhZGl4X2VudHJ5KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTEzNC1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjEzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzYtc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE0Nj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNTE6I2Vsc2UgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTItc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE2Mj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNjYtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNjc6I2VuZGlmIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY4LVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTEzMTU9c3RhdGljIGludCBfX3JlcXVlc3RfcmVnaW9uX2xvY2tlZChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTM0MC1cdFx0aWYgKHBhcmVudCA9PSBcdTAwMjZpb21lbV9yZXNvdXJjZSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9yZXNvdXJjZS5jOjEzNDE6XHRcdCAgICBjb25mbGljdC1cdTAwM2VkZXNjID09IElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZKSB7XG5rZXJuZWwvcmVzb3VyY2UuYy0xMzQyLVx0XHRcdHByX3dhcm4oXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgJXMgJXBSIGNvbmZsaWN0cyB3aXRoICVwUlxcblwmIzM0Oyxcbi0tXG5rZXJuZWwvcmVzb3VyY2UuYz0yMTA3PXN0cnVjdCByZXNvdXJjZSAqZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMjExMy1cdFx0XHRcdCAgIGRldl9uYW1lKGRldiksXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTE0Olx0XHRcdFx0ICAgSU9SRVNfREVTQ19ERVZJQ0VfUFJJVkFURV9NRU1PUlksIGZsYWdzKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTIxMTUtfVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTIxMTg9c3RydWN0IHJlc291cmNlICpyZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKmJhc2UsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMjEyMy1cdHJldHVybiBnZXRfZnJlZV9tZW1fcmVnaW9uKE5VTEwsIGJhc2UsIHNpemUsIEdGUl9ERUZBVUxUX0FMSUdOLCBuYW1lLFxua2VybmVsL3Jlc291cmNlLmM6MjEyNDpcdFx0XHRcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XG5rZXJuZWwvcmVzb3VyY2UuYy0yMTI1LX1cbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzM5PWNvbmZpZyBURVNUX0hNTVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNDEtXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzQyOlx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxubGliL0tjb25maWcuZGVidWctMzM0My1cdHNlbGVjdCBITU1fTUlSUk9SXG4tLVxubGliL3Rlc3RfaG1tLmM9MTQyPXN0YXRpYyBib29sIGRtaXJyb3JfaXNfcHJpdmF0ZV96b25lKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNDQtXHRyZXR1cm4gKG1kZXZpY2UtXHUwMDNlem9uZV9kZXZpY2VfdHlwZSA9PVxubGliL3Rlc3RfaG1tLmM6MTQ1Olx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEUpO1xubGliL3Rlc3RfaG1tLmMtMTQ2LX1cbi0tXG5saWIvdGVzdF9obW0uYz0xNDk9ZG1pcnJvcl9zZWxlY3RfZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE1MS1cdHJldHVybiAoZG1pcnJvci1cdTAwM2VtZGV2aWNlLVx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cbmxpYi90ZXN0X2htbS5jOjE1MjpcdFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKSA/XG5saWIvdGVzdF9obW0uYzoxNTM6XHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA6XG5saWIvdGVzdF9obW0uYy0xNTQtXHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfQ09IRVJFTlQ7XG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNTczLVx0c3dpdGNoIChtZGV2aWNlLVx1MDAzZXpvbmVfZGV2aWNlX3R5cGUpIHtcbmxpYi90ZXN0X2htbS5jOjU3NDpcdGNhc2UgSE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFOlxubGliL3Rlc3RfaG1tLmMtNTc1LVx0XHRyZXMgPSByZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihcdTAwMjZpb21lbV9yZXNvdXJjZSwgREVWTUVNX0NIVU5LX1NJWkUsXG4tLVxubGliL3Rlc3RfaG1tLmMtNTgwLVx0XHRkZXZtZW0tXHUwMDNlcGFnZW1hcC5yYW5nZS5lbmQgPSByZXMtXHUwMDNlZW5kO1xubGliL3Rlc3RfaG1tLmM6NTgxOlx0XHRkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xubGliL3Rlc3RfaG1tLmMtNTgyLVx0XHRicmVhaztcbi0tXG5saWIvdGVzdF9obW0uYy02ODAtXHRtdXRleF91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2VkZXZtZW1fbG9jayk7XG5saWIvdGVzdF9obW0uYzo2ODE6XHRpZiAocmVzIFx1MDAyNlx1MDAyNiBkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSlcbmxpYi90ZXN0X2htbS5jLTY4Mi1cdFx0cmVsZWFzZV9tZW1fcmVnaW9uKGRldm1lbS1cdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0LFxuLS1cbmxpYi90ZXN0X2htbS5jPTE0ODE9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTQ5Ny1cdFx0XHRtZW11bm1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCk7XG5saWIvdGVzdF9obW0uYzoxNDk4Olx0XHRcdGlmIChkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSlcbmxpYi90ZXN0X2htbS5jLTE0OTktXHRcdFx0XHRyZWxlYXNlX21lbV9yZWdpb24oZGV2bWVtLVx1MDAzZXBhZ2VtYXAucmFuZ2Uuc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTgzMy1cdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcyYjNDM7JiM0MztdLnpvbmVfZGV2aWNlX3R5cGUgPVxubGliL3Rlc3RfaG1tLmM6MTgzNDpcdFx0XHRcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbmxpYi90ZXN0X2htbS5jLTE4MzUtXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbmxpYi90ZXN0X2htbS5jOjE4MzY6XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XG5saWIvdGVzdF9obW0uYy0xODM3LVx0aWYgKHNwbV9hZGRyX2RldjAgXHUwMDI2XHUwMDI2IHNwbV9hZGRyX2RldjEpIHtcbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xubGliL3Rlc3RfaG1tX3VhcGkuaC03NS1cdC8qIDAgaXMgcmVzZXJ2ZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCB0eXBlIGZpZWxkcyAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDo3NjpcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURSA9IDEsXG5saWIvdGVzdF9obW1fdWFwaS5oLTc3LVx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVCxcbi0tXG5tbS9LY29uZmlnPTExODM9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMTk0LVx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbm1tL0tjb25maWc6MTE5NTpcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxubW0vS2NvbmZpZy0xMTk2LVxuLS1cbm1tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjEzLVxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjE1LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MDY9c3RhdGljIGludCBtZl9nZW5lcmljX2tpbGxfcHJvY3ModW5zaWduZWQgbG9uZyBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTczMC1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzMxOlx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MzItXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tLVxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxuLS1cbm1tL21lbXJlbWFwLmMtOTctXHRcdFx0XHQgICBQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSk7XG5tbS9tZW1yZW1hcC5jOjk4Olx0aWYgKHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKSB7XG5tbS9tZW1yZW1hcC5jLTk5LVx0XHRfX3JlbW92ZV9wYWdlcyhQSFlTX1BGTihyYW5nZS1cdTAwM2VzdGFydCksXG4tLVxubW0vbWVtcmVtYXAuYz0xMTI9dm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbm1tL21lbXJlbWFwLmMtMTE2LVx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNnBnbWFwLVx1MDAzZXJlZik7XG5tbS9tZW1yZW1hcC5jOjExNzpcdGlmIChwZ21hcC1cdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcdTAwMjZcdTAwMjZcbm1tL21lbXJlbWFwLmMtMTE4LVx0ICAgIHBnbWFwLVx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTE0Ni17XG5tbS9tZW1yZW1hcC5jOjE0NzpcdGNvbnN0IGJvb2wgaXNfcHJpdmF0ZSA9IHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xubW0vbWVtcmVtYXAuYy0xNDgtXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXHUwMDI2cGdtYXAtXHUwMDNlcmFuZ2VzW3JhbmdlX2lkXTtcbi0tXG5tbS9tZW1yZW1hcC5jLTI0NC1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBwZ21hcCk7XG5tbS9tZW1yZW1hcC5jOjI0NTpcdGlmIChwZ21hcC1cdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcdTAwMjZcdTAwMjZcbm1tL21lbXJlbWFwLmMtMjQ2LVx0ICAgIHBnbWFwLVx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcbi0tXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmMtMjgyLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG5tbS9tZW1yZW1hcC5jOjI4MzpcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxubW0vbWVtcmVtYXAuYzoyODQ6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpKSB7XG5tbS9tZW1yZW1hcC5jLTI4NS1cdFx0XHRXQVJOKDEsIFwmIzM0O0RldmljZSBwcml2YXRlIG1lbW9yeSBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS9tZW1yZW1hcC5jPTQxNj12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1yZW1hcC5jLTQ1MS1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xubW0vbWVtcmVtYXAuYzo0NTI6XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21lbXJlbWFwLmMtNDUzLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcyOlx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzMtXHRcdFx0KGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cdFx0XHRpZiAoIShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNlxubW0vbWlncmF0ZV9kZXZpY2UuYzozMDI6XHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTMwMy1cdFx0XHQgICAgcGdtYXAtXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cdTAwM2VwZ21hcF9vd25lcilcbi0tXG5tbS9tbV9pbml0LmM9MTAwND1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbW1faW5pdC5jLTEwMzgtXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxubW0vbW1faW5pdC5jOjEwMzk6XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21tX2luaXQuYy0xMDQwLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLS1cbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI3NzYtXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG5tbS9ybWFwLmMtMjc3OC0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo1OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIERldmljZS1Qcml2YXRlIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWcgb3B0aW9uIGhlcmUsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSB0byBlbmFibGluZyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGVzdGluZyB0aGlzLCBhbmQgaWYgSSB3YW50IHRvIGhhdmUgYSBjb250cm9sbGVkIHRlc3RpbmcgZW52aXJvbm1lbnQsIEkgcmVhbGl6ZSB0aGF0IGBDT05GSUdfVEVTVF9ITU1gIHdvdWxkIGJlIGluY3JlZGlibHkgdXNlZnVsLiBTcGVjaWZpY2FsbHksIHRoaXMgc2hvdWxkIHByb3ZpZGUgYSBkdW1teSBkZXZpY2UgdGhhdCBJIGNhbiB1c2UgdG8gcmVsaWFibHkgdGVzdCB0aGUgZGV2aWNlLXByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUgdG8gY29uZmlybSBob3cgYFRFU1RfSE1NYCBpcyBkZWZpbmVkIGFuZCB1c2VkLCB0byBiZSBjZXJ0YWluIGl0IGFsaWducyB3aXRoIG15IHRlc3QgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMzgtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM0MC1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBgcGFnZV92bWFfbWFwcGVkX3dhbGtgKioKCk9rYXksIHNvIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIGEgdHJpc3RhdGUsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgcGF0Y2ggdGFyZ2V0cyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGluIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIHdoaWNoIGlzIGEgY3JpdGljYWwgZnVuY3Rpb247IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB1c2VkIHRvIHRyYXZlcnNlIHRoZSBwYWdlIHRhYmxlcyBmb3IgYSBnaXZlbiBwYWdlL2ZvbGlvIGFuZCBWTUEuIFRoaXMgaXMgY29yZSBzdHVmZi4KClRoZSBjb3JlIG9mIHRoaXMgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBzcGVjaWZpY2FsbHksIHRoZSBjYXNlIHdoZXJlIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGlzIHRydWUsIGJ1dCBgIXBtZF9wcmVzZW50KHBtZGUpYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgY2hlY2tpbmcgZm9yIGBQVk1XX01JR1JBVElPTmAgaW4gYHB2bXctJmd0O2ZsYWdzYCBhbmQgdGhlbiBjYWxsaW5nIGBjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdylgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZC4gRGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBzeW1ib2wuCgpXYWl0IGEgc2Vjb25kLi4uIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSAqaG90LXBhdGgqIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHVzZWQgY29uc3RhbnRseS4gR2l2ZW4gaXQmIzM5O3MgYSBob3QgcGF0aCwgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2Ugc3RhbmRwb2ludC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY291bGQgdHJpZ2dlciB0aGlzIGV4YWN0IHBhdGgsIG1heWJlIHRoaXMgZml4IHdpbGwgaW1wcm92ZSBvdGhlciBmdW5jdGlvbnMgYW5kIG5vdCBqdXN0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuCgpEZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIHRoaXMgcGFydGljdWxhciBjb25kaXRpb24gb2Z0ZW4gcmVsYXRlIHRvIEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgb3IgbWlncmF0aW9uIHNjZW5hcmlvcy4gTGV0IG1lIHRyYWNlIGJhY2sgdGhlIGNhbGxzIHRvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgd2hlcmUgdGhpcyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3ZtYV9tYXBwZWRfd2FsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODY1LVx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc2LSNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzgtXHRcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg4Ny17XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODk2OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQgLSBSZXN0YXJ0IHRoZSBwYWdlIHRhYmxlIHdhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MTk6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMxNz1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzIyOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cdFx0c3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMS1cdCphY2Nlc3NlZCA9IGZhbHNlO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI2LVx0XHRpZiAoKmFjY2Vzc2VkKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjI3Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY1LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XG4tLVxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTEyNTctICovXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xuLS1cbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMTI5Ni1cbm1tL2tzbS5jOjEyOTc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0va3NtLmMtMTI5OC1cdFx0Z290byBvdXRfbW47XG4tLVxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxubW0va3NtLmM6MTM1OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9rc20uYy0xMzYwLW91dF9tbjpcbi0tXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vbWlncmF0ZS5jLTI5Ny1cbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vbWlncmF0ZS5jLTI5OS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNTEtXG5tbS9taWdyYXRlLmM6MzUyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9taWdyYXRlLmMtMzUzLVx0XHRybWFwX3Qgcm1hcF9mbGFncyA9IFJNQVBfTk9ORTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cdFx0XHQucHRsID0gcHRsLFxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy01OC1cbm1tL3BhZ2VfaWRsZS5jOjU5Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9wYWdlX2lkbGUuYy02MC1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA6c3RhdGljIGlubGluZSBib29sIG5vdF9mb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3LVx0XHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cdTAwM2VwdGVcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjg4OiAqIEBwdm13OiBwYWdlX3ZtYV9tYXBwZWRfd2FsayBzdHJ1Y3QsIGluY2x1ZGVzIGEgcGFpciBwdGUgYW5kIHBmbiByYW5nZVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTEtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5KlxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDgte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzOS0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQxLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDgtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDk6c3RhdGljIHZvaWQgc3RlcF9mb3J3YXJkKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBzaXplKVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUwLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTYtLyoqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTc6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsgLSBjaGVjayBpZiBAcHZtdy1cdTAwM2VwZm4gaXMgbWFwcGVkIGluIEBwdm13LVx1MDAzZXZtYSBhdFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU4LSAqIEBwdm13LVx1MDAzZWFkZHJlc3Ncbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1OTogKiBAcHZtdzogcG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuIHBhZ2UsIHZtYSwgYWRkcmVzcyBhbmQgZmxhZ3Ncbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2MC0gKiBtdXN0IGJlIHNldC4gcG1kLCBwdGUgYW5kIHB0bCBtdXN0IGJlIE5VTEwuXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY2LSAqIElmIEBwdm13LVx1MDAzZXBtZCBpcyBzZXQgYnV0IEBwdm13LVx1MDAzZXB0ZSBpcyBub3QsIHlvdSBoYXZlIGZvdW5kIFBNRC1tYXBwZWQgcGFnZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY3OiAqICh1c3VhbGx5IFRIUCkuIEZvciBQVEUtbWFwcGVkIFRIUCwgeW91IHNob3VsZCBydW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBpblxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY4LSAqIGEgbG9vcCB0byBmaW5kIGFsbCBQVEVzIHRoYXQgbWFwIHRoZSBUSFAuXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTc2LSAqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzc6ICogSWYgeW91IG5lZWQgdG8gc3RvcCB0aGUgd2FsayBiZWZvcmUgcGFnZV92bWFfbWFwcGVkX3dhbGsoKSByZXR1cm5lZCBmYWxzZSxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3ODogKiB1c2UgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgpLiBJdCB3aWxsIGRvIHRoZSBob3VzZWtlZXBpbmcuXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzktICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODA6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xODEte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTM1OD11bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2MjpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMzYzLVx0XHQucGZuID0gcGFnZV90b19wZm4ocGFnZSksXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzcxLVx0XHRnb3RvIG91dDtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM3MjpcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzMtXHRcdHJldHVybiAtRUZBVUxUO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6Mzc0Olx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3NS1vdXQ6XG4tLVxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05MjQtXG5tbS9ybWFwLmM6OTI1Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtOTI2LVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL3JtYXAuYy05NDgtXHRcdFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xubW0vcm1hcC5jOjk0OTpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTk1MC1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuLS1cbm1tL3JtYXAuYy05NjMtXHRcdFx0cHJhLVx1MDAzZXJlZmVyZW5jZWQgPSAtMTtcbm1tL3JtYXAuYzo5NjQ6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy05NjUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3JtYXAuYy0xMDAyLVx0XHRpZiAocHRlcyA9PSBwdm13Lm5yX3BhZ2VzKSB7XG5tbS9ybWFwLmM6MTAwMzpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTEwMDQtXHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jPTEwNjQ9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi0tXG5tbS9ybWFwLmMtMTEwMi1cbm1tL3JtYXAuYzoxMTAzOnN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcm1hcC5jLTExMDQte1xuLS1cbm1tL3JtYXAuYy0xMTE3LVxubW0vcm1hcC5jOjExMTg6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsocHZtdykpIHtcbm1tL3JtYXAuYy0xMTE5LVx0XHRpbnQgcmV0ID0gMDtcbi0tXG5tbS9ybWFwLmM9MTIzMT1zdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMTIzNC1cdHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICopYXJnO1xubW0vcm1hcC5jOjEyMzU6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3JtYXAuYy0xMjM2LVx0XHQucGZuXHRcdD0gc3RhdGUtXHUwMDNlcGZuLFxuLS1cbm1tL3JtYXAuYz0xMzEwPWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbi0tXG5tbS9ybWFwLmMtMTMxMi17XG5tbS9ybWFwLmM6MTMxMzpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcm1hcC5jLTEzMTQtXHRcdC5wZm5cdFx0PSBwZm4sXG4tLVxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmM6MTk0NTpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9ybWFwLmMtMTk0Ni1cdFx0XHRlbnVtIHR0dV9mbGFncyBmbGFncywgcHRlX3QgcHRlKVxuLS1cbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIwMzEtXG5tbS9ybWFwLmM6MjAzMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTIwMzMtXHRcdG5yX3BhZ2VzID0gMTtcbi0tXG5tbS9ybWFwLmMtMjA4OS1cdFx0XHRcdGZsYWdzIFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcbm1tL3JtYXAuYzoyMDkwOlx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yMDkxLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vcm1hcC5jLTIzNjMtd2Fsa19kb25lOlxubW0vcm1hcC5jOjIzNjQ6XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjM2NS1cdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yNDYwLVxubW0vcm1hcC5jOjI0NjE6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy0yNDYyLVx0XHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cbi0tXG5tbS9ybWFwLmMtMjQ3Ni1cdFx0XHRcdGZsYWdzIFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcbm1tL3JtYXAuYzoyNDc3Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNDc4LVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vcm1hcC5jLTI0OTMtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNDk0Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNDk1LVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI1NDktXHRcdFx0XHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkge1xubW0vcm1hcC5jOjI1NTA6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjU1MS1cdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4tLVxubW0vcm1hcC5jLTI1NjMtXHRcdFx0XHRcdCAqL1xubW0vcm1hcC5jOjI1NjQ6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjU2NS1cdFx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NTAtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjUxOlx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjUyLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NjEtXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2NjI6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY2My1cdFx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NjgtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjY5Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjcwLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NDEzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxODAtICovXG5tbS92bXNjYW4uYzo0MTgxOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQxODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjMwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmb3IgRGV2aWNlLVByaXZhdGUgTWVtb3J5KioKCk9rYXksIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgdXNlZCBieSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgcGF0aHMuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGFuZCBhIGZldyBvdGhlcnMgbGlrZSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGFuZCBgcGFnZV92bWFfbWtjbGVhbl9vbmVgLiBHaXZlbiB0aGUgZW1waGFzaXMgb24gZGV2aWNlLXByaXZhdGUgbWVtb3J5IGFuZCBtaWdyYXRpb24gaW4gdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgZGlyZWN0IGxpbmtzLgoKSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSDigJMgY291bGQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIG9yIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgYmUgcmVsZXZhbnQ/IFRoZXkgZG9uJiMzOTt0ICpkaXJlY3RseSogY2FsbCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBvciBzbyBJIGluaXRpYWxseSB0aG91Z2h0LiBIYW5nIG9uIGEgbW9tZW50Li4uIEkgc2VlIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgICpkb2VzKiBhY3R1YWxseSB1c2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgb25lLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBmaW5kIHdoZXJlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpcyBkZWZpbmVkIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1c2FnZSBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0fSBlbHNlIHtcbiAxODE6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDE4NjpcdFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XG4gMTg3Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMTg4Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTg5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAxOTM6XHRcdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gMTk0Olx0XHRcdChJU19BTElHTkVEKHN0YXJ0LCBIUEFHRV9QTURfU0laRSkgXHUwMDI2XHUwMDI2XG4gMTk1Olx0XHRcdCBJU19BTElHTkVEKGVuZCwgSFBBR0VfUE1EX1NJWkUpKSkge1xuIDE5NjpcdFxuIDE5NzpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbiAxOTg6XHRcdFx0XHQucHRsID0gcHRsLFxuIDE5OTpcdFx0XHRcdC5hZGRyZXNzID0gc3RhcnQsXG4gMjAwOlx0XHRcdFx0LnBtZCA9IHBtZHAsXG4gMjAxOlx0XHRcdFx0LnZtYSA9IHdhbGstXHUwMDNldm1hLFxuIDIwMjpcdFx0XHR9O1xuIDIwMzpcdFxuIDIwNDpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gbWlncmF0ZV9wZm4ocGZuKSB8IHdyaXRlXG4gMjA3Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXG4gMjA4Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9DT01QT1VORDtcbiAyMDk6XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXMmIzQzOyYjNDM7XSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzIGEgZmVsbG93IGV4cGVydDoKCioqUmVmaW5pbmcgTXkgVW5kZXJzdGFuZGluZyBvZiBIdWdlIFBNRCBNaWdyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgYWJvdXQgdG8ganVtcCB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCB3YXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gd2Fsa2luZyB0aGUgcGFnZSBtYXBwaW5ncyB1c2luZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBCdXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQsIGlzIGl0PyBMb29raW5nIGNsb3Nlci4uLiBpdCBhY3R1YWxseSBkb2VzbiYjMzk7dCAqY2FsbCogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYuIEluc3RlYWQsIGl0IHNlZW1zIGxpa2UgdGhlIGZ1bmN0aW9uIGlzIHByaW1hcmlseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwdm13YCBhbmQgdGhlbiBwYXNzaW5nIGl0IGFsb25nIHRvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAsIHJpZ2h0PyBTbyBpdCYjMzk7cyBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgZm9yIHRoZSBwYWdlIHdhbGsgdGhhdCAqd2lsbCogaGFwcGVuLiBUaGUga2V5IGlzIGluIHRoYXQgYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCBjYWxsLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyB0cmF2ZXJzYWwgbG9naWMgaXMgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgbGV2ZXJhZ2VkLCB1c2luZyB0aGUgYHB2bXdgIHN0cnVjdHVyZSB0aGF0IHdhcyBzZXQgdXAuIEludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGNyaXRpY2FsIGRpc3RpbmN0aW9uIHRvIGtlZXAgaW4gbWluZCBmb3IgdHJhY2luZyB0aGlzIGNvZGUmIzM5O3MgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgYHB2bXdgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdFx0bWlncmF0ZS1cdTAwM2VjcGFnZXMmIzQzOyYjNDM7O1xuIDIxMTpcdFx0XHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBmb2xpb19wYWdlKGZvbGlvLCAwKSk7XG4gMjEyOlx0XHRcdGlmIChyZXQpIHtcbiAyMTM6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZW5wYWdlcy0tO1xuIDIxNDpcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzLS07XG4gMjE1Olx0XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gMDtcbiAyMTY6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWRzdFttaWdyYXRlLVx1MDAzZW5wYWdlc10gPSAwO1xuIDIxNzpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcdFx0bWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0ICYjNDM7IFBBR0VfU0laRSwgZW5kLCB3YWxrKTtcbiAyMjA6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAyMjE6XHRcdFx0cmV0dXJuIDA7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0ZmFsbGJhY2s6XG4gMjI1Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDIyNjpcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiAyMjc6XHRcdFx0Z290byBkb25lO1xuIDIyODpcdFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xuIDIyOTpcdFx0aWYgKGZhdWx0X2ZvbGlvICE9IGZvbGlvKVxuIDIzMDpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDIzMTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAyMzI6XHRcdGlmIChyZXQpXG4gMjMzOlx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMjM0Olx0XHRpZiAocG1kX25vbmUocG1kcF9nZXRfbG9ja2xlc3MocG1kcCkpKVxuIDIzNTpcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcbiAyMzY6XHRcbiAyMzc6XHRkb25lOlxuIDIzODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMjM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBEZXZpY2UtUHJpdmF0ZSBQTUQgRW50cmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW1wYWN0LiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSAqY2FsbGluZyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgbGlzdCBpczogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2Vfdm1hX21rY2xlYW5fb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGFuZCBgd3JpdGVfcHJvdGVjdF9wYWdlYCByZWxhdGVkIHRvIEtTTS4KClRoZSBwYXRjaCBtZW50aW9ucyBkZWFsaW5nIHdpdGggZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMuIERldmljZS1wcml2YXRlIG1lbW9yeSBpcyAqdHlwaWNhbGx5KiBhc3NvY2lhdGVkIHdpdGggbWlncmF0aW9ucy4gU28sIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAgc3RhbmQgb3V0IGFzIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZS4KCkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYWxzbyBoYW5kbGVzIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBhbHRob3VnaCBpdCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgICp3aXRoaW4qIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24uCgpOb3csIHdoZW4gd291bGQgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBhY3R1YWxseSBlbmNvdW50ZXIgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnk/IFRoZSBhbnN3ZXIgaXMgd2hlbiB0aGUgUE1EICppdHNlbGYqIGlzIGEgZGV2aWNlLXByaXZhdGUgZW50cnkuIFRoaXMgc2l0dWF0aW9uIGFyaXNlcyB3aGVuIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGlzIG1pZ3JhdGVkIHRvIGRldmljZS1wcml2YXRlIG1lbW9yeS4KClNvLCBob3cgZG9lcyB0aGlzIGhhcHBlbj8gYHRyeV90b19taWdyYXRlX29uZWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJIGNhbiBzZWUgdGhlc2UgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGludmVzdGlnYXRlLgoKQWx0aG91Z2ggYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUgd29ya2hvcnNlIGZ1bmN0aW9uLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhIGhvdCBwYXRoIGZ1bmN0aW9uPyBObywgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uLiBJcyBgdHJ5X3RvX3VubWFwX29uZWA/IEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltIGFuZCB1bm1hcHBpbmcsIHNvIGl0IGlzIGEgaG90IHBhdGggYnV0IG5vdCBhcyBob3QgYXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYW5kIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYXMgdGhleSBtYXkgYmUgZW50cnkgcG9pbnRzIGZvciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gbG9vayBhdCB0aGUgc2V0dXAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAxLSAgIFRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBwYXNzIGEgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA3LSAgIFRoZSBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIGZpZWxkcyBhbmQgcGFzc2VzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA5LSAgIGZpbHRlciB3aGljaCBzb3VyY2UgcGFnZXMgc2hvdWxkIGJlIG1pZ3JhdGVkLiBGb3IgZXhhbXBsZSwgc2V0dGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE4OiAgIE9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgbWlncmF0ZV92bWFfc2V0dXAoKSBkb2VzIGlzIHRvIGludmFsaWRhdGUgb3RoZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJiMzOTtzIE1NVXMgd2l0aCB0aGUgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgoKWBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjU6ICAgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cdTAwM2Vkc3RgYCBhcnJheS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MDogICDorr7lpIfpqbHliqjnqIvluo/lv4XpobvlsIYgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCDkvKDpgJLnu5ltaWdyYXRlX3ZtYV9zZXR1cCgp77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTM6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1NjogICBtaWdyYXRlX3ZtYV9zZXR1cCgp44CCYGBhcmdzLVx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2NC0gICDlkowgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWBgIOiwg+eUqOadpemBjeWOhuiuvuWkh+WRqOWbtOeahOmhteihqO+8jOS9v1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjY4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnnmoQgYGBhcmdzLVx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3Ny0gICDov5jmuIXpmaTkuoYgYGBhcmdzLVx1MDAzZWRzdGBgIOaVsOe7hOOAglxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Mzk6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3NjE6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03NjItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MzkzPXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMwLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0MzE6XHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMi1cdGlmIChyKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTI9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczMy1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzM0Olx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzUtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM1ODM6ICogMS4gbWlncmF0ZV92bWFfc2V0dXAgaW52YWxpZGF0ZSBwYWdlcywgTU1VIG5vdGlmaWVyIGNhbGxiYWNrIHN2bV9yYW5nZV9ldmljdFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE3PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODU6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4Ni1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTExMz1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2Ni1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNjc6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjgtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTE4Mz1zdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncykgXHUwMDNjIDApXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9ODIyPW5vdXZlYXVfZG1lbV9taWdyYXRlX3ZtYShzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4NzI6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1OD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTY1Olx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjYtXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTkyLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTkzOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY1LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjctICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzI5OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTczMC17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3Njk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc2LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4NC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4Ni0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDU1PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGRldmljZS1wcml2YXRlIG1lbW9yeSwgYW5kIGl0IHNlZW1zIGxpa2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMgYW5kIGV2ZW4gYHRlc3RfaG1tYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBkZWx2ZSBpbnRvLiBUaGUgY29yZSBvZiB0aGlzIGlzIG1pZ3JhdGlvbjsgZmluZGluZyBhIGdvb2QgZW50cnkgcG9pbnQuCgpJIGFsc28gc2VlIHRoYXQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpbiBgbGliL3Rlc3RfaG1tLmNgIGNvdWxkIGJlIGFub3RoZXIgY3JpdGljYWwgcGllY2UsIHNpbmNlIGl0IHNlZW1zIHRvIHRyaWdnZXIgbWlncmF0aW9uIHRvIFJBTSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBIbW0sIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMgYSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBsaWIvdGVzdF9obW0uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2Vsb2NrKTtcbjE2NTE6XHR9XG4xNjUyOlx0XG4xNjUzOlx0c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4xNjU0Olx0e1xuMTY1NTpcdFx0c3RydWN0IG1pZ3JhdGVfdm1hIGFyZ3MgPSB7IDAgfTtcbjE2NTY6XHRcdHN0cnVjdCBwYWdlICpycGFnZTtcbjE2NTc6XHRcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuMTY1ODpcdFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuMTY1OTpcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBucjtcbjE2NjA6XHRcbjE2NjE6XHRcdC8qXG4xNjYyOlx0XHQgKiBOb3JtYWxseSwgYSBkZXZpY2Ugd291bGQgdXNlIHRoZSBwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgdG8gcG9pbnQgdG9cbjE2NjM6XHRcdCAqIHRoZSBtaXJyb3IgYnV0IGhlcmUgd2UgdXNlIGl0IHRvIGhvbGQgdGhlIHBhZ2UgZm9yIHRoZSBzaW11bGF0ZWRcbjE2NjQ6XHRcdCAqIGRldmljZSBtZW1vcnkgYW5kIHRoYXQgcGFnZSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgbWlycm9yLlxuMTY2NTpcdFx0ICovXG4xNjY2Olx0XHRycGFnZSA9IGZvbGlvX3pvbmVfZGV2aWNlX2RhdGEocGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSkpO1xuMTY2NzpcdFx0ZG1pcnJvciA9IHJwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGE7XG4xNjY4Olx0XG4xNjY5Olx0XHQvKiBGSVhNRSBkZW1vbnN0cmF0ZSBob3cgd2UgY2FuIGFkanVzdCBtaWdyYXRlIHJhbmdlICovXG4xNjcwOlx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpKTtcbjE2NzE6XHRcdG5yID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4xNjcyOlx0XG4xNjczOlx0XHQvKlxuMTY3NDpcdFx0ICogV2hlbiBmb2xpb3MgYXJlIHBhcnRpYWxseSBtYXBwZWQsIHdlIGNhbiYjMzk7dCByZWx5IG9uIHRoZSBmb2xpb1xuMTY3NTpcdFx0ICogb3JkZXIgb2Ygdm1mLVx1MDAzZXBhZ2UgYXMgdGhlIGZvbGlvIG1pZ2h0IG5vdCBiZSBmdWxseSBzcGxpdCB5ZXRcbjE2NzY6XHRcdCAqL1xuMTY3NzpcdFx0aWYgKHZtZi1cdTAwM2VwdGUpIHtcbjE2Nzg6XHRcdFx0b3JkZXIgPSAwO1xuMTY3OTpcdFx0XHRuciA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIE1lbW9yeSBGYXVsdCBIYW5kbGVyKioKCk9rYXksIHNvIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAg4oCTIHllcCwgdGhhdCBjb25maXJtcyBpdCwgdGhpcyBpcyBhIGZhdWx0IGhhbmRsZXIgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gTm93LCBJIHNlZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIG1ha2VzIG1lIHRoaW5rIHdlJiMzOTtyZSB3b3JraW5nIGF0IGEgZmFpcmx5IGxvdyBsZXZlbC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgc2NlbmFyaW8g4oCTIGEgc3BsaXQgZGV2aWNlLXByaXZhdGUgUE1ELiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYW5kLCBuYXR1cmFsbHksIGRldmljZS1wcml2YXRlIG1lbW9yeSBhcyBrZXkgYXNwZWN0cyBoZXJlLiBHaXZlbiB0aGUgY29udGV4dCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgbXVzdCBiZSBhIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gY29uc2lkZXIuIFRpbWUgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBzZWUgd2hhdCBmdXJ0aGVyIGNsdWVzIHRoaXMgaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfdm1hX21hcHBlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjcxOlx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuIDI3MjpcdFx0XHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI3MzpcdFx0XHRcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyNzQ6XHRcbiAyNzU6XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjc2Olx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjc3Olx0XG4gMjc4Olx0XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVx1MDAzZXBtZCk7XG4gMjc5Olx0XG4gMjgwOlx0XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjgxOlx0XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyODI6XHRcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4MzpcdFx0XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbiAyODQ6XHRcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4NTpcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODY6XHRcdFx0XHRcdH1cbiAyODc6XHRcdFx0XHRcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiAyODg6XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyODk6XHRcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyOTA6XHRcdFx0XHR9IGVsc2Uge1xuIDI5MTpcdFx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI5MjpcdFx0XHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gMjkzOlx0XHRcdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuIDI5NDpcdFx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTU6XHRcdFx0XHRcdFx0c3luY193aXRoX2ZvbGlvX3BtZF96YXAobW0sIHB2bXctXHUwMDNlcG1kKTtcbiAyOTY6XHRcbiAyOTc6XHRcdFx0XHRcdHN0ZXBfZm9yd2FyZChwdm13LCBQTURfU0laRSk7XG4gMjk4Olx0XHRcdFx0XHRjb250aW51ZTtcbiAyOTk6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaGFuZGxpbmcgYSBzcGVjaWZpYyBlZGdlIGNhc2U6IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIHdoZW4gdGhlIHBhZ2UgbWFwIGVudHJ5IGlzbiYjMzk7dCBwcmVzZW50LCB3aGljaCBtZWFucyBgIXBtZF9wcmVzZW50KHBtZGUpYC4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IHdoZXRoZXIgdGhlIGRldmljZS1wcml2YXRlIFBNRCB3YXMgc3BsaXQgYmVuZWF0aCB1cy4gVGhpcyBmZWVscyBsaWtlIGEgc29saWQgYWRkaXRpb24sIGFuZCBJIGltbWVkaWF0ZWx5IHNlZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enogdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBJIHRoaW5rIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgUE1ELWxldmVsIGRldmljZS1wcml2YXRlIGVudHJpZXMuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZm9yIHRoZSBgVEVTVF9ITU1gIGRlcGVuZGVuY2llcywgYmVjYXVzZSBpdCB1c3VhbGx5IGhhcyBhbGwgdGhlIG9ic2N1cmUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMzgtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM0MC1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzNQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA2ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgSE1NL1RIUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBURVNUX0hNTWAgZWFybGllciwgd2hpY2ggaXMgZ29vZC4gVGhlIEtjb25maWcgcmV2ZWFscyB0aGF0IGBURVNUX0hNTWAgZGVwZW5kcyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGFuZCB0ZXN0IGl0LCBJJiMzOTtsbCBuZWVkIHRvIHNldCB0aG9zZSB0aHJlZSBjb25maWdzOiBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZGVmaW5pbmcgdGhlIGZ1enppbmcgdGFyZ2V0cy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcyB0byB0YXJnZXQgdGhlIHN5bWJvbHMgZGlyZWN0bHkgbWVudGlvbmVkIGluIHRoZSBwYXRjaCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uczogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAuIEJ1dCB3YWl0Li4uYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyAqdmVyeSogaG90LiBJdCYjMzk7cyB1c2VkIGluIGFsbW9zdCBldmVyeSBwYWdlIHRhYmxlIHdhbGsuIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc28gZXhjbHVkaW5nIGl0IGNvbXBsZXRlbHkgcmlza3MgbWlzc2luZyB0aGUgY3J1Y2lhbCBtb2RpZmllZCBsb2dpYy4KCkFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgSSYjMzk7dmUgcmUtZXZhbHVhdGVkLiBXaGlsZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHZlcnkgaG90LCB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHRoYXQmIzM5O3MgbW9kaWZpZWQgaXMgb25seSBleGVjdXRlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBgIXBtZF9wcmVzZW50KHBtZGUpYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBidXQgYWxzbyBrZWVwIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAsIGFzIHRoZXkgYXJlIHRoZSBjYWxsIHNpdGVzIHdoZXJlIHRoZSBtb2RpZmllZCBsb2dpYyBpcyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGFuZCBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuCgpUbyByZWNhcCBhbmQgc29saWRpZnkgbXkgcmF0aW9uYWxlLCB0aGlzIHBhdGNoIGRlYWxzIHdpdGggYSBjcml0aWNhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEhNTSwgVEhQLCBhbmQgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGNvbmN1cnJlbnQgc3BsaXR0aW5nIG9mIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoaXMgaXMgY3JpdGljYWwsIHJlYWNoYWJsZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emVyIGF0dGVudGlvbi4KClNvIHRoZSBmaW5hbCBwbGFuOgoKKiAgIENvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCiogICBGb2N1cyBzeW1ib2xzOiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YC4KCkkgdGhpbmsgdGhhdCBnaXZlcyB1cyBhIGdvb2QsIGZvY3VzZWQgYXBwcm9hY2guIE5vdyBJJiMzOTtsbCB1c2UgYHNldC1yZXN1bHRzYCB0byBzZXQgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MjcuNTQ1MTMzODAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1ODE1NzgxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gICAgXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjI3LjU0NTEzODY1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2ODc0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjhmYTEzZGM5YTU4ZGIwZmUyNmEwZmU3YzFmNGFlMGIzZTI3ZTFlNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcXG5AQCAtMjcwLDIxICsyNzAsMzMgQEAgYm9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuLVxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcXG4rXFx0XFx0XFx0c29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbiBcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgUE1EX09SREVSKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuLVxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiBcXG4tXFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuK1xcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuK1xcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUE1EX09SREVSKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuK1xcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXG4rXFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuIFxcdFxcdFxcdGlmICghcHZtdy1cXHUwMDNlcHRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDoyNy45ODI2MDQ5ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTQ0MDk1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX3ZtYV9tYXBwZWRfd2Fsa1wiLFxuICAgIFwidHJ5X3RvX21pZ3JhdGVfb25lXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwiZG1pcnJvcl9kZXZtZW1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4ZmExM2RjOWE1OGRiMGZlMjZhMGZlN2MxZjRhZTBiM2UyN2UxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi44ZGUzYzZiODJkZjZhYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4rKysgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTI3MCwyMSArMjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbiBcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0XHR9XG4gXG4tXHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuLVx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbi1cdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVx1MDAzZXBtZCk7XG4gXG4tXHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbitcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuK1x0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxuK1x0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuK1x0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgKHB2bXctXHUwMDNlbnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpKVxuK1x0XHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1xuK1x0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuIFx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDoyNy45ODI2MDY4NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5OTgxNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIEhhbmRsaW5nIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZWx2ZSBpbnRvIHRoZSBncml0dHkgZGV0YWlscyBvZiBob3cgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgYXJlIG1hbmFnZWQuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggdGhlc2UgZW50cmllcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrLiBJdCBzZWVtcyB0aGV5J3JlIG5vdyBjb25zaWRlcmluZyBgcHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT05gIGluIGNvbmp1bmN0aW9uIHdpdGggYGNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KWAuIFRoaXMgaGFzIHRvIGJlIGluIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIGNvdmVyaW5nIG91ciBiYXNlcyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWlncmF0aW9uLiBUaGVyZSdzIGFsc28gc29tZSBhZGRpdGlvbmFsIGNvbXBsZXhpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBzaXR1YXRpb25zIHdoZXJlIHRoZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnkgbWlnaHQgaGF2ZSBiZWVuIHNwbGl0IHVuZGVybmVhdGggdGhlIGV4aXN0aW5nIG9wZXJhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgd2UgbWF5IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgYWNjb3VudCBmb3IgdGhpcyBzY2VuYXJpbyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiBvciBhY2Nlc3MgaXNzdWVzLlxuXG5JIHRoaW5rIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBzb3VyY2UgY29kZSBkaXJlY3RseSB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkaXRpb25zIHdpdGhpbiB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzIuMzYyNTkwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjYxOlxcdFxcdFxcdFxcdH1cXG4gMjYyOlxcdFxcdFxcdFxcdGlmIChsaWtlbHkocG1kX3RyYW5zX2h1Z2UocG1kZSkpKSB7XFxuIDI2MzpcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcXG4gMjY2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY4OlxcdFxcdFxcdFxcdH1cXG4gMjY5OlxcdFxcdFxcdFxcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXFxuIDI3MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiAyNzE6XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gTlVMTDtcXG4gMjcyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI3MzpcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4gMjc2OlxcdFxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdH1cXG4gMjg3OlxcdFxcdFxcdFxcdFxcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyOTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQTURfT1JERVIpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTk6XFx0XFx0XFx0XFx0fVxcbiAzMDA6XFx0XFx0XFx0fVxcbiAzMDE6XFx0XFx0XFx0aWYgKCFtYXBfcHRlKHB2bXcsIFxcdTAwMjZwbWRlLCBcXHUwMDI2cHRsKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKCFwdm13LVxcdTAwM2VwdGUpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDMwNDpcXHRcXHRcXHRcXHRnb3RvIG5leHRfcHRlO1xcbiAzMDU6XFx0XFx0XFx0fVxcbiAzMDY6XFx0dGhpc19wdGU6XFxuIDMwNzpcXHRcXHRcXHRpZiAoY2hlY2tfcHRlKHB2bXcsIDEpKVxcbiAzMDg6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDMwOTpcXHRuZXh0X3B0ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzIuMzYyNjU1NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5NzIwNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGV2aWNlLVByaXZhdGUgTWVtb3J5IGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBhbmQgZG9pbmcgaXRzIGpvYi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW55IGRldmljZS1wcml2YXRlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aXRoaW4gaXRzIHNjb3BlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZmxhZ3MgdGhhdCBtaWdodCBiZSB0aWVkIHRvIHRoYXQuIEknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAsIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgdG8gaW5kaWNhdGUgZGV2aWNlLXNwZWNpZmljIG1lbW9yeSByZWdpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlYXJjaCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzUuNzIyMzc3NTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTU3ODY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTEwNDk9c3RhdGljIHZvaWQgc21hcHNfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMDg0LVxcdFxcdFxcdFxcdHByZXNlbnQgPSB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjM2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjUwLSAqIHdyaXRhYmxlIGVudHJ5P1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjU1LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYxLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTMzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQxLVxcdFxcdHJldHVybiB0cnVlO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM0MjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU4ND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NjpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTg3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXFx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTg6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxOS1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0yNjYtXFx0XFx0ICovXFxubW0vaG1tLmM6MjY3OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9obW0uYy0yNjgtXFx0XFx0ICAgIHBhZ2VfcGdtYXAoc29mdGxlYWZfdG9fcGFnZShlbnRyeSkpLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMjcwLVxcdFxcdFxcdGNwdV9mbGFncyA9IEhNTV9QRk5fVkFMSUQ7XFxubW0vaG1tLmM6MjcxOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjcyLVxcdFxcdFxcdFxcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xcbi0tXFxubW0vaG1tLmMtMjg0LVxcbm1tL2htbS5jOjI4NTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL2htbS5jLTI4Ni1cXHRcXHRcXHRnb3RvIGZhdWx0O1xcbi0tXFxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2htbS5jLTM0NS1cXG5tbS9obW0uYzozNDY6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTM0Ny1cXHQgICAgc29mdGxlYWZfdG9fZm9saW8oZW50cnkpLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgPT1cXG4tLVxcbm1tL2htbS5jLTM1My1cXG5tbS9obW0uYzozNTQ6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNTUtXFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0zNzItXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XFxubW0vaG1tLmM6MzczOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMzc0LVxcdFxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xODA4PXN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXFx0XFx0c2V0X3BtZF9hdChzcmNfbW0sIGFkZHIsIHNyY19wbWQsIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODI4OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0xODI5LVxcdFxcdC8qXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxODMzOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjU1NT1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1NzUtXFx0XFx0XFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjI1NzY6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI1NzctXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyMy1cXG5tbS9odWdlX21lbW9yeS5jOjMxMjQ6XFx0XFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMTI1LVxcdFxcdGFub25fZXhjbHVzaXZlID0gUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4NjY9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5NS1cXG5tbS9odWdlX21lbW9yeS5jOjQ4OTY6XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShvbGRfZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5Ny1cXHRcXHRzb2Z0ZGlydHkgPSBwbWRfc3dwX3NvZnRfZGlydHkocG1kdmFsKTtcXG4tLVxcbm1tL21lbW9yeS5jPTk0MT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtOTkwLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzo5OTE6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy05OTItXFx0XFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTAxNS1cXHRcXHQgKi9cXG5tbS9tZW1vcnkuYzoxMDE2OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnkuYy0xMDE3LVxcdFxcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTc0NC1cXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9tZW1vcnkuYzoxNzQ1OlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9tZW1vcnkuYy0xNzQ2LVxcdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi0tXFxubW0vbWVtb3J5LmM9NDc0Nz12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3NzMtXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG5tbS9tZW1vcnkuYzo0Nzc0OlxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDc3NS1cXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcwLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0IShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc4OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzktXFx0XFx0XFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI5NS1cXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyOTY6XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTctXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjYtXFx0XFx0XFx0XFx0XFx0TUlHUkFURV9QRk5fTUlHUkFURTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMyNzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI4LVxcdFxcdFxcdFxcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjIzNjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL21wcm90ZWN0LmMtMjM3LVxcdFxcdC8qXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjQtXFx0XFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEyNTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc0LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI3NTpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc2LVxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc5LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI4MDpcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjgxLVxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbi0tXFxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI2MDAtXFxubW0vcm1hcC5jOjI2MDE6XFx0XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vcm1hcC5jLTI2MDItXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDozOC44NzgxNjkzMDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcyMTY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBBaCwgaXQncyBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyouIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBkaXNzZWN0IGl0LiBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGFyZ3VtZW50cywgdGhlIHJldHVybiB0eXBlLCBhbmQsIGNydWNpYWxseSwgdGhlIGxvZ2ljIHdpdGhpbi4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEknbSBleHBlY3RpbmcgaXQgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgXCJzb2Z0bGVhZlwiIGlzIHByaXZhdGUgdG8gYSBwYXJ0aWN1bGFyIGRldmljZS4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbnRlcmVzdGluZy4gV2hhdCBleGFjdGx5IGNvbnN0aXR1dGVzIGEgXCJzb2Z0bGVhZlwiPyBBbmQgd2hhdCBkZWZpbmVzIHRoZSBzY29wZSBvZiB0aGlzIFwiZGV2aWNlIHByaXZhY3lcIj8gTGV0J3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIHdlIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjQyLjU1MDMzNzg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHQvKipcXG4gMjYyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjYzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjY0OlxcdCAqXFxuIDI2NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjY2OlxcdCAqL1xcbiAyNjc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI2ODpcXHR7XFxuIDI2OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI3MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyNzE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyNzI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI3MzpcXHRcXHRkZWZhdWx0OlxcbiAyNzQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0fVxcbiAyNzc6XFx0XFxuIDI3ODpcXHQvKipcXG4gMjc5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjQyLjU1MDQ0MDY4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTk1MDgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIEtleXdvcmQgSHVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFYCBvciBwb3RlbnRpYWxseSBhIG1vcmUgZ2VuZXJpYyBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yIHRob3NlIHNwZWNpZmljIHN0cmluZ3MgZGlyZWN0bHkgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmZWN0aXZlIGZpcnN0IHN0ZXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIHN1YnN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgZGVmaW5pdGlvbnMgb3IgcmVmZXJlbmNlcyB0byByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBsZWFkIHRvIGEgY29uZGl0aW9uYWwgc2V0dGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsISBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBhcyBJIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo0Ni41MDk5NTA1MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjgxODE4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lIG9mIGRyaXZlciByZXNvdXJjZVxcXCIpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODE6ICAgIHBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjgyLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTAtICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAgd2lsbCBvbmx5IG1pZ3JhdGUgc3lzdGVtIG1lbW9yeSBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzExOiAgIGBgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFYGAgd2lsbCBvbmx5IG1pZ3JhdGUgcGFnZXMgcmVzaWRpbmcgaW5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzEyLSAgIGRldmljZSBwcml2YXRlIG1lbW9yeS4gSWYgdGhlIGxhdHRlciBmbGFnIGlzIHNldCwgdGhlIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMxLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcXFwiKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzMjogICAgcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMzLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTg6ICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEVgYCDlsIblj6rov4Hnp7vpqbvnlZnlnKjorr7lpIfnp4HmnInlhoXlrZjkuK3nmoTpobVcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1OS0gICDpnaLjgILlpoLmnpzlkI7ogIXooqvorr7nva7vvIwgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteiiq+eUqOadpeivhuWIq+mpseWKqOaJgOaLpeacieeahOiuvuWkh1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NTQxPWNvbmZpZyBQUENfVVZcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0My1cXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1NDQ6XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTY4PUNPTkZJR19aT05FX0RFVklDRT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6Njk6Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy03MC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzEtXFx0bWlnLnBnbWFwX293bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzMjpcXHRtaWcuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEU7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzMtXFx0bWlnLmZhdWx0X3BhZ2UgPSBmYXVsdF9wYWdlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTgyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE4MzpcXHRrdm1wcGNfdXZtZW1fcGdtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODQtXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jPTY4Mz1zdGF0aWMgYm9vbCBpc19hbGxvd2VkX3JhbmdlKHU2NCBiYXNlX2FkZHIsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy9hY3BpL2FwZWkvZWluai1jb3JlLmMtNjk3LVxcdFxcdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZLFxcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jOjY5ODpcXHRcXHQvKiBUcmVhdCBJT1JFU19ERVNDX0RFVklDRV9QUklWQVRFX01FTU9SWSBhcyBNTUlPLiAqL1xcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jLTY5OS1cXHRcXHRJT1JFU19ERVNDX1JFU0VSVkVELFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oPTEwND1zdHJ1Y3QgYW1kZ3B1X2tmZF9kZXYge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oLTExMy1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmg6MTE0OlxcdC8qIEhNTSBwYWdlIG1pZ3JhdGlvbiBNRU1PUllfREVWSUNFX1BSSVZBVEUgbWFwcGluZ1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaC0xMTUtXFx0ICogTXVzdCBiZSBsYXN0IC0tZW5kcyBpbiBhIGZsZXhpYmxlLWFycmF5IG1lbWJlci5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc9MTU9Y29uZmlnIEhTQV9BTURfU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgSE1NLWJhc2VkIHNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VyXFxcIlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBIU0FfQU1EIFxcdTAwMjZcXHUwMDI2IERFVklDRV9QUklWQVRFXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xOC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkyPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNS1cXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MTY6XFx0XFx0bWlncmF0ZS5mbGFncyA9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNT1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDU2LVxcdFxcdHBnbWFwLVxcdTAwM2VyYW5nZS5lbmQgPSByZXMtXFx1MDAzZWVuZDtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNTc6XFx0XFx0cGdtYXAtXFx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDU4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBITU0gZGV2aWNlIG1lbW9yeVxcXFxuXFxcIik7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDcwOlxcdFxcdGlmIChwZ21hcC1cXHUwMDNldHlwZSA9PSBNRU1PUllfREVWSUNFX1BSSVZBVEUpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDcxLVxcdFxcdFxcdGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGFkZXYtXFx1MDAzZWRldiwgcmVzLVxcdTAwM2VzdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTUxNz1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXFx0XFx0LmZsYWdzXFx0XFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNIHwgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9DT0hFUkVOVCB8XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTMwOlxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MzEtXFx0fTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTM9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyMC1cXHRcXHQucGdtYXBfb3duZXJcXHQ9IHBhZ2VfcGdtYXAocGFnZSktXFx1MDAzZW93bmVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XFx0XFx0LmZsYWdzXFx0XFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUgfFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMjItXFx0XFx0XFx0XFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc9OTQ9Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiKEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTctXFx0ZGVwZW5kcyBvbiBEUk1fTk9VVkVBVVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTE5NS1cXHRcXHQuZmF1bHRfcGFnZVxcdD0gdm1mLVxcdTAwM2VwYWdlLFxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjE5NjpcXHRcXHQuZmxhZ3NcXHRcXHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMTk3LVxcdFxcdFxcdFxcdCAgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5ELFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMyMC1cXHRjaHVuay1cXHUwMDNlZHJtID0gZHJtO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMyMTpcXHRjaHVuay1cXHUwMDNlcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMyMi1cXHRjaHVuay1cXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCA9IHJlcy1cXHUwMDNlc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODU6XFx0c2VsZWN0IERFVklDRV9QUklWQVRFXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODYtXFx0c2VsZWN0IERSTV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzY5PXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwNC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwNTpcXHRwYWdlbWFwLVxcdTAwM2V0eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODA2LVxcdHBhZ2VtYXAtXFx1MDAzZXJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC02LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaDo3OiNpZm5kZWYgX19HUF9ERVZJQ0VfUFJJVkFURV9IX0lOQ0xVREVEX19cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmg6ODojZGVmaW5lIF9fR1BfREVWSUNFX1BSSVZBVEVfSF9JTkNMVURFRF9fXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oLTktXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmg9Mjg9U1RPUkFHRV9DTEFTU19HUF9ERVZJQ0VfQyBocnRfZGF0YSBncF9kZXZpY2VfcmVnX2xvYWQoXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmgtMzctXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjM4OiNlbmRpZiAvKiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfXyAqL1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaD0xNj1TVE9SQUdFX0NMQVNTX1RJTUVEX0NUUkxfQyB2b2lkIHRpbWVkX2N0cmxfcmVnX3N0b3JlKFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaC0yNS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L3RpbWVkX2N0cmxfcHJpdmF0ZS5oOjI2OiNlbmRpZiAvKiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfXyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xND1zdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaC0yMS0gKiAgICAgICAgICAgICAgICAgbGVhc3QgcmVhZGFibGUuIElmIGRldl9wcml2YXRlX293bmVyIGlzICFOVUxMIHRoZW4gdGhpcyBjb3VsZFxcbmluY2x1ZGUvbGludXgvaG1tLmg6MjI6ICogICAgICAgICAgICAgICAgIHBvaW50IGF0IGEgREVWSUNFX1BSSVZBVEUgcGFnZS5cXG5pbmNsdWRlL2xpbnV4L2htbS5oLTIzLSAqIEhNTV9QRk5fV1JJVEUgLSBpZiB0aGUgcGFnZSBtZW1vcnkgY2FuIGJlIHdyaXR0ZW4gdG8gKHJlcXVpcmVzIEhNTV9QRk5fVkFMSUQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oPTEzNj1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMTQyLVxcdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZXFx0PSA1LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0Lmg6MTQzOlxcdElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZXFx0PSA2LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMTQ0LVxcdElPUkVTX0RFU0NfUkVTRVJWRURcXHRcXHRcXHQ9IDcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xOT1lbnVtIHNvZnRsZWFmX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjctXFx0LyogRGV2aWNlIHR5cGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4OlxcdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQsXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjk6XFx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUsXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAtXFx0U09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE0MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTYxOiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjItXFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2MzpcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTY0LVxcdGNhc2UgU1dQX0RFVklDRV9SRUFEOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2NTpcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjYtXFx0Y2FzZSBTV1BfREVWSUNFX0VYQ0xVU0lWRTpcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1ODpcXHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjU5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OS1cXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcwOlxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcxOlxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzItXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjE9c3RydWN0IHZtZW1fYWx0bWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0zMy0gKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDozNDogKiBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTM1LSAqIERldmljZSBtZW1vcnkgdGhhdCBpcyBub3QgZGlyZWN0bHkgYWRkcmVzc2FibGUgYnkgdGhlIENQVTogQ1BVIGNhbiBuZWl0aGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Njg9ZW51bSBtZW1vcnlfdHlwZSB7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTY5LVxcdC8qIDAgaXMgcmVzZXJ2ZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCB0eXBlIGZpZWxkcyAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo3MDpcXHRNRU1PUllfREVWSUNFX1BSSVZBVEUgPSAxLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC03MS1cXHRNRU1PUllfREVWSUNFX0NPSEVSRU5ULFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTE2Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTY4OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY5LVxcdFxcdGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzA6XFx0XFx0Zm9saW8tXFx1MDAzZXBnbWFwLVxcdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNzM9c3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9wcml2YXRlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3NC17XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE3NTpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3Ni1cXHRcXHRmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1MT1lbnVtIG1pZ3JhdGVfdm1hX2RpcmVjdGlvbiB7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTUyLVxcdE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gPSAxIFxcdTAwM2NcXHUwMDNjIDAsXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTUzOlxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA9IDEgXFx1MDAzY1xcdTAwM2MgMSxcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTQtXFx0TUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9DT0hFUkVOVCA9IDEgXFx1MDAzY1xcdTAwM2MgMixcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1OD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTc3LVxcdCAqIGZvciBtaWdyYXRpbmcgb3V0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeS4gVGhlIGZsYWdzIGFsc28gbmVlZCB0b1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE3ODpcXHQgKiBiZSBzZXQgdG8gTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE3OS1cXHQgKiBUaGUgY2FsbGVyIHNob3VsZCBhbHdheXMgc2V0IHRoaXMgZmllbGQgd2hlbiB1c2luZyBtbXUgbm90aWZpZXJcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTM0PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NS0gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NjojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzctI2RlZmluZSBTV1BfREVWSUNFX05VTSAzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkICpzd3BfdG9fcmFkaXhfZW50cnkoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzQtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSlcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzYtc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUwLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE1MTojZWxzZSAvKiBDT05GSUdfREVWSUNFX1BSSVZBVEUgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTItc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTYyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY2LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE2NzojZW5kaWYgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY4LVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTMxNT1zdGF0aWMgaW50IF9fcmVxdWVzdF9yZWdpb25fbG9ja2VkKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jLTEzNDAtXFx0XFx0aWYgKHBhcmVudCA9PSBcXHUwMDI2aW9tZW1fcmVzb3VyY2UgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvcmVzb3VyY2UuYzoxMzQxOlxcdFxcdCAgICBjb25mbGljdC1cXHUwMDNlZGVzYyA9PSBJT1JFU19ERVNDX0RFVklDRV9QUklWQVRFX01FTU9SWSkge1xcbmtlcm5lbC9yZXNvdXJjZS5jLTEzNDItXFx0XFx0XFx0cHJfd2FybihcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgJXMgJXBSIGNvbmZsaWN0cyB3aXRoICVwUlxcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jPTIxMDc9c3RydWN0IHJlc291cmNlICpkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jLTIxMTMtXFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSxcXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTE0OlxcdFxcdFxcdFxcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XFxua2VybmVsL3Jlc291cmNlLmMtMjExNS19XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0yMTE4PXN0cnVjdCByZXNvdXJjZSAqcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oc3RydWN0IHJlc291cmNlICpiYXNlLFxcbi0tXFxua2VybmVsL3Jlc291cmNlLmMtMjEyMy1cXHRyZXR1cm4gZ2V0X2ZyZWVfbWVtX3JlZ2lvbihOVUxMLCBiYXNlLCBzaXplLCBHRlJfREVGQVVMVF9BTElHTiwgbmFtZSxcXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTI0OlxcdFxcdFxcdFxcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XFxua2VybmVsL3Jlc291cmNlLmMtMjEyNS19XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzM5PWNvbmZpZyBURVNUX0hNTVxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzM0MS1cXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubGliL0tjb25maWcuZGVidWc6MzM0MjpcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxubGliL0tjb25maWcuZGVidWctMzM0My1cXHRzZWxlY3QgSE1NX01JUlJPUlxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQyPXN0YXRpYyBib29sIGRtaXJyb3JfaXNfcHJpdmF0ZV96b25lKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE0NC1cXHRyZXR1cm4gKG1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cXG5saWIvdGVzdF9obW0uYzoxNDU6XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKTtcXG5saWIvdGVzdF9obW0uYy0xNDYtfVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ5PWRtaXJyb3Jfc2VsZWN0X2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MS1cXHRyZXR1cm4gKGRtaXJyb3ItXFx1MDAzZW1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cXG5saWIvdGVzdF9obW0uYzoxNTI6XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKSA/XFxubGliL3Rlc3RfaG1tLmM6MTUzOlxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA6XFxubGliL3Rlc3RfaG1tLmMtMTU0LVxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfQ09IRVJFTlQ7XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU3My1cXHRzd2l0Y2ggKG1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUpIHtcXG5saWIvdGVzdF9obW0uYzo1NzQ6XFx0Y2FzZSBITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubGliL3Rlc3RfaG1tLmMtNTc1LVxcdFxcdHJlcyA9IHJlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKFxcdTAwMjZpb21lbV9yZXNvdXJjZSwgREVWTUVNX0NIVU5LX1NJWkUsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01ODAtXFx0XFx0ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnJhbmdlLmVuZCA9IHJlcy1cXHUwMDNlZW5kO1xcbmxpYi90ZXN0X2htbS5jOjU4MTpcXHRcXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5saWIvdGVzdF9obW0uYy01ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5saWIvdGVzdF9obW0uYy02ODAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZtZW1fbG9jayk7XFxubGliL3Rlc3RfaG1tLmM6NjgxOlxcdGlmIChyZXMgXFx1MDAyNlxcdTAwMjYgZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxcbmxpYi90ZXN0X2htbS5jLTY4Mi1cXHRcXHRyZWxlYXNlX21lbV9yZWdpb24oZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0LFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE0OTctXFx0XFx0XFx0bWVtdW5tYXBfcGFnZXMoXFx1MDAyNmRldm1lbS1cXHUwMDNlcGFnZW1hcCk7XFxubGliL3Rlc3RfaG1tLmM6MTQ5ODpcXHRcXHRcXHRpZiAoZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxcbmxpYi90ZXN0X2htbS5jLTE0OTktXFx0XFx0XFx0XFx0cmVsZWFzZV9tZW1fcmVnaW9uKGRldm1lbS1cXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE4MjE9c3RhdGljIGludCBfX2luaXQgaG1tX2RtaXJyb3JfaW5pdCh2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTgzMy1cXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMrK10uem9uZV9kZXZpY2VfdHlwZSA9XFxubGliL3Rlc3RfaG1tLmM6MTgzNDpcXHRcXHRcXHRcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XFxubGliL3Rlc3RfaG1tLmMtMTgzNS1cXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMrK10uem9uZV9kZXZpY2VfdHlwZSA9XFxubGliL3Rlc3RfaG1tLmM6MTgzNjpcXHRcXHRcXHRcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XFxubGliL3Rlc3RfaG1tLmMtMTgzNy1cXHRpZiAoc3BtX2FkZHJfZGV2MCBcXHUwMDI2XFx1MDAyNiBzcG1fYWRkcl9kZXYxKSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xcbmxpYi90ZXN0X2htbV91YXBpLmgtNzUtXFx0LyogMCBpcyByZXNlcnZlZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIHR5cGUgZmllbGRzICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3NjpcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEUgPSAxLFxcbmxpYi90ZXN0X2htbV91YXBpLmgtNzctXFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVCxcXG4tLVxcbm1tL0tjb25maWc9MTE4Mz1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTE5NC1cXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxubW0vS2NvbmZpZzoxMTk1OlxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbm1tL0tjb25maWctMTE5Ni1cXG4tLVxcbm1tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyMTMtXFxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTIxNS1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MDY9c3RhdGljIGludCBtZl9nZW5lcmljX2tpbGxfcHJvY3ModW5zaWduZWQgbG9uZyBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzMwLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MzE6XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzMyLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4tLVxcbm1tL21lbXJlbWFwLmM9ODY9c3RhdGljIHZvaWQgcGFnZXVubWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCByYW5nZV9pZClcXG4tLVxcbm1tL21lbXJlbWFwLmMtOTctXFx0XFx0XFx0XFx0ICAgUEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSkpO1xcbm1tL21lbXJlbWFwLmM6OTg6XFx0aWYgKHBnbWFwLVxcdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSkge1xcbm1tL21lbXJlbWFwLmMtOTktXFx0XFx0X19yZW1vdmVfcGFnZXMoUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTEyPXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTE2LVxcdHBlcmNwdV9yZWZfa2lsbChcXHUwMDI2cGdtYXAtXFx1MDAzZXJlZik7XFxubW0vbWVtcmVtYXAuYzoxMTc6XFx0aWYgKHBnbWFwLVxcdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXJlbWFwLmMtMTE4LVxcdCAgICBwZ21hcC1cXHUwMDNldHlwZSAhPSBNRU1PUllfREVWSUNFX0NPSEVSRU5UKVxcbi0tXFxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTE0Ni17XFxubW0vbWVtcmVtYXAuYzoxNDc6XFx0Y29uc3QgYm9vbCBpc19wcml2YXRlID0gcGdtYXAtXFx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbm1tL21lbXJlbWFwLmMtMTQ4LVxcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcXHUwMDI2cGdtYXAtXFx1MDAzZXJhbmdlc1tyYW5nZV9pZF07XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI0NC1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgcGdtYXApO1xcbm1tL21lbXJlbWFwLmM6MjQ1OlxcdGlmIChwZ21hcC1cXHUwMDNldHlwZSAhPSBNRU1PUllfREVWSUNFX1BSSVZBVEUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1yZW1hcC5jLTI0Ni1cXHQgICAgcGdtYXAtXFx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI4Mi1cXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxubW0vbWVtcmVtYXAuYzoyODM6XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtcmVtYXAuYzoyODQ6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcXG5tbS9tZW1yZW1hcC5jLTI4NS1cXHRcXHRcXHRXQVJOKDEsIFxcXCJEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTQxNj12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbXJlbWFwLmMtNDUxLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG5tbS9tZW1yZW1hcC5jOjQ1MjpcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tZW1yZW1hcC5jLTQ1My1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcyOlxcdFxcdFxcdCEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzMtXFx0XFx0XFx0KGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpKSB7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXFx0XFx0XFx0aWYgKCEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAyOlxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMy1cXHRcXHRcXHQgICAgcGdtYXAtXFx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXFx1MDAzZXBnbWFwX293bmVyKVxcbi0tXFxubW0vbW1faW5pdC5jPTEwMDQ9c3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwMzgtXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG5tbS9tbV9pbml0LmM6MTAzOTpcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tbV9pbml0LmMtMTA0MC1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLS1cXG5tbS9ybWFwLmM9MjczOT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NzYtXFxubW0vcm1hcC5jOjI3Nzc6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbm1tL3JtYXAuYy0yNzc4LS8qKlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTQ9Q09ORklHX1RFU1RfVk1BTExPQz1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjU6Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo0OC40MzgxMzY3MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjQzMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBEZXZpY2UtUHJpdmF0ZSBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGNvbmZpZyBvcHRpb24gaGVyZSwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyB0aGUga2V5IHRvIGVuYWJsaW5nIGRldmljZS1wcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgdGhpcywgYW5kIGlmIEkgd2FudCB0byBoYXZlIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LCBJIHJlYWxpemUgdGhhdCBgQ09ORklHX1RFU1RfSE1NYCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bC4gU3BlY2lmaWNhbGx5LCB0aGlzIHNob3VsZCBwcm92aWRlIGEgZHVtbXkgZGV2aWNlIHRoYXQgSSBjYW4gdXNlIHRvIHJlbGlhYmx5IHRlc3QgdGhlIGRldmljZS1wcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBob3cgaXQncyB1c2VkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUgdG8gY29uZmlybSBob3cgYFRFU1RfSE1NYCBpcyBkZWZpbmVkIGFuZCB1c2VkLCB0byBiZSBjZXJ0YWluIGl0IGFsaWducyB3aXRoIG15IHRlc3QgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo1MS42NTQ1NjkzODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk3NTkzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6NTMuNDk0MzM1OTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDIxODkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCoqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIGEgdHJpc3RhdGUsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBwYXRjaCB0YXJnZXRzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbjsgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCB1c2VkIHRvIHRyYXZlcnNlIHRoZSBwYWdlIHRhYmxlcyBmb3IgYSBnaXZlbiBwYWdlL2ZvbGlvIGFuZCBWTUEuIFRoaXMgaXMgY29yZSBzdHVmZi5cblxuVGhlIGNvcmUgb2YgdGhpcyBtb2RpZmljYXRpb24gYXBwZWFycyB0byBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIHNwZWNpZmljYWxseSwgdGhlIGNhc2Ugd2hlcmUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAgaXMgdHJ1ZSwgYnV0IGAhcG1kX3ByZXNlbnQocG1kZSlgLiBJdCBsb29rcyBsaWtlIGl0J3Mgbm93IGNoZWNraW5nIGZvciBgUFZNV19NSUdSQVRJT05gIGluIGBwdm13LVx1MDAzZWZsYWdzYCBhbmQgdGhlbiBjYWxsaW5nIGBjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdylgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZC4gRGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBzeW1ib2wuXG5cbldhaXQgYSBzZWNvbmQuLi4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyBhICpob3QtcGF0aCogZnVuY3Rpb24uIFRoYXQncyB1c2VkIGNvbnN0YW50bHkuIEdpdmVuIGl0J3MgYSBob3QgcGF0aCwgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2Ugc3RhbmRwb2ludC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY291bGQgdHJpZ2dlciB0aGlzIGV4YWN0IHBhdGgsIG1heWJlIHRoaXMgZml4IHdpbGwgaW1wcm92ZSBvdGhlciBmdW5jdGlvbnMgYW5kIG5vdCBqdXN0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuXG5cbkRldmljZS1wcml2YXRlIG1lbW9yeSBhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbiBvZnRlbiByZWxhdGUgdG8gSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KSBvciBtaWdyYXRpb24gc2NlbmFyaW9zLiBMZXQgbWUgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjU5LjIzNjUyNzQzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1ODg1ODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3ZtYV9tYXBwZWRfd2Fsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTIzOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9ODUxPXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NjQ6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NjUtXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzYtI2RlZmluZSBERUZJTkVfRk9MSU9fVk1BX1dBTEsobmFtZSwgX2ZvbGlvLCBfdm1hLCBfYWRkcmVzcywgX2ZsYWdzKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIG5hbWUgPSB7XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3OC1cXHRcXHQucGZuID0gZm9saW9fcGZuKF9mb2xpbyksXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg4NjpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg5NS0vKipcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTY6ICogcGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydCAtIFJlc3RhcnQgdGhlIHBhZ2UgdGFibGUgd2Fsay5cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg5OC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjkwNTpwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MDYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTE4LVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjkxOTpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzE3PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9ndWFyZF9zd3BfZW50cnkodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjI6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyODpleHRlcm4gdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVxcdFxcdHN0cnVjdCBwYWdlICpuZXcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0My1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTYzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAxLVxcdCphY2Nlc3NlZCA9IGZhbHNlO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMDI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDMtXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjYtXFx0XFx0aWYgKCphY2Nlc3NlZCkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjc6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyOC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NjUtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vaHVnZV9tZW1vcnkuYy00ODY3LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTM5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcXG5tbS9odWdlX21lbW9yeS5jLTQ5NDEte1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTI1Ny0gKi9cXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vaW50ZXJuYWwuaC0xMjU5LXtcXG4tLVxcbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9rc20uYy0xMjk2LVxcbm1tL2tzbS5jOjEyOTc6XFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpXFxubW0va3NtLmMtMTI5OC1cXHRcXHRnb3RvIG91dF9tbjtcXG4tLVxcbm1tL2tzbS5jLTEzNTgtb3V0X3VubG9jazpcXG5tbS9rc20uYzoxMzU5OlxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL2tzbS5jLTEzNjAtb3V0X21uOlxcbi0tXFxubW0vbWlncmF0ZS5jPTI3OT1ib29sIGlzb2xhdGVfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vbWlncmF0ZS5jLTI5Ny1cXG5tbS9taWdyYXRlLmM6Mjk4OnN0YXRpYyBib29sIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9taWdyYXRlLmMtMjk5LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90IG9sZF9wdGUsIHVuc2lnbmVkIGxvbmcgaWR4KVxcbi0tXFxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTM1MS1cXG5tbS9taWdyYXRlLmM6MzUyOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9taWdyYXRlLmMtMzUzLVxcdFxcdHJtYXBfdCBybWFwX2ZsYWdzID0gUk1BUF9OT05FO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTc6XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTgtXFx0XFx0XFx0LnB0bCA9IHB0bCxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jLTU4LVxcbm1tL3BhZ2VfaWRsZS5jOjU5OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9wYWdlX2lkbGUuYy02MC1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDpzdGF0aWMgaW5saW5lIGJvb2wgbm90X2ZvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjpzdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTctXFx0XFx0ICAgIHNwaW5sb2NrX3QgKipwdGxwKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cXHUwMDNlcHRlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6ODg6ICogQHB2bXc6IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHN0cnVjdCwgaW5jbHVkZXMgYSBwYWlyIHB0ZSBhbmQgcGZuIHJhbmdlXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05MS0gKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5Klxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkzLSAqIG1hcHBlZC4gY2hlY2tfcHRlKCkgaGFzIHRvIHZhbGlkYXRlIHRoaXMuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA3OnN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwOC17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzktLyogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gcmFuZ2VzIG92ZXJsYXAuICBDYXJlZnVsIHRvIG5vdCBvdmVyZmxvdy4gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OC1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDk6c3RhdGljIHZvaWQgc3RlcF9mb3J3YXJkKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MC17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTYtLyoqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU3OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrIC0gY2hlY2sgaWYgQHB2bXctXFx1MDAzZXBmbiBpcyBtYXBwZWQgaW4gQHB2bXctXFx1MDAzZXZtYSBhdFxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1OC0gKiBAcHZtdy1cXHUwMDNlYWRkcmVzc1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1OTogKiBAcHZtdzogcG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuIHBhZ2UsIHZtYSwgYWRkcmVzcyBhbmQgZmxhZ3NcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjAtICogbXVzdCBiZSBzZXQuIHBtZCwgcHRlIGFuZCBwdGwgbXVzdCBiZSBOVUxMLlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY2LSAqIElmIEBwdm13LVxcdTAwM2VwbWQgaXMgc2V0IGJ1dCBAcHZtdy1cXHUwMDNlcHRlIGlzIG5vdCwgeW91IGhhdmUgZm91bmQgUE1ELW1hcHBlZCBwYWdlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY3OiAqICh1c3VhbGx5IFRIUCkuIEZvciBQVEUtbWFwcGVkIFRIUCwgeW91IHNob3VsZCBydW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBpblxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2OC0gKiBhIGxvb3AgdG8gZmluZCBhbGwgUFRFcyB0aGF0IG1hcCB0aGUgVEhQLlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTc2LSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc3OiAqIElmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHdhbGsgYmVmb3JlIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgcmV0dXJuZWQgZmFsc2UsXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc4OiAqIHVzZSBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCkuIEl0IHdpbGwgZG8gdGhlIGhvdXNla2VlcGluZy5cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzktICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTgwOmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0zNTg9dW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzYyOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2My1cXHRcXHQucGZuID0gcGFnZV90b19wZm4ocGFnZSksXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzEtXFx0XFx0Z290byBvdXQ7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzcyOlxcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3My1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzQ6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzc1LW91dDpcXG4tLVxcbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05MjQtXFxubW0vcm1hcC5jOjkyNTpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTkyNi1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vcm1hcC5jLTk0OC1cXHRcXHRcXHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XFxubW0vcm1hcC5jOjk0OTpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtOTUwLVxcdFxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbi0tXFxubW0vcm1hcC5jLTk2My1cXHRcXHRcXHRwcmEtXFx1MDAzZXJlZmVyZW5jZWQgPSAtMTtcXG5tbS9ybWFwLmM6OTY0OlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy05NjUtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vcm1hcC5jLTEwMDItXFx0XFx0aWYgKHB0ZXMgPT0gcHZtdy5ucl9wYWdlcykge1xcbm1tL3JtYXAuYzoxMDAzOlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0xMDA0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jPTEwNjQ9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tLVxcbm1tL3JtYXAuYy0xMTAyLVxcbm1tL3JtYXAuYzoxMTAzOnN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3JtYXAuYy0xMTA0LXtcXG4tLVxcbm1tL3JtYXAuYy0xMTE3LVxcbm1tL3JtYXAuYzoxMTE4OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2Fsayhwdm13KSkge1xcbm1tL3JtYXAuYy0xMTE5LVxcdFxcdGludCByZXQgPSAwO1xcbi0tXFxubW0vcm1hcC5jPTEyMzE9c3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMTIzNC1cXHRzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqKWFyZztcXG5tbS9ybWFwLmM6MTIzNTpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9ybWFwLmMtMTIzNi1cXHRcXHQucGZuXFx0XFx0PSBzdGF0ZS1cXHUwMDNlcGZuLFxcbi0tXFxubW0vcm1hcC5jPTEzMTA9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxubW0vcm1hcC5jLTEzMTIte1xcbm1tL3JtYXAuYzoxMzEzOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3JtYXAuYy0xMzE0LVxcdFxcdC5wZm5cXHRcXHQ9IHBmbixcXG4tLVxcbm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYzoxOTQ1OlxcdFxcdFxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9ybWFwLmMtMTk0Ni1cXHRcXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncywgcHRlX3QgcHRlKVxcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMDMxLVxcbm1tL3JtYXAuYzoyMDMyOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtMjAzMy1cXHRcXHRucl9wYWdlcyA9IDE7XFxuLS1cXG5tbS9ybWFwLmMtMjA4OS1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xcbm1tL3JtYXAuYzoyMDkwOlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yMDkxLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vcm1hcC5jLTIzNjMtd2Fsa19kb25lOlxcbm1tL3JtYXAuYzoyMzY0OlxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yMzY1LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI0NjAtXFxubW0vcm1hcC5jOjI0NjE6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy0yNDYyLVxcdFxcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbi0tXFxubW0vcm1hcC5jLTI0NzYtXFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG5tbS9ybWFwLmM6MjQ3NzpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjQ3OC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3JtYXAuYy0yNDkzLVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNDk0OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNDk1LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI1NDktXFx0XFx0XFx0XFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcXG5tbS9ybWFwLmM6MjU1MDpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjU1MS1cXHRcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4tLVxcbm1tL3JtYXAuYy0yNTYzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL3JtYXAuYzoyNTY0OlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNTY1LVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NTAtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2NTE6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NTItXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY2MS1cXHRcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY2MjpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY2My1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjY4LVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjY5OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjcwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NDEzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE4MC0gKi9cXG5tbS92bXNjYW4uYzo0MTgxOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MDEuMDk1MzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTkxNzE3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZm9yIERldmljZS1Qcml2YXRlIE1lbW9yeSoqXG5cbk9rYXksIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgdXNlZCBieSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgcGF0aHMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYW5kIGEgZmV3IG90aGVycyBsaWtlIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgYW5kIGBwYWdlX3ZtYV9ta2NsZWFuX29uZWAuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIG1pZ3JhdGlvbiBpbiB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYHRyeV90b191bm1hcF9vbmVgLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCBkaXJlY3QgbGlua3MuXG5cbkkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUg4oCTIGNvdWxkIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBvciBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGJlIHJlbGV2YW50PyBUaGV5IGRvbid0ICpkaXJlY3RseSogY2FsbCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBvciBzbyBJIGluaXRpYWxseSB0aG91Z2h0LiBIYW5nIG9uIGEgbW9tZW50Li4uIEkgc2VlIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgICpkb2VzKiBhY3R1YWxseSB1c2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCdzIGFuIGltcG9ydGFudCBkZXRhaWwuIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IG9uZS5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBmaW5kIHdoZXJlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpcyBkZWZpbmVkIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4gSSdsbCBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVzYWdlIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjA3LjQxNDU2NTIyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0fSBlbHNlIHtcXG4gMTgxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMTg2OlxcdFxcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XFxuIDE4NzpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAxODg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMTg5OlxcdFxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE5MzpcXHRcXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NDpcXHRcXHRcXHQoSVNfQUxJR05FRChzdGFydCwgSFBBR0VfUE1EX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NTpcXHRcXHRcXHQgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxuIDE5ODpcXHRcXHRcXHRcXHQucHRsID0gcHRsLFxcbiAxOTk6XFx0XFx0XFx0XFx0LmFkZHJlc3MgPSBzdGFydCxcXG4gMjAwOlxcdFxcdFxcdFxcdC5wbWQgPSBwbWRwLFxcbiAyMDE6XFx0XFx0XFx0XFx0LnZtYSA9IHdhbGstXFx1MDAzZXZtYSxcXG4gMjAyOlxcdFxcdFxcdH07XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IG1pZ3JhdGVfcGZuKHBmbikgfCB3cml0ZVxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXFxuIDIwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHR8IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbiAyMDk6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjA3LjQxNDY5MTE2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg1NzQyMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzIGEgZmVsbG93IGV4cGVydDpcblxuKipSZWZpbmluZyBNeSBVbmRlcnN0YW5kaW5nIG9mIEh1Z2UgUE1EIE1pZ3JhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGFib3V0IHRvIGp1bXAgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgd2FzIGRpcmVjdGx5IGludm9sdmVkIGluIHdhbGtpbmcgdGhlIHBhZ2UgbWFwcGluZ3MgdXNpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQsIGlzIGl0PyBMb29raW5nIGNsb3Nlci4uLiBpdCBhY3R1YWxseSBkb2Vzbid0ICpjYWxsKiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGl0c2VsZi4gSW5zdGVhZCwgaXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHB2bXdgIGFuZCB0aGVuIHBhc3NpbmcgaXQgYWxvbmcgdG8gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCwgcmlnaHQ/IFNvIGl0J3MgbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IGZvciB0aGUgcGFnZSB3YWxrIHRoYXQgKndpbGwqIGhhcHBlbi4gVGhlIGtleSBpcyBpbiB0aGF0IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgY2FsbC4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyB0cmF2ZXJzYWwgbG9naWMgaXMgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgbGV2ZXJhZ2VkLCB1c2luZyB0aGUgYHB2bXdgIHN0cnVjdHVyZSB0aGF0IHdhcyBzZXQgdXAuIEludGVyZXN0aW5nOyBpdCdzIGEgY3JpdGljYWwgZGlzdGluY3Rpb24gdG8ga2VlcCBpbiBtaW5kIGZvciB0cmFjaW5nIHRoaXMgY29kZSdzIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBwdm13YCBpcyBiZWluZyB1c2VkIGluIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToxMS41MDA0MzU4NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWNwYWdlcysrO1xcbiAyMTE6XFx0XFx0XFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG4gMjEyOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gMjEzOlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZW5wYWdlcy0tO1xcbiAyMTQ6XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzLS07XFxuIDIxNTpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IDA7XFxuIDIxNjpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2Vkc3RbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IDA7XFxuIDIxNzpcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiAyMTg6XFx0XFx0XFx0fVxcbiAyMTk6XFx0XFx0XFx0bWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0ICsgUEFHRV9TSVpFLCBlbmQsIHdhbGspO1xcbiAyMjA6XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gMjIxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRmYWxsYmFjazpcXG4gMjI1OlxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDIyNjpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiAyMjc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMjg6XFx0XFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xcbiAyMjk6XFx0XFx0aWYgKGZhdWx0X2ZvbGlvICE9IGZvbGlvKVxcbiAyMzA6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gMjMxOlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDIzMjpcXHRcXHRpZiAocmV0KVxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG4gMjM0OlxcdFxcdGlmIChwbWRfbm9uZShwbWRwX2dldF9sb2NrbGVzcyhwbWRwKSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0ZG9uZTpcXG4gMjM4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAyMzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToxMS41MDA2MzA4NjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjE2MTk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBEZXZpY2UtUHJpdmF0ZSBQTUQgRW50cmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3QuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSAqY2FsbGluZyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgbGlzdCBpczogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2Vfdm1hX21rY2xlYW5fb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGFuZCBgd3JpdGVfcHJvdGVjdF9wYWdlYCByZWxhdGVkIHRvIEtTTS5cblxuVGhlIHBhdGNoIG1lbnRpb25zIGRlYWxpbmcgd2l0aCBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gRGV2aWNlLXByaXZhdGUgbWVtb3J5IGlzICp0eXBpY2FsbHkqIGFzc29jaWF0ZWQgd2l0aCBtaWdyYXRpb25zLiBTbywgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBzdGFuZCBvdXQgYXMgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLlxuXG5Ib3dldmVyLCBJIHJlbWVtYmVyIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGFsc28gaGFuZGxlcyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgYWx0aG91Z2ggaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgICp3aXRoaW4qIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbi5cblxuTm93LCB3aGVuIHdvdWxkIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgYWN0dWFsbHkgZW5jb3VudGVyIGEgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJ5PyBUaGUgYW5zd2VyIGlzIHdoZW4gdGhlIFBNRCAqaXRzZWxmKiBpcyBhIGRldmljZS1wcml2YXRlIGVudHJ5LiBUaGlzIHNpdHVhdGlvbiBhcmlzZXMgd2hlbiBhIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBpcyBtaWdyYXRlZCB0byBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuXG5cblNvLCBob3cgZG9lcyB0aGlzIGhhcHBlbj8gYHRyeV90b19taWdyYXRlX29uZWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJIGNhbiBzZWUgdGhlc2UgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGludmVzdGlnYXRlLlxuXG5BbHRob3VnaCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSB3b3JraG9yc2UgZnVuY3Rpb24sIGl0J3MgZGVmaW5pdGVseSBhIGhvdC1wYXRoIGZ1bmN0aW9uIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSXMgYHRyeV90b19taWdyYXRlX29uZWAgYSBob3QgcGF0aCBmdW5jdGlvbj8gTm8sIGJlY2F1c2UgaXQncyBjYWxsZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uLiBJcyBgdHJ5X3RvX3VubWFwX29uZWA/IEl0J3MgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0gYW5kIHVubWFwcGluZywgc28gaXQgaXMgYSBob3QgcGF0aCBidXQgbm90IGFzIGhvdCBhcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0J3MgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYW5kIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYXMgdGhleSBtYXkgYmUgZW50cnkgcG9pbnRzIGZvciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBsb29rIGF0IHRoZSBzZXR1cCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMjAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToyMS41NjIyNTM3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEzNjk2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI2ND11c2UgaGFyZHdhcmUgRE1BIG9yIGRldmljZSBzcGVjaWZpYyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB0byBtaWdyYXRlIGRhdGEuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDEtICAgVGhlIGRldmljZSBkcml2ZXIgaGFzIHRvIHBhc3MgYSBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDctICAgVGhlIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAgZmllbGRzIGFuZCBwYXNzZXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXFx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDktICAgZmlsdGVyIHdoaWNoIHNvdXJjZSBwYWdlcyBzaG91bGQgYmUgbWlncmF0ZWQuIEZvciBleGFtcGxlLCBzZXR0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTg6ICAgT25lIG9mIHRoZSBmaXJzdCBzdGVwcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIGRvZXMgaXMgdG8gaW52YWxpZGF0ZSBvdGhlclxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJ3MgTU1VcyB3aXRoIHRoZSBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCgpYGAgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMyNTogICB0aGUgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXFx1MDAzZWRzdGBgIGFycmF5LlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUwOiAgIOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+WwhiBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIOS8oOmAkue7mW1pZ3JhdGVfdm1hX3NldHVwKCnvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MzoyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjU2OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnjgIJgYGFyZ3MtXFx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY0LSAgIOWSjCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYGAg6LCD55So5p2l6YGN5Y6G6K6+5aSH5ZGo5Zu055qE6aG16KGo77yM5L2/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjg6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeeahCBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc3LSAgIOi/mOa4hemZpOS6hiBgYGFyZ3MtXFx1MDAzZWRzdGBgIOaVsOe7hOOAglxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzOTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU0MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc2MTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQzMTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMyLVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MzQ6XFx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNS1cXHRpZiAocikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzU4MzogKiAxLiBtaWdyYXRlX3ZtYV9zZXR1cCBpbnZhbGlkYXRlIHBhZ2VzLCBNTVUgbm90aWZpZXIgY2FsbGJhY2sgc3ZtX3JhbmdlX2V2aWN0XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MTc9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NTpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2NzpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz04MjI9bm91dmVhdV9kbWVtX21pZ3JhdGVfdm1hKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjg3MjpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjU6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTM6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2NC1cXG5saWIvdGVzdF9obW0uYzoxMTY1OlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTY2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDItXFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jOjEyNDM6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTEyNDQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzA1LVxcdC8qXFxubGliL3Rlc3RfaG1tLmM6MTcwNjpcXHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcXG5saWIvdGVzdF9obW0uYy0xNzA3LVxcdCAqIHRlc3QgaXMgd3JvbmcgYXMgaXQganVzdCB0ZXN0cyBzb21lIHN0YXRpYyBWTUEgcHJvcGVydGllcy5cXG5saWIvdGVzdF9obW0uYy0xNzA4LVxcdCAqL1xcbmxpYi90ZXN0X2htbS5jOjE3MDk6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSkge1xcbmxpYi90ZXN0X2htbS5jLTE3MTAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjUtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzMwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc2OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTU9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcXHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MjMuMjgzNjI2ODA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDY1MTgxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBkZXZpY2UtcHJpdmF0ZSBtZW1vcnksIGFuZCBpdCBzZWVtcyBsaWtlIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQncyBleHBvcnRlZCBhbmQgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMgYW5kIGV2ZW4gYHRlc3RfaG1tYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBkZWx2ZSBpbnRvLiBUaGUgY29yZSBvZiB0aGlzIGlzIG1pZ3JhdGlvbjsgZmluZGluZyBhIGdvb2QgZW50cnkgcG9pbnQuXG5cbkkgYWxzbyBzZWUgdGhhdCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgY291bGQgYmUgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgc2luY2UgaXQgc2VlbXMgdG8gdHJpZ2dlciBtaWdyYXRpb24gdG8gUkFNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEhtbSwgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpcyBhIGZhdWx0IGhhbmRsZXIsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbGliL3Rlc3RfaG1tLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhhdCBmdW5jdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjI3LjA5MDE0Njg5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjUwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2Vsb2NrKTtcXG4xNjUxOlxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMTY1NDpcXHR7XFxuMTY1NTpcXHRcXHRzdHJ1Y3QgbWlncmF0ZV92bWEgYXJncyA9IHsgMCB9O1xcbjE2NTY6XFx0XFx0c3RydWN0IHBhZ2UgKnJwYWdlO1xcbjE2NTc6XFx0XFx0c3RydWN0IGRtaXJyb3IgKmRtaXJyb3I7XFxuMTY1ODpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMTY1OTpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIG5yO1xcbjE2NjA6XFx0XFxuMTY2MTpcXHRcXHQvKlxcbjE2NjI6XFx0XFx0ICogTm9ybWFsbHksIGEgZGV2aWNlIHdvdWxkIHVzZSB0aGUgcGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSB0byBwb2ludCB0b1xcbjE2NjM6XFx0XFx0ICogdGhlIG1pcnJvciBidXQgaGVyZSB3ZSB1c2UgaXQgdG8gaG9sZCB0aGUgcGFnZSBmb3IgdGhlIHNpbXVsYXRlZFxcbjE2NjQ6XFx0XFx0ICogZGV2aWNlIG1lbW9yeSBhbmQgdGhhdCBwYWdlIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBtaXJyb3IuXFxuMTY2NTpcXHRcXHQgKi9cXG4xNjY2OlxcdFxcdHJwYWdlID0gZm9saW9fem9uZV9kZXZpY2VfZGF0YShwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSkpO1xcbjE2Njc6XFx0XFx0ZG1pcnJvciA9IHJwYWdlLVxcdTAwM2V6b25lX2RldmljZV9kYXRhO1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHQvKiBGSVhNRSBkZW1vbnN0cmF0ZSBob3cgd2UgY2FuIGFkanVzdCBtaWdyYXRlIHJhbmdlICovXFxuMTY3MDpcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKSk7XFxuMTY3MTpcXHRcXHRuciA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdC8qXFxuMTY3NDpcXHRcXHQgKiBXaGVuIGZvbGlvcyBhcmUgcGFydGlhbGx5IG1hcHBlZCwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgZm9saW9cXG4xNjc1OlxcdFxcdCAqIG9yZGVyIG9mIHZtZi1cXHUwMDNlcGFnZSBhcyB0aGUgZm9saW8gbWlnaHQgbm90IGJlIGZ1bGx5IHNwbGl0IHlldFxcbjE2NzY6XFx0XFx0ICovXFxuMTY3NzpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpIHtcXG4xNjc4OlxcdFxcdFxcdG9yZGVyID0gMDtcXG4xNjc5OlxcdFxcdFxcdG5yID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MjcuMDkwMjQ0OTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDkxNTM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWVtb3J5IEZhdWx0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIOKAkyB5ZXAsIHRoYXQgY29uZmlybXMgaXQsIHRoaXMgaXMgYSBmYXVsdCBoYW5kbGVyIGRlYWxpbmcgd2l0aCBkZXZpY2UgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIE5vdywgSSBzZWUgd2UncmUgbW9kaWZ5aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyBpbnRlcmVzdGluZywgbWFrZXMgbWUgdGhpbmsgd2UncmUgd29ya2luZyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHNwZWNpZmljIHNjZW5hcmlvIOKAkyBhIHNwbGl0IGRldmljZS1wcml2YXRlIFBNRC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFuZCwgbmF0dXJhbGx5LCBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYXMga2V5IGFzcGVjdHMgaGVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG11c3QgYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnNpZGVyLiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZSB3aGF0IGZ1cnRoZXIgY2x1ZXMgdGhpcyBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MzEuMDM5NDAxMTI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiAyNzE6XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gTlVMTDtcXG4gMjcyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI3MzpcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4gMjc2OlxcdFxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdH1cXG4gMjg3OlxcdFxcdFxcdFxcdFxcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyOTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQTURfT1JERVIpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTk6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNTozMS4wMzk0NjcwMTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3ODQzMjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaGFuZGxpbmcgYSBzcGVjaWZpYyBlZGdlIGNhc2U6IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIHdoZW4gdGhlIHBhZ2UgbWFwIGVudHJ5IGlzbid0IHByZXNlbnQsIHdoaWNoIG1lYW5zIGAhcG1kX3ByZXNlbnQocG1kZSlgLiBFc3NlbnRpYWxseSwgd2UncmUgbG9va2luZyBhdCB3aGV0aGVyIHRoZSBkZXZpY2UtcHJpdmF0ZSBQTUQgd2FzIHNwbGl0IGJlbmVhdGggdXMuIFRoaXMgZmVlbHMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gVGhpcyBpcyByaXBlIGZvciBmdXp6IHRlc3RpbmcuIEknbGwgbmVlZCB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBJIHRoaW5rIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgUE1ELWxldmVsIGRldmljZS1wcml2YXRlIGVudHJpZXMuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZm9yIHRoZSBgVEVTVF9ITU1gIGRlcGVuZGVuY2llcywgYmVjYXVzZSBpdCB1c3VhbGx5IGhhcyBhbGwgdGhlIG9ic2N1cmUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNTozNS4wMTc5MDIxMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTQzNjkxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MzYuODcyMjc1MDY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTgwMDQ1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEhNTS9USFAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBURVNUX0hNTWAgZWFybGllciwgd2hpY2ggaXMgZ29vZC4gVGhlIEtjb25maWcgcmV2ZWFscyB0aGF0IGBURVNUX0hNTWAgZGVwZW5kcyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGFuZCB0ZXN0IGl0LCBJJ2xsIG5lZWQgdG8gc2V0IHRob3NlIHRocmVlIGNvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIHRoZSBmdXp6aW5nIHRhcmdldHMuIEluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5IG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFyZSBlc3NlbnRpYWxseSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnM6IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AsIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgLiBCdXQgd2FpdC4uLmBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgKnZlcnkqIGhvdC4gSXQncyB1c2VkIGluIGFsbW9zdCBldmVyeSBwYWdlIHRhYmxlIHdhbGsuIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc28gZXhjbHVkaW5nIGl0IGNvbXBsZXRlbHkgcmlza3MgbWlzc2luZyB0aGUgY3J1Y2lhbCBtb2RpZmllZCBsb2dpYy5cblxuQWZ0ZXIgZnVydGhlciBjb25zaWRlcmF0aW9uLCBJJ3ZlIHJlLWV2YWx1YXRlZC4gV2hpbGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB2ZXJ5IGhvdCwgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB0aGF0J3MgbW9kaWZpZWQgaXMgb25seSBleGVjdXRlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBgIXBtZF9wcmVzZW50KHBtZGUpYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBidXQgYWxzbyBrZWVwIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAsIGFzIHRoZXkgYXJlIHRoZSBjYWxsIHNpdGVzIHdoZXJlIHRoZSBtb2RpZmllZCBsb2dpYyBpcyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGFuZCBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblRvIHJlY2FwIGFuZCBzb2xpZGlmeSBteSByYXRpb25hbGUsIHRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBhIGNyaXRpY2FsIGludGVyYWN0aW9uIGJldHdlZW4gSE1NLCBUSFAsIGFuZCBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuIFNwZWNpZmljYWxseSwgaXQgaGFuZGxlcyB0aGUgY29uY3VycmVudCBzcGxpdHRpbmcgb2YgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MgaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhpcyBpcyBjcml0aWNhbCwgcmVhY2hhYmxlIGxvZ2ljIHRoYXQgZGVtYW5kcyBmdXp6ZXIgYXR0ZW50aW9uLlxuXG5TbyB0aGUgZmluYWwgcGxhbjpcblxuKiAgIENvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG4qICAgRm9jdXMgc3ltYm9sczogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAuXG5cbkkgdGhpbmsgdGhhdCBnaXZlcyB1cyBhIGdvb2QsIGZvY3VzZWQgYXBwcm9hY2guIE5vdyBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHNldCB0aGVzZSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMzUsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjQ4LjA1MjMyMTg0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0Mzc0Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBpbmNsdWRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBpcyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IHdoZW4gbWlncmF0aW5nIG1lbW9yeSB0by9mcm9tIGRldmljZS1wcml2YXRlIG1lbW9yeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBpbmNsdWRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBpcyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IHdoZW4gbWlncmF0aW5nIG1lbW9yeSB0by9mcm9tIGRldmljZS1wcml2YXRlIG1lbW9yeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownts4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 10:05:00 +0000 UTC FinishedAt: 2026-06-24 10:15:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "TEST_HMM", "TRANSPARENT_HUGEPAGE" ], "series_id": "56ff04e4-fb27-4eb5-8861-59d00f6f2250" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "page_vma_mapped_walk", "try_to_migrate_one", "migrate_vma_setup", "dmirror_devmem_fault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmOGZhMTNkYzlhNThkYjBmZTI2YTBmZTdjMWY0YWUwYjNlMjdlMWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMTA6MTQ6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV92bWFfbWFwcGVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5AQCAtMjcwLDIxICYjNDM7MjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuJiM0MztcdFx0XHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XG4gXG4gXHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIFx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLVx0XHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdFx0fVxuIFxuLVx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbi1cdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4tXHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcdFx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnB2bXctXHUwMDNlcG1kKTtcbiBcbi1cdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbiYjNDM7XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiYjNDM7XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiYjNDM7XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxuJiM0MztcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuJiM0MztcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHRcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiYjNDM7XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4mIzQzO1x0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuJiM0MztcdFx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4mIzQzO1x0XHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYgKCFtYXBfcHRlKHB2bXcsIFx1MDAyNnBtZGUsIFx1MDAyNnB0bCkpIHtcbiBcdFx0XHRpZiAoIXB2bXctXHUwMDNlcHRlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21pZ3JhdGVfb25lJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY4ZmExM2RjOWE1OGRiMGZlMjZhMGZlN2MxZjRhZTBiM2UyN2UxZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmMKaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NAotLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwpAQCAtMjcwLDIxICYjNDM7MjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KQogCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKIAkJCXB2bXctJmd0O3B0bCA9IE5VTEw7CiAJCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7Ci0JCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiYjNDM7CQkJc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpOwogCiAJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiAJCQkJcHZtdy0mZ3Q7cHRsID0gcG1kX2xvY2sobW0sIHB2bXctJmd0O3BtZCk7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9CiAKLQkJCWlmICgocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19TWU5DKSAmYW1wOyZhbXA7Ci0JCQkgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctJmd0O2FkZHJlc3MsCi0JCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKLQkJCSAgICAocHZtdy0mZ3Q7bnJfcGFnZXMgJmd0Oz0gSFBBR0VfUE1EX05SKSkKLQkJCQlzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcHZtdy0mZ3Q7cG1kKTsKIAotCQkJc3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTsKLQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiYjNDM7CQkJCQlpZiAocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT04pCiYjNDM7CQkJCQkJcmV0dXJuIG5vdF9mb3VuZChwdm13KTsKJiM0MzsJCQkJCWlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKQomIzQzOwkJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CiYjNDM7CQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCQkJfQomIzQzOwkJCQkvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovCiYjNDM7CQkJCXNwaW5fdW5sb2NrKHB2bXctJmd0O3B0bCk7CiYjNDM7CQkJCXB2bXctJmd0O3B0bCA9IE5VTEw7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJaWYgKChwdm13LSZndDtmbGFncyAmYW1wOyBQVk1XX1NZTkMpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LSZndDthZGRyZXNzLAomIzQzOwkJCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKJiM0MzsJCQkJICAgIChwdm13LSZndDtucl9wYWdlcyAmZ3Q7PSBIUEFHRV9QTURfTlIpKQomIzQzOwkJCQkJc3luY193aXRoX2ZvbGlvX3BtZF96YXAobW0sIHB2bXctJmd0O3BtZCk7CiYjNDM7CiYjNDM7CQkJCXN0ZXBfZm9yd2FyZChwdm13LCBQTURfU0laRSk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KIAkJfQogCQlpZiAoIW1hcF9wdGUocHZtdywgJmFtcDtwbWRlLCAmYW1wO3B0bCkpIHsKIAkJCWlmICghcHZtdy0mZ3Q7cHRlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUE1EIEhhbmRsaW5nIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZWx2ZSBpbnRvIHRoZSBncml0dHkgZGV0YWlscyBvZiBob3cgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgYXJlIG1hbmFnZWQuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggdGhlc2UgZW50cmllcy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGNydWNpYWwgY2hlY2suIEl0IHNlZW1zIHRoZXkmIzM5O3JlIG5vdyBjb25zaWRlcmluZyBgcHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT05gIGluIGNvbmp1bmN0aW9uIHdpdGggYGNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KWAuIFRoaXMgaGFzIHRvIGJlIGluIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlJiMzOTtyZSBjb3ZlcmluZyBvdXIgYmFzZXMgd2hlbiBkZWFsaW5nIHdpdGggbWVtb3J5IG1pZ3JhdGlvbi4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGFkZGl0aW9uYWwgY29tcGxleGl0eSByZWxhdGVkIHRvIGhhbmRsaW5nIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyeSBtaWdodCBoYXZlIGJlZW4gc3BsaXQgdW5kZXJuZWF0aCB0aGUgZXhpc3Rpbmcgb3BlcmF0aW9ucy4gVGhpcyBzdWdnZXN0cyB3ZSBtYXkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBhY2NvdW50IGZvciB0aGlzIHNjZW5hcmlvIHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uIG9yIGFjY2VzcyBpc3N1ZXMuCgpJIHRoaW5rIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2Agc291cmNlIGNvZGUgZGlyZWN0bHkgdG8gZnVsbHkgZ3Jhc3AgdGhlIGludGVudCBhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBhZGRpdGlvbnMgd2l0aGluIHRoZSBleGlzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX3ZtYV9tYXBwZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjYwOlx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyNjE6XHRcdFx0XHR9XG4gMjYyOlx0XHRcdFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcbiAyNjM6XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyNjQ6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjU6XHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxuIDI2NjpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI2NzpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjY4Olx0XHRcdFx0fVxuIDI2OTpcdFx0XHRcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjcwOlx0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuIDI3MTpcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyNzI6XHRcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiAyNzM6XHRcdFx0XHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XG4gMjc0Olx0XG4gMjc1Olx0XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIDI3NjpcdFx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuIDI3NzpcdFxuIDI3ODpcdFx0XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcHZtdy1cdTAwM2VwbWQpO1xuIDI3OTpcdFxuIDI4MDpcdFx0XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuIDI4MTpcdFx0XHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4gMjgyOlx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyODM6XHRcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjg0Olx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyODU6XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjg2Olx0XHRcdFx0XHR9XG4gMjg3Olx0XHRcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4gMjg4Olx0XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjg5Olx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjkwOlx0XHRcdFx0fSBlbHNlIHtcbiAyOTE6XHRcdFx0XHRcdGlmICgocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19TWU5DKSBcdTAwMjZcdTAwMjZcbiAyOTI6XHRcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI5MzpcdFx0XHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiAyOTQ6XHRcdFx0XHRcdCAgICAocHZtdy1cdTAwM2Vucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikpXG4gMjk1Olx0XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjk2Olx0XG4gMjk3Olx0XHRcdFx0XHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xuIDI5ODpcdFx0XHRcdFx0Y29udGludWU7XG4gMjk5Olx0XHRcdFx0fVxuIDMwMDpcdFx0XHR9XG4gMzAxOlx0XHRcdGlmICghbWFwX3B0ZShwdm13LCBcdTAwMjZwbWRlLCBcdTAwMjZwdGwpKSB7XG4gMzAyOlx0XHRcdFx0aWYgKCFwdm13LVx1MDAzZXB0ZSlcbiAzMDM6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiAzMDQ6XHRcdFx0XHRnb3RvIG5leHRfcHRlO1xuIDMwNTpcdFx0XHR9XG4gMzA2Olx0dGhpc19wdGU6XG4gMzA3Olx0XHRcdGlmIChjaGVja19wdGUocHZtdywgMSkpXG4gMzA4Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMzA5Olx0bmV4dF9wdGU6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGV2aWNlLVByaXZhdGUgTWVtb3J5IGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIGFuZCBkb2luZyBpdHMgam9iLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW55IGRldmljZS1wcml2YXRlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aXRoaW4gaXRzIHNjb3BlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZmxhZ3MgdGhhdCBtaWdodCBiZSB0aWVkIHRvIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgLCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsaWtlbHkgY2FuZGlkYXRlIHRvIGluZGljYXRlIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgcmVnaW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgc2VhcmNoIHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpIHtcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4NC1cdFx0XHRcdHByZXNlbnQgPSB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTIzNj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ4LS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjQ5OiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjUwLSAqIHdyaXRhYmxlIGVudHJ5P1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1NS0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYxLS8qKlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjYyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2My0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY2LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjY3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDEtXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzQyOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0My1cdFx0cmV0dXJuIHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTg0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTg1LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NjpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4Ny19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjE4Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE5LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xuLS1cbm1tL2htbS5jPTIzNT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2htbS5jLTI2Ni1cdFx0ICovXG5tbS9obW0uYzoyNjc6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9obW0uYy0yNjgtXHRcdCAgICBwYWdlX3BnbWFwKHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpKS1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTI3MC1cdFx0XHRjcHVfZmxhZ3MgPSBITU1fUEZOX1ZBTElEO1xubW0vaG1tLmM6MjcxOlx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9obW0uYy0yNzItXHRcdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0yODQtXG5tbS9obW0uYzoyODU6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9obW0uYy0yODYtXHRcdFx0Z290byBmYXVsdDtcbi0tXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2htbS5jLTM0NS1cbm1tL2htbS5jOjM0NjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9obW0uYy0zNDctXHQgICAgc29mdGxlYWZfdG9fZm9saW8oZW50cnkpLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyID09XG4tLVxubW0vaG1tLmMtMzUzLVxubW0vaG1tLmM6MzU0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMzU1LVx0XHRcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xuLS1cbm1tL2htbS5jLTM3Mi1cdGlmIChyZXF1aXJlZF9mYXVsdCkge1xubW0vaG1tLmM6MzczOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMzc0LVx0XHRcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOD1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cdFx0c2V0X3BtZF9hdChzcmNfbW0sIGFkZHIsIHNyY19wbWQsIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODI5LVx0XHQvKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjU1NT1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTc1LVx0XHRcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XG5tbS9odWdlX21lbW9yeS5jOjI1NzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0yNTc3LVx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMjMtXG5tbS9odWdlX21lbW9yeS5jOjMxMjQ6XHRcdHdyaXRlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYy0zMTI1LVx0XHRhbm9uX2V4Y2x1c2l2ZSA9IFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Nj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDg5NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDg5NjpcdFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShvbGRfZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYy00ODk3LVx0XHRzb2Z0ZGlydHkgPSBwbWRfc3dwX3NvZnRfZGlydHkocG1kdmFsKTtcbi0tXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05OTAtXHRcdH1cbm1tL21lbW9yeS5jOjk5MTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy05OTItXHRcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDE1LVx0XHQgKi9cbm1tL21lbW9yeS5jOjEwMTY6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDE3LVx0XHQgICAgaXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTc0NC1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vbWVtb3J5LmM6MTc0NTpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jLTE3NDYtXHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi0tXG5tbS9tZW1vcnkuYz00NzQ3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ3NzMtXHRcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbm1tL21lbW9yeS5jOjQ3NzQ6XHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00Nzc1LVx0XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzAtXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcyLVx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc3LVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzg6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTE3OS1cdFx0XHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTUtXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpO1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyOTY6XHRcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTI5Ny1cdFx0XHRcdGdvdG8gbmV4dDtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNi1cdFx0XHRcdFx0TUlHUkFURV9QRk5fTUlHUkFURTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzI3Olx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9taWdyYXRlX2RldmljZS5jLTMyOC1cdFx0XHRcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzNS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyMzY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vbXByb3RlY3QuYy0yMzctXHRcdC8qXG4tLVxubW0vcGFnZV90YWJsZV9jaGVjay5jPTE4Mj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfY2FjaGVkX3dyaXRhYmxlKHNvZnRsZWFmX3QgZW50cnkpXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIHx8XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVx0XHRzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03Mi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI0LVx0XHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjU6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI2LVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE4MD1ib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzQtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzU6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc2LVx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3OS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI4MDpcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI4MS1cdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMC1cbm1tL3JtYXAuYzoyNjAxOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDItXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjAxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBBaCwgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBkaXNzZWN0IGl0LiBJJiMzOTtsbCBiZSBsb29raW5nIGF0IHRoZSBhcmd1bWVudHMsIHRoZSByZXR1cm4gdHlwZSwgYW5kLCBjcnVjaWFsbHksIHRoZSBsb2dpYyB3aXRoaW4uIEJhc2VkIG9uIHRoZSBuYW1lIGFsb25lLCBJJiMzOTttIGV4cGVjdGluZyBpdCB0byBkZXRlcm1pbmUgaWYgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSAmIzM0O3NvZnRsZWFmJiMzNDsgaXMgcHJpdmF0ZSB0byBhIHBhcnRpY3VsYXIgZGV2aWNlLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGludGVyZXN0aW5nLiBXaGF0IGV4YWN0bHkgY29uc3RpdHV0ZXMgYSAmIzM0O3NvZnRsZWFmJiMzNDs/IEFuZCB3aGF0IGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoaXMgJiMzNDtkZXZpY2UgcHJpdmFjeSYjMzQ7PyBMZXQmIzM5O3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIHdlIGNhbiBnbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRcbiAyNjE6XHQvKipcbiAyNjI6XHQgKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG4gMjYzOlx0ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuIDI2NDpcdCAqXG4gMjY1Olx0ICogUmV0dXJuczogdHJ1ZSBpZiB0aGUgbGVhZiBlbnRyeSBpcyBhIGRldmljZSBwcml2YXRlIGVudHJ5LCBvdGhlcndpc2UgZmFsc2UuXG4gMjY2Olx0ICovXG4gMjY3Olx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG4gMjY4Olx0e1xuIDI2OTpcdFx0c3dpdGNoIChzb2Z0bGVhZl90eXBlKGVudHJ5KSkge1xuIDI3MDpcdFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURTpcbiAyNzE6XHRcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcbiAyNzI6XHRcdFx0cmV0dXJuIHRydWU7XG4gMjczOlx0XHRkZWZhdWx0OlxuIDI3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjc1Olx0XHR9XG4gMjc2Olx0fVxuIDI3NzpcdFxuIDI3ODpcdC8qKlxuIDI3OTpcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc3NAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIEtleXdvcmQgSHVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9XUklURWAgb3IgcG90ZW50aWFsbHkgYSBtb3JlIGdlbmVyaWMgYERFVklDRV9QUklWQVRFYCBjb25maWd1cmF0aW9uIGlzIGRlZmluZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIHNlYXJjaCBmb3IgdGhvc2Ugc3BlY2lmaWMgc3RyaW5ncyBkaXJlY3RseSBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgdXN1YWxseSBlZmZlY3RpdmUgZmlyc3Qgc3RlcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3Igc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgZGVmaW5pdGlvbnMgb3IgcmVmZXJlbmNlcyB0byByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBsZWFkIHRvIGEgY29uZGl0aW9uYWwgc2V0dGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGVzIHJldmVhbCEgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIHB1cnBvc2UgYW5kIHNjb3BlIG9mIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFzIEkgZ28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNzQ9VGhlc2UgY2FuIGJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgd2l0aDo6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4MC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4MTogICAgcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4Mi0gICAgcGFnZW1hcC5yYW5nZS5zdGFydCA9IHJlcy1cdTAwM2VzdGFydDtcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMxMC0gICBgYE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU1gYCB3aWxsIG9ubHkgbWlncmF0ZSBzeXN0ZW0gbWVtb3J5IGFuZFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxMTogICBgYE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURWBgIHdpbGwgb25seSBtaWdyYXRlIHBhZ2VzIHJlc2lkaW5nIGluXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzEyLSAgIGRldmljZSBwcml2YXRlIG1lbW9yeS4gSWYgdGhlIGxhdHRlciBmbGFnIGlzIHNldCwgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzMS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7bmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMzI6ICAgIHBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMzLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTg6ICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEVgYCDlsIblj6rov4Hnp7vpqbvnlZnlnKjorr7lpIfnp4HmnInlhoXlrZjkuK3nmoTpobVcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU5LSAgIOmdouOAguWmguaenOWQjuiAheiiq+iuvue9ru+8jCBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCDlrZfmrrXooqvnlKjmnaXor4bliKvpqbHliqjmiYDmi6XmnInnmoTorr7lpIdcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01NDE9Y29uZmlnIFBQQ19VVlxuLS1cbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0My1cdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL0tjb25maWc6NTQ0Olx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuYXJjaC9wb3dlcnBjL0tjb25maWctNTQ1LVx0ZGVmYXVsdCBuXG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9Njg9Q09ORklHX1pPTkVfREVWSUNFPXlcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnOjY5OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy03MC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzMS1cdG1pZy5wZ21hcF9vd25lciA9IFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTMyOlx0bWlnLmZsYWdzID0gTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzMtXHRtaWcuZmF1bHRfcGFnZSA9IGZhdWx0X3BhZ2U7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE4Mi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE4MzpcdGt2bXBwY191dm1lbV9wZ21hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTg0LVx0a3ZtcHBjX3V2bWVtX3BnbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jPTY4Mz1zdGF0aWMgYm9vbCBpc19hbGxvd2VkX3JhbmdlKHU2NCBiYXNlX2FkZHIsIHU2NCBzaXplKVxuLS1cbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jLTY5Ny1cdFx0SU9SRVNfREVTQ19QRVJTSVNURU5UX01FTU9SWV9MRUdBQ1ksXG5kcml2ZXJzL2FjcGkvYXBlaS9laW5qLWNvcmUuYzo2OTg6XHRcdC8qIFRyZWF0IElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZIGFzIE1NSU8uICovXG5kcml2ZXJzL2FjcGkvYXBlaS9laW5qLWNvcmUuYy02OTktXHRcdElPUkVTX0RFU0NfUkVTRVJWRUQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oPTEwND1zdHJ1Y3QgYW1kZ3B1X2tmZF9kZXYge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaC0xMTMtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmg6MTE0Olx0LyogSE1NIHBhZ2UgbWlncmF0aW9uIE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBtYXBwaW5nXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgtMTE1LVx0ICogTXVzdCBiZSBsYXN0IC0tZW5kcyBpbiBhIGZsZXhpYmxlLWFycmF5IG1lbWJlci5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTE1PWNvbmZpZyBIU0FfQU1EX1NWTVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIEhNTS1iYXNlZCBzaGFyZWQgdmlydHVhbCBtZW1vcnkgbWFuYWdlclwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gSFNBX0FNRCBcdTAwMjZcdTAwMjYgREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMTgtXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzE1LVx0ZWxzZVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MTY6XHRcdG1pZ3JhdGUuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjU9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNTYtXHRcdHBnbWFwLVx1MDAzZXJhbmdlLmVuZCA9IHJlcy1cdTAwM2VlbmQ7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNTc6XHRcdHBnbWFwLVx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNTgtXHR9XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIEhNTSBkZXZpY2UgbWVtb3J5XFxuXCYjMzQ7KTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA3MDpcdFx0aWYgKHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDcxLVx0XHRcdGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGFkZXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlc3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE3PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXHRcdC5mbGFnc1x0XHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gfCBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjUzMDpcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFIHwgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5ELFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTMxLVx0fTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIwLVx0XHQucGdtYXBfb3duZXJcdD0gcGFnZV9wZ21hcChwYWdlKS1cdTAwM2Vvd25lcixcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XHRcdC5mbGFnc1x0XHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTIyLVx0XHRcdFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnPTk0PWNvbmZpZyBEUk1fTk9VVkVBVV9TVk1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXHRib29sIFwmIzM0OyhFWFBFUklNRU5UQUwpIEVuYWJsZSBTVk0gKFNoYXJlZCBWaXJ0dWFsIE1lbW9yeSkgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5NjpcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTctXHRkZXBlbmRzIG9uIERSTV9OT1VWRUFVXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0xOTUtXHRcdC5mYXVsdF9wYWdlXHQ9IHZtZi1cdTAwM2VwYWdlLFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MTk2Olx0XHQuZmxhZ3NcdFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUgfFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMTk3LVx0XHRcdFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQsXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMjAtXHRjaHVuay1cdTAwM2Vkcm0gPSBkcm07XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMjE6XHRjaHVuay1cdTAwM2VwYWdlbWFwLnR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMjItXHRjaHVuay1cdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnPTc5PWNvbmZpZyBEUk1fWEVfR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXHRkZWZhdWx0IHlcbmRyaXZlcnMvZ3B1L2RybS94ZS9LY29uZmlnOjg1Olx0c2VsZWN0IERFVklDRV9QUklWQVRFXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZy04Ni1cdHNlbGVjdCBEUk1fR1BVU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jPTE3Njk9c3RhdGljIHN0cnVjdCB4ZV9wYWdlbWFwICp4ZV9wYWdlbWFwX2NyZWF0ZShzdHJ1Y3QgeGVfZGV2aWNlICp4ZSwgc3RydWN0IHhlX3ZyYW1fcmVnaW9uICp2cilcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwNC1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODA1Olx0cGFnZW1hcC1cdTAwM2V0eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX3N2bS5jLTE4MDYtXHRwYWdlbWFwLVx1MDAzZXJhbmdlLnN0YXJ0ID0gcmVzLVx1MDAzZXN0YXJ0O1xuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC02LVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjc6I2lmbmRlZiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfX1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjg6I2RlZmluZSBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfX1xuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oLTktXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oPTI4PVNUT1JBR0VfQ0xBU1NfR1BfREVWSUNFX0MgaHJ0X2RhdGEgZ3BfZGV2aWNlX3JlZ19sb2FkKFxuLS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC0zNy1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaDozODojZW5kaWYgLyogX19HUF9ERVZJQ0VfUFJJVkFURV9IX0lOQ0xVREVEX18gKi9cbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L3RpbWVkX2N0cmxfcHJpdmF0ZS5oPTE2PVNUT1JBR0VfQ0xBU1NfVElNRURfQ1RSTF9DIHZvaWQgdGltZWRfY3RybF9yZWdfc3RvcmUoXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaC0yNS1cbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvdGltZWRfY3RybF9wcml2YXRlLmg6MjY6I2VuZGlmIC8qIF9fR1BfREVWSUNFX1BSSVZBVEVfSF9JTkNMVURFRF9fICovXG4tLVxuaW5jbHVkZS9saW51eC9obW0uaD0xND1zdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyO1xuLS1cbmluY2x1ZGUvbGludXgvaG1tLmgtMjEtICogICAgICAgICAgICAgICAgIGxlYXN0IHJlYWRhYmxlLiBJZiBkZXZfcHJpdmF0ZV9vd25lciBpcyAhTlVMTCB0aGVuIHRoaXMgY291bGRcbmluY2x1ZGUvbGludXgvaG1tLmg6MjI6ICogICAgICAgICAgICAgICAgIHBvaW50IGF0IGEgREVWSUNFX1BSSVZBVEUgcGFnZS5cbmluY2x1ZGUvbGludXgvaG1tLmgtMjMtICogSE1NX1BGTl9XUklURSAtIGlmIHRoZSBwYWdlIG1lbW9yeSBjYW4gYmUgd3JpdHRlbiB0byAocmVxdWlyZXMgSE1NX1BGTl9WQUxJRClcbi0tXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oPTEzNj1lbnVtIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTE0Mi1cdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZXHQ9IDUsXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oOjE0MzpcdElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZXHQ9IDYsXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oLTE0NC1cdElPUkVTX0RFU0NfUkVTRVJWRURcdFx0XHQ9IDcsXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTk9ZW51bSBzb2Z0bGVhZl90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNy1cdC8qIERldmljZSB0eXBlcy4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4Olx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRCxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5Olx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUsXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMC1cdFNPRlRMRUFGX0RFVklDRV9FWENMVVNJVkUsXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTYyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTYzOlx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjQtXHRjYXNlIFNXUF9ERVZJQ0VfUkVBRDpcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2NTpcdFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjYtXHRjYXNlIFNXUF9ERVZJQ0VfRVhDTFVTSVZFOlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTg6XHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTktfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjktXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzA6XHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcxOlx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjcyLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjE9c3RydWN0IHZtZW1fYWx0bWFwIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMzMtICpcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDozNDogKiBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMzUtICogRGV2aWNlIG1lbW9yeSB0aGF0IGlzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSBieSB0aGUgQ1BVOiBDUFUgY2FuIG5laXRoZXJcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Njg9ZW51bSBtZW1vcnlfdHlwZSB7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtNjktXHQvKiAwIGlzIHJlc2VydmVkIHRvIGNhdGNoIHVuaW5pdGlhbGl6ZWQgdHlwZSBmaWVsZHMgKi9cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo3MDpcdE1FTU9SWV9ERVZJQ0VfUFJJVkFURSA9IDEsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtNzEtXHRNRU1PUllfREVWSUNFX0NPSEVSRU5ULFxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNjY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE2OS1cdFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE3MDpcdFx0Zm9saW8tXHUwMDNlcGdtYXAtXHUwMDNldHlwZSA9PSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTcxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3NC17XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTc1Olx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcdTAwMjZcdTAwMjZcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzYtXHRcdGZvbGlvX2lzX2RldmljZV9wcml2YXRlKHBhZ2VfZm9saW8ocGFnZSkpO1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1MT1lbnVtIG1pZ3JhdGVfdm1hX2RpcmVjdGlvbiB7XG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTItXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNID0gMSBcdTAwM2NcdTAwM2MgMCxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE1MzpcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA9IDEgXHUwMDNjXHUwMDNjIDEsXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTQtXHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UID0gMSBcdTAwM2NcdTAwM2MgMixcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNzctXHQgKiBmb3IgbWlncmF0aW5nIG91dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIFRoZSBmbGFncyBhbHNvIG5lZWQgdG9cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE3ODpcdCAqIGJlIHNldCB0byBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUuXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNzktXHQgKiBUaGUgY2FsbGVyIHNob3VsZCBhbHdheXMgc2V0IHRoaXMgZmllbGQgd2hlbiB1c2luZyBtbXUgbm90aWZpZXJcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0zND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTc1LSAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NzY6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzctI2RlZmluZSBTV1BfREVWSUNFX05VTSAzXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dwX3RvX3JhZGl4X2VudHJ5KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTEzNC1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjEzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzYtc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE0Nj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTAtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNTE6I2Vsc2UgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTItc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE2Mj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNjYtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNjc6I2VuZGlmIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY4LVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTEzMTU9c3RhdGljIGludCBfX3JlcXVlc3RfcmVnaW9uX2xvY2tlZChzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgc3RydWN0IHJlc291cmNlICpwYXJlbnQsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMTM0MC1cdFx0aWYgKHBhcmVudCA9PSBcdTAwMjZpb21lbV9yZXNvdXJjZSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9yZXNvdXJjZS5jOjEzNDE6XHRcdCAgICBjb25mbGljdC1cdTAwM2VkZXNjID09IElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZKSB7XG5rZXJuZWwvcmVzb3VyY2UuYy0xMzQyLVx0XHRcdHByX3dhcm4oXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgJXMgJXBSIGNvbmZsaWN0cyB3aXRoICVwUlxcblwmIzM0Oyxcbi0tXG5rZXJuZWwvcmVzb3VyY2UuYz0yMTA3PXN0cnVjdCByZXNvdXJjZSAqZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMjExMy1cdFx0XHRcdCAgIGRldl9uYW1lKGRldiksXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTE0Olx0XHRcdFx0ICAgSU9SRVNfREVTQ19ERVZJQ0VfUFJJVkFURV9NRU1PUlksIGZsYWdzKTtcbmtlcm5lbC9yZXNvdXJjZS5jLTIxMTUtfVxuLS1cbmtlcm5lbC9yZXNvdXJjZS5jPTIxMTg9c3RydWN0IHJlc291cmNlICpyZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKmJhc2UsXG4tLVxua2VybmVsL3Jlc291cmNlLmMtMjEyMy1cdHJldHVybiBnZXRfZnJlZV9tZW1fcmVnaW9uKE5VTEwsIGJhc2UsIHNpemUsIEdGUl9ERUZBVUxUX0FMSUdOLCBuYW1lLFxua2VybmVsL3Jlc291cmNlLmM6MjEyNDpcdFx0XHRcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XG5rZXJuZWwvcmVzb3VyY2UuYy0yMTI1LX1cbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzM5PWNvbmZpZyBURVNUX0hNTVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNDEtXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzQyOlx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxubGliL0tjb25maWcuZGVidWctMzM0My1cdHNlbGVjdCBITU1fTUlSUk9SXG4tLVxubGliL3Rlc3RfaG1tLmM9MTQyPXN0YXRpYyBib29sIGRtaXJyb3JfaXNfcHJpdmF0ZV96b25lKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcbi0tXG5saWIvdGVzdF9obW0uYy0xNDQtXHRyZXR1cm4gKG1kZXZpY2UtXHUwMDNlem9uZV9kZXZpY2VfdHlwZSA9PVxubGliL3Rlc3RfaG1tLmM6MTQ1Olx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEUpO1xubGliL3Rlc3RfaG1tLmMtMTQ2LX1cbi0tXG5saWIvdGVzdF9obW0uYz0xNDk9ZG1pcnJvcl9zZWxlY3RfZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yKVxuLS1cbmxpYi90ZXN0X2htbS5jLTE1MS1cdHJldHVybiAoZG1pcnJvci1cdTAwM2VtZGV2aWNlLVx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cbmxpYi90ZXN0X2htbS5jOjE1MjpcdFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKSA/XG5saWIvdGVzdF9obW0uYzoxNTM6XHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA6XG5saWIvdGVzdF9obW0uYy0xNTQtXHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfQ09IRVJFTlQ7XG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNTczLVx0c3dpdGNoIChtZGV2aWNlLVx1MDAzZXpvbmVfZGV2aWNlX3R5cGUpIHtcbmxpYi90ZXN0X2htbS5jOjU3NDpcdGNhc2UgSE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFOlxubGliL3Rlc3RfaG1tLmMtNTc1LVx0XHRyZXMgPSByZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbihcdTAwMjZpb21lbV9yZXNvdXJjZSwgREVWTUVNX0NIVU5LX1NJWkUsXG4tLVxubGliL3Rlc3RfaG1tLmMtNTgwLVx0XHRkZXZtZW0tXHUwMDNlcGFnZW1hcC5yYW5nZS5lbmQgPSByZXMtXHUwMDNlZW5kO1xubGliL3Rlc3RfaG1tLmM6NTgxOlx0XHRkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xubGliL3Rlc3RfaG1tLmMtNTgyLVx0XHRicmVhaztcbi0tXG5saWIvdGVzdF9obW0uYy02ODAtXHRtdXRleF91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2VkZXZtZW1fbG9jayk7XG5saWIvdGVzdF9obW0uYzo2ODE6XHRpZiAocmVzIFx1MDAyNlx1MDAyNiBkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSlcbmxpYi90ZXN0X2htbS5jLTY4Mi1cdFx0cmVsZWFzZV9tZW1fcmVnaW9uKGRldm1lbS1cdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0LFxuLS1cbmxpYi90ZXN0X2htbS5jPTE0ODE9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTQ5Ny1cdFx0XHRtZW11bm1hcF9wYWdlcyhcdTAwMjZkZXZtZW0tXHUwMDNlcGFnZW1hcCk7XG5saWIvdGVzdF9obW0uYzoxNDk4Olx0XHRcdGlmIChkZXZtZW0tXHUwMDNlcGFnZW1hcC50eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSlcbmxpYi90ZXN0X2htbS5jLTE0OTktXHRcdFx0XHRyZWxlYXNlX21lbV9yZWdpb24oZGV2bWVtLVx1MDAzZXBhZ2VtYXAucmFuZ2Uuc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmM9MTgyMT1zdGF0aWMgaW50IF9faW5pdCBobW1fZG1pcnJvcl9pbml0KHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTgzMy1cdGRtaXJyb3JfZGV2aWNlc1tuZGV2aWNlcyYjNDM7JiM0MztdLnpvbmVfZGV2aWNlX3R5cGUgPVxubGliL3Rlc3RfaG1tLmM6MTgzNDpcdFx0XHRcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURTtcbmxpYi90ZXN0X2htbS5jLTE4MzUtXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMmIzQzOyYjNDM7XS56b25lX2RldmljZV90eXBlID1cbmxpYi90ZXN0X2htbS5jOjE4MzY6XHRcdFx0XHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XG5saWIvdGVzdF9obW0uYy0xODM3LVx0aWYgKHNwbV9hZGRyX2RldjAgXHUwMDI2XHUwMDI2IHNwbV9hZGRyX2RldjEpIHtcbi0tXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xubGliL3Rlc3RfaG1tX3VhcGkuaC03NS1cdC8qIDAgaXMgcmVzZXJ2ZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCB0eXBlIGZpZWxkcyAqL1xubGliL3Rlc3RfaG1tX3VhcGkuaDo3NjpcdEhNTV9ETUlSUk9SX01FTU9SWV9ERVZJQ0VfUFJJVkFURSA9IDEsXG5saWIvdGVzdF9obW1fdWFwaS5oLTc3LVx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVCxcbi0tXG5tbS9LY29uZmlnPTExODM9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMTk0LVx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbm1tL0tjb25maWc6MTE5NTpcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxubW0vS2NvbmZpZy0xMTk2LVxuLS1cbm1tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjEzLVxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjE1LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MDY9c3RhdGljIGludCBtZl9nZW5lcmljX2tpbGxfcHJvY3ModW5zaWduZWQgbG9uZyBsb25nIHBmbiwgaW50IGZsYWdzLFxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmMtMTczMC1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xubW0vbWVtb3J5LWZhaWx1cmUuYzoxNzMxOlx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5tbS9tZW1vcnktZmFpbHVyZS5jLTE3MzItXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tLVxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxuLS1cbm1tL21lbXJlbWFwLmMtOTctXHRcdFx0XHQgICBQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSk7XG5tbS9tZW1yZW1hcC5jOjk4Olx0aWYgKHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKSB7XG5tbS9tZW1yZW1hcC5jLTk5LVx0XHRfX3JlbW92ZV9wYWdlcyhQSFlTX1BGTihyYW5nZS1cdTAwM2VzdGFydCksXG4tLVxubW0vbWVtcmVtYXAuYz0xMTI9dm9pZCBtZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbm1tL21lbXJlbWFwLmMtMTE2LVx0cGVyY3B1X3JlZl9raWxsKFx1MDAyNnBnbWFwLVx1MDAzZXJlZik7XG5tbS9tZW1yZW1hcC5jOjExNzpcdGlmIChwZ21hcC1cdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcdTAwMjZcdTAwMjZcbm1tL21lbXJlbWFwLmMtMTE4LVx0ICAgIHBnbWFwLVx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTE0Ni17XG5tbS9tZW1yZW1hcC5jOjE0NzpcdGNvbnN0IGJvb2wgaXNfcHJpdmF0ZSA9IHBnbWFwLVx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xubW0vbWVtcmVtYXAuYy0xNDgtXHRzdHJ1Y3QgcmFuZ2UgKnJhbmdlID0gXHUwMDI2cGdtYXAtXHUwMDNlcmFuZ2VzW3JhbmdlX2lkXTtcbi0tXG5tbS9tZW1yZW1hcC5jLTI0NC1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBwZ21hcCk7XG5tbS9tZW1yZW1hcC5jOjI0NTpcdGlmIChwZ21hcC1cdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcdTAwMjZcdTAwMjZcbm1tL21lbXJlbWFwLmMtMjQ2LVx0ICAgIHBnbWFwLVx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcbi0tXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmMtMjgyLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG5tbS9tZW1yZW1hcC5jOjI4MzpcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxubW0vbWVtcmVtYXAuYzoyODQ6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpKSB7XG5tbS9tZW1yZW1hcC5jLTI4NS1cdFx0XHRXQVJOKDEsIFwmIzM0O0RldmljZSBwcml2YXRlIG1lbW9yeSBub3Qgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbi0tXG5tbS9tZW1yZW1hcC5jPTQxNj12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9tZW1yZW1hcC5jLTQ1MS1cdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xubW0vbWVtcmVtYXAuYzo0NTI6XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21lbXJlbWFwLmMtNDUzLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcyOlx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzMtXHRcdFx0KGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cdFx0XHRpZiAoIShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNlxubW0vbWlncmF0ZV9kZXZpY2UuYzozMDI6XHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTMwMy1cdFx0XHQgICAgcGdtYXAtXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cdTAwM2VwZ21hcF9vd25lcilcbi0tXG5tbS9tbV9pbml0LmM9MTAwND1zdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4tLVxubW0vbW1faW5pdC5jLTEwMzgtXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxubW0vbW1faW5pdC5jOjEwMzk6XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbm1tL21tX2luaXQuYy0xMDQwLVx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuLS1cbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI3NzYtXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG5tbS9ybWFwLmMtMjc3OC0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo1OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkyMgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIERldmljZS1Qcml2YXRlIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgY3J1Y2lhbCBjb25maWcgb3B0aW9uIGhlcmUsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSB0byBlbmFibGluZyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEhvd2V2ZXIsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGVzdGluZyB0aGlzLCBhbmQgaWYgSSB3YW50IHRvIGhhdmUgYSBjb250cm9sbGVkIHRlc3RpbmcgZW52aXJvbm1lbnQsIEkgcmVhbGl6ZSB0aGF0IGBDT05GSUdfVEVTVF9ITU1gIHdvdWxkIGJlIGluY3JlZGlibHkgdXNlZnVsLiBTcGVjaWZpY2FsbHksIHRoaXMgc2hvdWxkIHByb3ZpZGUgYSBkdW1teSBkZXZpY2UgdGhhdCBJIGNhbiB1c2UgdG8gcmVsaWFibHkgdGVzdCB0aGUgZGV2aWNlLXByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpZmljIGhhcmR3YXJlLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUgdG8gY29uZmlybSBob3cgYFRFU1RfSE1NYCBpcyBkZWZpbmVkIGFuZCB1c2VkLCB0byBiZSBjZXJ0YWluIGl0IGFsaWducyB3aXRoIG15IHRlc3QgcGxhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMzgtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM0MC1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI2MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCB0byBgcGFnZV92bWFfbWFwcGVkX3dhbGtgKioKCk9rYXksIHNvIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIGEgdHJpc3RhdGUsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgcGF0Y2ggdGFyZ2V0cyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGluIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIHdoaWNoIGlzIGEgY3JpdGljYWwgZnVuY3Rpb247IGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCB1c2VkIHRvIHRyYXZlcnNlIHRoZSBwYWdlIHRhYmxlcyBmb3IgYSBnaXZlbiBwYWdlL2ZvbGlvIGFuZCBWTUEuIFRoaXMgaXMgY29yZSBzdHVmZi4KClRoZSBjb3JlIG9mIHRoaXMgbW9kaWZpY2F0aW9uIGFwcGVhcnMgdG8gaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBzcGVjaWZpY2FsbHksIHRoZSBjYXNlIHdoZXJlIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIGlzIHRydWUsIGJ1dCBgIXBtZF9wcmVzZW50KHBtZGUpYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBub3cgY2hlY2tpbmcgZm9yIGBQVk1XX01JR1JBVElPTmAgaW4gYHB2bXctJmd0O2ZsYWdzYCBhbmQgdGhlbiBjYWxsaW5nIGBjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdylgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZC4gRGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBzeW1ib2wuCgpXYWl0IGEgc2Vjb25kLi4uIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSAqaG90LXBhdGgqIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIHVzZWQgY29uc3RhbnRseS4gR2l2ZW4gaXQmIzM5O3MgYSBob3QgcGF0aCwgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2Ugc3RhbmRwb2ludC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY291bGQgdHJpZ2dlciB0aGlzIGV4YWN0IHBhdGgsIG1heWJlIHRoaXMgZml4IHdpbGwgaW1wcm92ZSBvdGhlciBmdW5jdGlvbnMgYW5kIG5vdCBqdXN0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuCgpEZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIHRoaXMgcGFydGljdWxhciBjb25kaXRpb24gb2Z0ZW4gcmVsYXRlIHRvIEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCkgb3IgbWlncmF0aW9uIHNjZW5hcmlvcy4gTGV0IG1lIHRyYWNlIGJhY2sgdGhlIGNhbGxzIHRvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQgd2hlcmUgdGhpcyBpcyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX3ZtYV9tYXBwZWRfd2FsayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODY1LVx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc2LSNkZWZpbmUgREVGSU5FX0ZPTElPX1ZNQV9XQUxLKG5hbWUsIF9mb2xpbywgX3ZtYSwgX2FkZHJlc3MsIF9mbGFncylcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzgtXHRcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg4Ny17XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODk2OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQgLSBSZXN0YXJ0IHRoZSBwYWdlIHRhYmxlIHdhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MTk6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMxNz1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzIyOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cdFx0c3RydWN0IHBhZ2UgKm5ldyk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cdFx0c3RydWN0IHBhZ2UgKm5ldylcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTU5PXN0YXRpYyBib29sIGRhbW9uX2ZvbGlvX21rb2xkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTY0Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTY1LVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMS1cdCphY2Nlc3NlZCA9IGZhbHNlO1xubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI2LVx0XHRpZiAoKmFjY2Vzc2VkKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjI3Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVx0XHRcdGJyZWFrO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY1LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDkzOS1cbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XG4tLVxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTEyNTctICovXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xuLS1cbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMTI5Ni1cbm1tL2tzbS5jOjEyOTc6XHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKVxubW0va3NtLmMtMTI5OC1cdFx0Z290byBvdXRfbW47XG4tLVxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxubW0va3NtLmM6MTM1OTpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9rc20uYy0xMzYwLW91dF9tbjpcbi0tXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vbWlncmF0ZS5jLTI5Ny1cbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vbWlncmF0ZS5jLTI5OS1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXG4tLVxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0zNTEtXG5tbS9taWdyYXRlLmM6MzUyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9taWdyYXRlLmMtMzUzLVx0XHRybWFwX3Qgcm1hcF9mbGFncyA9IFJNQVBfTk9ORTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcdFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cdFx0XHQucHRsID0gcHRsLFxuLS1cbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lkbGUuYy01OC1cbm1tL3BhZ2VfaWRsZS5jOjU5Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9wYWdlX2lkbGUuYy02MC1cdFx0YWRkciA9IHB2bXcuYWRkcmVzcztcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA6c3RhdGljIGlubGluZSBib29sIG5vdF9mb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUocHZtdyk7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3LVx0XHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cdTAwM2VwdGVcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjg4OiAqIEBwdm13OiBwYWdlX3ZtYV9tYXBwZWRfd2FsayBzdHJ1Y3QsIGluY2x1ZGVzIGEgcGFpciBwdGUgYW5kIHBmbiByYW5nZVxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTEtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5KlxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDgte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzOS0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTQwOnN0YXRpYyBib29sIGNoZWNrX3BtZCh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQxLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDgtXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDk6c3RhdGljIHZvaWQgc3RlcF9mb3J3YXJkKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBzaXplKVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUwLXtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTYtLyoqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTc6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsgLSBjaGVjayBpZiBAcHZtdy1cdTAwM2VwZm4gaXMgbWFwcGVkIGluIEBwdm13LVx1MDAzZXZtYSBhdFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU4LSAqIEBwdm13LVx1MDAzZWFkZHJlc3Ncbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1OTogKiBAcHZtdzogcG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuIHBhZ2UsIHZtYSwgYWRkcmVzcyBhbmQgZmxhZ3Ncbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2MC0gKiBtdXN0IGJlIHNldC4gcG1kLCBwdGUgYW5kIHB0bCBtdXN0IGJlIE5VTEwuXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY2LSAqIElmIEBwdm13LVx1MDAzZXBtZCBpcyBzZXQgYnV0IEBwdm13LVx1MDAzZXB0ZSBpcyBub3QsIHlvdSBoYXZlIGZvdW5kIFBNRC1tYXBwZWQgcGFnZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY3OiAqICh1c3VhbGx5IFRIUCkuIEZvciBQVEUtbWFwcGVkIFRIUCwgeW91IHNob3VsZCBydW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBpblxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY4LSAqIGEgbG9vcCB0byBmaW5kIGFsbCBQVEVzIHRoYXQgbWFwIHRoZSBUSFAuXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTc2LSAqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzc6ICogSWYgeW91IG5lZWQgdG8gc3RvcCB0aGUgd2FsayBiZWZvcmUgcGFnZV92bWFfbWFwcGVkX3dhbGsoKSByZXR1cm5lZCBmYWxzZSxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3ODogKiB1c2UgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgpLiBJdCB3aWxsIGRvIHRoZSBob3VzZWtlZXBpbmcuXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzktICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODA6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xODEte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTM1OD11bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM2MjpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMzYzLVx0XHQucGZuID0gcGFnZV90b19wZm4ocGFnZSksXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzcxLVx0XHRnb3RvIG91dDtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM3MjpcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzMtXHRcdHJldHVybiAtRUZBVUxUO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6Mzc0Olx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3NS1vdXQ6XG4tLVxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy05MjQtXG5tbS9ybWFwLmM6OTI1Olx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtOTI2LVx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL3JtYXAuYy05NDgtXHRcdFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xubW0vcm1hcC5jOjk0OTpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTk1MC1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuLS1cbm1tL3JtYXAuYy05NjMtXHRcdFx0cHJhLVx1MDAzZXJlZmVyZW5jZWQgPSAtMTtcbm1tL3JtYXAuYzo5NjQ6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy05NjUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3JtYXAuYy0xMDAyLVx0XHRpZiAocHRlcyA9PSBwdm13Lm5yX3BhZ2VzKSB7XG5tbS9ybWFwLmM6MTAwMzpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTEwMDQtXHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jPTEwNjQ9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi0tXG5tbS9ybWFwLmMtMTEwMi1cbm1tL3JtYXAuYzoxMTAzOnN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxubW0vcm1hcC5jLTExMDQte1xuLS1cbm1tL3JtYXAuYy0xMTE3LVxubW0vcm1hcC5jOjExMTg6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsocHZtdykpIHtcbm1tL3JtYXAuYy0xMTE5LVx0XHRpbnQgcmV0ID0gMDtcbi0tXG5tbS9ybWFwLmM9MTIzMT1zdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtMTIzNC1cdHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICopYXJnO1xubW0vcm1hcC5jOjEyMzU6XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL3JtYXAuYy0xMjM2LVx0XHQucGZuXHRcdD0gc3RhdGUtXHUwMDNlcGZuLFxuLS1cbm1tL3JtYXAuYz0xMzEwPWludCBwZm5fbWtjbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywgcGdvZmZfdCBwZ29mZixcbi0tXG5tbS9ybWFwLmMtMTMxMi17XG5tbS9ybWFwLmM6MTMxMzpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcm1hcC5jLTEzMTQtXHRcdC5wZm5cdFx0PSBwZm4sXG4tLVxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9ybWFwLmM6MTk0NTpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9ybWFwLmMtMTk0Ni1cdFx0XHRlbnVtIHR0dV9mbGFncyBmbGFncywgcHRlX3QgcHRlKVxuLS1cbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIwMzEtXG5tbS9ybWFwLmM6MjAzMjpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTIwMzMtXHRcdG5yX3BhZ2VzID0gMTtcbi0tXG5tbS9ybWFwLmMtMjA4OS1cdFx0XHRcdGZsYWdzIFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcbm1tL3JtYXAuYzoyMDkwOlx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yMDkxLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vcm1hcC5jLTIzNjMtd2Fsa19kb25lOlxubW0vcm1hcC5jOjIzNjQ6XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjM2NS1cdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yNDYwLVxubW0vcm1hcC5jOjI0NjE6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy0yNDYyLVx0XHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cbi0tXG5tbS9ybWFwLmMtMjQ3Ni1cdFx0XHRcdGZsYWdzIFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcbm1tL3JtYXAuYzoyNDc3Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNDc4LVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vcm1hcC5jLTI0OTMtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNDk0Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNDk1LVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI1NDktXHRcdFx0XHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkge1xubW0vcm1hcC5jOjI1NTA6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjU1MS1cdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG4tLVxubW0vcm1hcC5jLTI1NjMtXHRcdFx0XHRcdCAqL1xubW0vcm1hcC5jOjI1NjQ6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjU2NS1cdFx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NTAtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjUxOlx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjUyLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NjEtXHRcdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2NjI6XHRcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMjY2My1cdFx0XHRcdFx0YnJlYWs7XG4tLVxubW0vcm1hcC5jLTI2NjgtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbm1tL3JtYXAuYzoyNjY5Olx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjcwLVx0XHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NDEzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTQxODAtICovXG5tbS92bXNjYW4uYzo0MTgxOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbm1tL3Ztc2Nhbi5jLTQxODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjMwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbnRleHQgb2YgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmb3IgRGV2aWNlLVByaXZhdGUgTWVtb3J5KioKCk9rYXksIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgdXNlZCBieSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgcGF0aHMuIEkgc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGFuZCBhIGZldyBvdGhlcnMgbGlrZSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGFuZCBgcGFnZV92bWFfbWtjbGVhbl9vbmVgLiBHaXZlbiB0aGUgZW1waGFzaXMgb24gZGV2aWNlLXByaXZhdGUgbWVtb3J5IGFuZCBtaWdyYXRpb24gaW4gdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhleSBzZWVtIGxpa2UgdGhlIG1vc3QgZGlyZWN0IGxpbmtzLgoKSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSDigJMgY291bGQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIG9yIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgYmUgcmVsZXZhbnQ/IFRoZXkgZG9uJiMzOTt0ICpkaXJlY3RseSogY2FsbCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBvciBzbyBJIGluaXRpYWxseSB0aG91Z2h0LiBIYW5nIG9uIGEgbW9tZW50Li4uIEkgc2VlIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgICpkb2VzKiBhY3R1YWxseSB1c2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBhbiBpbXBvcnRhbnQgZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgb25lLgoKQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBmaW5kIHdoZXJlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpcyBkZWZpbmVkIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4gSSYjMzk7bGwgZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1c2FnZSBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0fSBlbHNlIHtcbiAxODE6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDE4NjpcdFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XG4gMTg3Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMTg4Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTg5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAxOTM6XHRcdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gMTk0Olx0XHRcdChJU19BTElHTkVEKHN0YXJ0LCBIUEFHRV9QTURfU0laRSkgXHUwMDI2XHUwMDI2XG4gMTk1Olx0XHRcdCBJU19BTElHTkVEKGVuZCwgSFBBR0VfUE1EX1NJWkUpKSkge1xuIDE5NjpcdFxuIDE5NzpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbiAxOTg6XHRcdFx0XHQucHRsID0gcHRsLFxuIDE5OTpcdFx0XHRcdC5hZGRyZXNzID0gc3RhcnQsXG4gMjAwOlx0XHRcdFx0LnBtZCA9IHBtZHAsXG4gMjAxOlx0XHRcdFx0LnZtYSA9IHdhbGstXHUwMDNldm1hLFxuIDIwMjpcdFx0XHR9O1xuIDIwMzpcdFxuIDIwNDpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gbWlncmF0ZV9wZm4ocGZuKSB8IHdyaXRlXG4gMjA3Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXG4gMjA4Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9DT01QT1VORDtcbiAyMDk6XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXMmIzQzOyYjNDM7XSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzIGEgZmVsbG93IGV4cGVydDoKCioqUmVmaW5pbmcgTXkgVW5kZXJzdGFuZGluZyBvZiBIdWdlIFBNRCBNaWdyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgYWJvdXQgdG8ganVtcCB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCB3YXMgZGlyZWN0bHkgaW52b2x2ZWQgaW4gd2Fsa2luZyB0aGUgcGFnZSBtYXBwaW5ncyB1c2luZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBCdXQgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQsIGlzIGl0PyBMb29raW5nIGNsb3Nlci4uLiBpdCBhY3R1YWxseSBkb2VzbiYjMzk7dCAqY2FsbCogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYuIEluc3RlYWQsIGl0IHNlZW1zIGxpa2UgdGhlIGZ1bmN0aW9uIGlzIHByaW1hcmlseSByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBwdm13YCBhbmQgdGhlbiBwYXNzaW5nIGl0IGFsb25nIHRvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAsIHJpZ2h0PyBTbyBpdCYjMzk7cyBtb3JlIGFib3V0IHNldHRpbmcgdXAgdGhlIGNvbnRleHQgZm9yIHRoZSBwYWdlIHdhbGsgdGhhdCAqd2lsbCogaGFwcGVuLiBUaGUga2V5IGlzIGluIHRoYXQgYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCBjYWxsLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyB0cmF2ZXJzYWwgbG9naWMgaXMgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgbGV2ZXJhZ2VkLCB1c2luZyB0aGUgYHB2bXdgIHN0cnVjdHVyZSB0aGF0IHdhcyBzZXQgdXAuIEludGVyZXN0aW5nOyBpdCYjMzk7cyBhIGNyaXRpY2FsIGRpc3RpbmN0aW9uIHRvIGtlZXAgaW4gbWluZCBmb3IgdHJhY2luZyB0aGlzIGNvZGUmIzM5O3MgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgYHB2bXdgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMTA6XHRcdFx0bWlncmF0ZS1cdTAwM2VjcGFnZXMmIzQzOyYjNDM7O1xuIDIxMTpcdFx0XHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBmb2xpb19wYWdlKGZvbGlvLCAwKSk7XG4gMjEyOlx0XHRcdGlmIChyZXQpIHtcbiAyMTM6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZW5wYWdlcy0tO1xuIDIxNDpcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzLS07XG4gMjE1Olx0XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gMDtcbiAyMTY6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWRzdFttaWdyYXRlLVx1MDAzZW5wYWdlc10gPSAwO1xuIDIxNzpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcdFx0bWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0ICYjNDM7IFBBR0VfU0laRSwgZW5kLCB3YWxrKTtcbiAyMjA6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAyMjE6XHRcdFx0cmV0dXJuIDA7XG4gMjIyOlx0XHR9XG4gMjIzOlx0XG4gMjI0Olx0ZmFsbGJhY2s6XG4gMjI1Olx0XHRzcGluX3VubG9jayhwdGwpO1xuIDIyNjpcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSlcbiAyMjc6XHRcdFx0Z290byBkb25lO1xuIDIyODpcdFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xuIDIyOTpcdFx0aWYgKGZhdWx0X2ZvbGlvICE9IGZvbGlvKVxuIDIzMDpcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDIzMTpcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiAyMzI6XHRcdGlmIChyZXQpXG4gMjMzOlx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMjM0Olx0XHRpZiAocG1kX25vbmUocG1kcF9nZXRfbG9ja2xlc3MocG1kcCkpKVxuIDIzNTpcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcbiAyMzY6XHRcbiAyMzc6XHRkb25lOlxuIDIzODpcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gMjM5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDEyMAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiBEZXZpY2UtUHJpdmF0ZSBQTUQgRW50cmllcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW1wYWN0LiBUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9uIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSAqY2FsbGluZyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgbGlzdCBpczogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2Vfdm1hX21rY2xlYW5fb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGFuZCBgd3JpdGVfcHJvdGVjdF9wYWdlYCByZWxhdGVkIHRvIEtTTS4KClRoZSBwYXRjaCBtZW50aW9ucyBkZWFsaW5nIHdpdGggZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMuIERldmljZS1wcml2YXRlIG1lbW9yeSBpcyAqdHlwaWNhbGx5KiBhc3NvY2lhdGVkIHdpdGggbWlncmF0aW9ucy4gU28sIGB0cnlfdG9fbWlncmF0ZV9vbmVgIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAgc3RhbmQgb3V0IGFzIHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gZm9jdXMgb24gaGVyZS4KCkhvd2V2ZXIsIEkgcmVtZW1iZXIgdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYWxzbyBoYW5kbGVzIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBhbHRob3VnaCBpdCBkb2VzbiYjMzk7dCBkaXJlY3RseSBjYWxsIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgICp3aXRoaW4qIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIGNvbm5lY3Rpb24uCgpOb3csIHdoZW4gd291bGQgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBhY3R1YWxseSBlbmNvdW50ZXIgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnk/IFRoZSBhbnN3ZXIgaXMgd2hlbiB0aGUgUE1EICppdHNlbGYqIGlzIGEgZGV2aWNlLXByaXZhdGUgZW50cnkuIFRoaXMgc2l0dWF0aW9uIGFyaXNlcyB3aGVuIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGlzIG1pZ3JhdGVkIHRvIGRldmljZS1wcml2YXRlIG1lbW9yeS4KClNvLCBob3cgZG9lcyB0aGlzIGhhcHBlbj8gYHRyeV90b19taWdyYXRlX29uZWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJIGNhbiBzZWUgdGhlc2UgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGludmVzdGlnYXRlLgoKQWx0aG91Z2ggYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUgd29ya2hvcnNlIGZ1bmN0aW9uLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgaG90LXBhdGggZnVuY3Rpb24gYW5kIEkgbmVlZCB0byBiZSBjYXJlZnVsLiBJcyBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhIGhvdCBwYXRoIGZ1bmN0aW9uPyBObywgYmVjYXVzZSBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uLiBJcyBgdHJ5X3RvX3VubWFwX29uZWA/IEl0JiMzOTtzIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltIGFuZCB1bm1hcHBpbmcsIHNvIGl0IGlzIGEgaG90IHBhdGggYnV0IG5vdCBhcyBob3QgYXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4KClRvIGJlIHRob3JvdWdoLCBsZXQmIzM5O3MgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYW5kIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYXMgdGhleSBtYXkgYmUgZW50cnkgcG9pbnRzIGZvciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgdG8gbG9vayBhdCB0aGUgc2V0dXAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfdm1hX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yNjQ9dXNlIGhhcmR3YXJlIERNQSBvciBkZXZpY2Ugc3BlY2lmaWMgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgdG8gbWlncmF0ZSBkYXRhLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yNjYtZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGRyaXZlcnMgZWFzaWVyIHRvIHdyaXRlIGFuZCB0byBjZW50cmFsaXplIGNvbW1vblxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAxLSAgIFRoZSBkZXZpY2UgZHJpdmVyIGhhcyB0byBwYXNzIGEgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzAzLSAgIGJlIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWlncmF0aW9uLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNC1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDYtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA3LSAgIFRoZSBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemVzIHRoZSBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIGZpZWxkcyBhbmQgcGFzc2VzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXHUwMDNlZmxhZ3NgYCBmaWVsZCBpcyB1c2VkIHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA5LSAgIGZpbHRlciB3aGljaCBzb3VyY2UgcGFnZXMgc2hvdWxkIGJlIG1pZ3JhdGVkLiBGb3IgZXhhbXBsZSwgc2V0dGluZ1xuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTctXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzE4OiAgIE9uZSBvZiB0aGUgZmlyc3Qgc3RlcHMgbWlncmF0ZV92bWFfc2V0dXAoKSBkb2VzIGlzIHRvIGludmFsaWRhdGUgb3RoZXJcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJiMzOTtzIE1NVXMgd2l0aCB0aGUgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCgoKWBgIGFuZFxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMjQtICAgYGBNTVVfTk9USUZZX01JR1JBVEVgYCBhbmQgdGhlIGBgb3duZXJgYCBmaWVsZCBzZXQgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMjU6ICAgdGhlIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI2LSAgIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBza2lwIHRoZSBpbnZhbGlkYXRpb24gY2FsbGJhY2sgYW5kIG9ubHlcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzM4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCkgYWxzbyBjbGVhcnMgdGhlIGBgYXJncy1cdTAwM2Vkc3RgYCBhcnJheS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMTI9SE1NIOWIh+aNouWIsOebtOaOpeS9v+eUqCBzdHJ1Y3QgcGFnZSDnlKjkuo7orr7lpIflhoXlrZjvvIzov5nkvb/lvpflpKflpJrmlbDlhoXmoLjku6PnoIHot6/lvoTkuI3nn6XpgZPlt67lvILjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIxOC3nlLHkuo4gQ1BVIOaXoOazleebtOaOpeiuv+mXruiuvuWkh+WGheWtmO+8jOWboOatpOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+S9v+eUqOehrOS7tiBETUEg5oiW6K6+5aSH54m55a6a55qE5Yqg6L29L+WtmFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyMTk65YKo5oyH5Luk5p2l6L+B56e75pWw5o2u44CCbWlncmF0ZV92bWFfc2V0dXAoKeOAgW1pZ3JhdGVfdm1hX3BhZ2VzKCkg5ZKMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MDogICDorr7lpIfpqbHliqjnqIvluo/lv4XpobvlsIYgYGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3RgYCDkvKDpgJLnu5ltaWdyYXRlX3ZtYV9zZXR1cCgp77yMXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjUyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTM6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTUtICAg6K6+5aSH6amx5Yqo5Yid5aeL5YyW5LqGIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAg55qE5a2X5q6177yM5bm25bCG6K+l5oyH6ZKI5Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1NjogICBtaWdyYXRlX3ZtYV9zZXR1cCgp44CCYGBhcmdzLVx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2MzogICBtaWdyYXRlX3ZtYV9zZXR1cCgp5omA5YGa55qE56ys5LiA5q2l5piv55SoIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2NC0gICDlkowgYGBtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoKWBgIOiwg+eUqOadpemBjeWOhuiuvuWkh+WRqOWbtOeahOmhteihqO+8jOS9v1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY3LSAgIOWFtiBgYGV2ZW50YGAg5a2X5q616K6+572u5Li6TU1VX05PVElGWV9NSUdSQVRF77yMIGBgb3duZXJgYCDlrZfmrrXorr7nva7kuLrkvKDpgJLnu5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjY4OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnnmoQgYGBhcmdzLVx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2OS0gICDmlYjljJblm57osIPvvIzlj6rml6DmlYjljJbpgqPkupvlrp7pmYXmraPlnKjov4Hnp7vnmoTorr7lpIfnp4HmnIlNTVXmmKDlsITjgILov5nkuIDngrnlsIblnKjkuIvkuIDoioLor6bnu4bop6Pph4rjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6Mjc2OiAgIOeoi+S4reWPlua2iOaYoOWwhO+8jOW5tuaPkuWFpeS4gOS4queJueauiueahOi/geenu1BUReadpeS7o+abv+WOn+adpeeahFBUReOAgiBtaWdyYXRlX3ZtYV9zZXR1cCgpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3Ny0gICDov5jmuIXpmaTkuoYgYGBhcmdzLVx1MDAzZWRzdGBgIOaVsOe7hOOAglxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTM4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo1Mzk6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01NDAtXHRpZiAocmV0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NzQwPXN0YXRpYyBpbnQga3ZtcHBjX3N2bV9wYWdlX2luKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzo3NjE6XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWcpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy03NjItXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MzkzPXN2bV9taWdyYXRlX3ZtYV90b192cmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMwLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo0MzE6XHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMi1cdGlmIChyKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz02OTI9c3ZtX21pZ3JhdGVfdm1hX3RvX3JhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczMy1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NzM0Olx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzUtXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU4Mi0gKiBhbmQgcmVzdG9yZSB3b3JrOlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM1ODM6ICogMS4gbWlncmF0ZV92bWFfc2V0dXAgaW52YWxpZGF0ZSBwYWdlcywgTU1VIG5vdGlmaWVyIGNhbGxiYWNrIHN2bV9yYW5nZV9ldmljdFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9NTE3PWludCBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODQtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzo1ODU6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTU4Ni1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM9MTExMz1zdGF0aWMgaW50IF9fZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2YXMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2Ni1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExNjc6XHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjgtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTE4Mz1zdGF0aWMgdm1fZmF1bHRfdCBub3V2ZWF1X2RtZW1fbWlncmF0ZV90b19yYW0oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM1LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XHRpZiAobWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncykgXHUwMDNjIDApXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0yMzctXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9ODIyPW5vdXZlYXVfZG1lbV9taWdyYXRlX3ZtYShzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy04NzEtXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzo4NzI6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1OD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cdCAqIFRoZSBzcmMgYXJyYXkgbXVzdCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNhbGxlciBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTY1Olx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjYtXHQgKiBtaWdyYXRlX3ZtYV9wYWdlcygpIHJldHVybnMuXG4tLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTkyLVxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTkzOmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpO1xuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xMTIwPXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMTY0LVxubGliL3Rlc3RfaG1tLmM6MTE2NTpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMTY2LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTExODk9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEyNDItXHRcdFx0XHRNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQ7XG5saWIvdGVzdF9obW0uYzoxMjQzOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmxpYi90ZXN0X2htbS5jLTEyNDQtXHRcdGlmIChyZXQpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTY1Mz1zdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5saWIvdGVzdF9obW0uYy0xNzA1LVx0LypcbmxpYi90ZXN0X2htbS5jOjE3MDY6XHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcbmxpYi90ZXN0X2htbS5jLTE3MDctXHQgKiB0ZXN0IGlzIHdyb25nIGFzIGl0IGp1c3QgdGVzdHMgc29tZSBzdGF0aWMgVk1BIHByb3BlcnRpZXMuXG5saWIvdGVzdF9obW0uYy0xNzA4LVx0ICovXG5saWIvdGVzdF9obW0uYzoxNzA5Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpKSB7XG5saWIvdGVzdF9obW0uYy0xNzEwLVx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY1LS8qKlxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjctICogQGFyZ3M6IGNvbnRhaW5zIHRoZSB2bWEsIHN0YXJ0LCBhbmQgcGZucyBhcnJheXMgZm9yIHRoZSBtaWdyYXRpb25cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzI5OmludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG5tbS9taWdyYXRlX2RldmljZS5jLTczMC17XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NjgtfVxubW0vbWlncmF0ZV9kZXZpY2UuYzo3Njk6RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV9kZXZpY2VfcGZuX2xvY2sodW5zaWduZWQgbG9uZyBwZm4pXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc2LSAqXG5tbS9taWdyYXRlX2RldmljZS5jOjEzNzc6ICogbWlncmF0ZV92bWFfc2V0dXAoKSBpcyBzaW1pbGFyIGluIGNvbmNlcHQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKSBleGNlcHQgdGhhdFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4NC0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM4Ni0gKiBtaWdyYXRpbmcgcGFnZXMgdGhhdCBhcmVuJiMzOTt0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xNDU1PWludCBtaWdyYXRlX2RldmljZV9jb2hlcmVudF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2Ny1cdCAqIHRoZSBzb3VyY2UgZm9saW8uIFNvIGNhbGwgbWlncmF0ZV92bWFfdW5tYXAoKSBkaXJlY3RseSB0byB1bm1hcCB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcdCAqIGZvbGlvIGFzIG1pZ3JhdGVfdm1hX3NldHVwKCkgd2lsbCBmYWlsIGlmIGFyZ3Mudm1hID09IE5VTEwuXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjktXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxNjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1pZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGRldmljZS1wcml2YXRlIG1lbW9yeSwgYW5kIGl0IHNlZW1zIGxpa2UgYG1pZ3JhdGVfdm1hX3NldHVwYCBpcyBhIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyBleHBvcnRlZCBhbmQgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMgYW5kIGV2ZW4gYHRlc3RfaG1tYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBkZWx2ZSBpbnRvLiBUaGUgY29yZSBvZiB0aGlzIGlzIG1pZ3JhdGlvbjsgZmluZGluZyBhIGdvb2QgZW50cnkgcG9pbnQuCgpJIGFsc28gc2VlIHRoYXQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpbiBgbGliL3Rlc3RfaG1tLmNgIGNvdWxkIGJlIGFub3RoZXIgY3JpdGljYWwgcGllY2UsIHNpbmNlIGl0IHNlZW1zIHRvIHRyaWdnZXIgbWlncmF0aW9uIHRvIFJBTSwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLiBIbW0sIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMgYSBmYXVsdCBoYW5kbGVyLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBsaWIvdGVzdF9obW0uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGF0IGZ1bmN0aW9uIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY1MDpcdFx0c3Bpbl91bmxvY2soXHUwMDI2bWRldmljZS1cdTAwM2Vsb2NrKTtcbjE2NTE6XHR9XG4xNjUyOlx0XG4xNjUzOlx0c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4xNjU0Olx0e1xuMTY1NTpcdFx0c3RydWN0IG1pZ3JhdGVfdm1hIGFyZ3MgPSB7IDAgfTtcbjE2NTY6XHRcdHN0cnVjdCBwYWdlICpycGFnZTtcbjE2NTc6XHRcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuMTY1ODpcdFx0dm1fZmF1bHRfdCByZXQgPSAwO1xuMTY1OTpcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBucjtcbjE2NjA6XHRcbjE2NjE6XHRcdC8qXG4xNjYyOlx0XHQgKiBOb3JtYWxseSwgYSBkZXZpY2Ugd291bGQgdXNlIHRoZSBwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgdG8gcG9pbnQgdG9cbjE2NjM6XHRcdCAqIHRoZSBtaXJyb3IgYnV0IGhlcmUgd2UgdXNlIGl0IHRvIGhvbGQgdGhlIHBhZ2UgZm9yIHRoZSBzaW11bGF0ZWRcbjE2NjQ6XHRcdCAqIGRldmljZSBtZW1vcnkgYW5kIHRoYXQgcGFnZSBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgbWlycm9yLlxuMTY2NTpcdFx0ICovXG4xNjY2Olx0XHRycGFnZSA9IGZvbGlvX3pvbmVfZGV2aWNlX2RhdGEocGFnZV9mb2xpbyh2bWYtXHUwMDNlcGFnZSkpO1xuMTY2NzpcdFx0ZG1pcnJvciA9IHJwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGE7XG4xNjY4Olx0XG4xNjY5Olx0XHQvKiBGSVhNRSBkZW1vbnN0cmF0ZSBob3cgd2UgY2FuIGFkanVzdCBtaWdyYXRlIHJhbmdlICovXG4xNjcwOlx0XHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpKTtcbjE2NzE6XHRcdG5yID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG4xNjcyOlx0XG4xNjczOlx0XHQvKlxuMTY3NDpcdFx0ICogV2hlbiBmb2xpb3MgYXJlIHBhcnRpYWxseSBtYXBwZWQsIHdlIGNhbiYjMzk7dCByZWx5IG9uIHRoZSBmb2xpb1xuMTY3NTpcdFx0ICogb3JkZXIgb2Ygdm1mLVx1MDAzZXBhZ2UgYXMgdGhlIGZvbGlvIG1pZ2h0IG5vdCBiZSBmdWxseSBzcGxpdCB5ZXRcbjE2NzY6XHRcdCAqL1xuMTY3NzpcdFx0aWYgKHZtZi1cdTAwM2VwdGUpIHtcbjE2Nzg6XHRcdFx0b3JkZXIgPSAwO1xuMTY3OTpcdFx0XHRuciA9IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGV2aWNlIE1lbW9yeSBGYXVsdCBIYW5kbGVyKioKCk9rYXksIHNvIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAg4oCTIHllcCwgdGhhdCBjb25maXJtcyBpdCwgdGhpcyBpcyBhIGZhdWx0IGhhbmRsZXIgZGVhbGluZyB3aXRoIGRldmljZSBtZW1vcnkgYWNjZXNzIGlzc3Vlcy4gTm93LCBJIHNlZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIG1ha2VzIG1lIHRoaW5rIHdlJiMzOTtyZSB3b3JraW5nIGF0IGEgZmFpcmx5IGxvdyBsZXZlbC4gVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgc2NlbmFyaW8g4oCTIGEgc3BsaXQgZGV2aWNlLXByaXZhdGUgUE1ELiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYW5kLCBuYXR1cmFsbHksIGRldmljZS1wcml2YXRlIG1lbW9yeSBhcyBrZXkgYXNwZWN0cyBoZXJlLiBHaXZlbiB0aGUgY29udGV4dCwgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgbXVzdCBiZSBhIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gY29uc2lkZXIuIFRpbWUgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXQgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBzZWUgd2hhdCBmdXJ0aGVyIGNsdWVzIHRoaXMgaGFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2Vfdm1hX21hcHBlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzA6XHRcdFx0XHRzcGluX3VubG9jayhwdm13LVx1MDAzZXB0bCk7XG4gMjcxOlx0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuIDI3MjpcdFx0XHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xuIDI3MzpcdFx0XHRcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiAyNzQ6XHRcbiAyNzU6XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjc2Olx0XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjc3Olx0XG4gMjc4Olx0XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVx1MDAzZXBtZCk7XG4gMjc5Olx0XG4gMjgwOlx0XHRcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gMjgxOlx0XHRcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiAyODI6XHRcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4MzpcdFx0XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbiAyODQ6XHRcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4NTpcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODY6XHRcdFx0XHRcdH1cbiAyODc6XHRcdFx0XHRcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cbiAyODg6XHRcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyODk6XHRcdFx0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbiAyOTA6XHRcdFx0XHR9IGVsc2Uge1xuIDI5MTpcdFx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI5MjpcdFx0XHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gMjkzOlx0XHRcdFx0XHRcdFx0XHQgICBQTURfT1JERVIpIFx1MDAyNlx1MDAyNlxuIDI5NDpcdFx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTU6XHRcdFx0XHRcdFx0c3luY193aXRoX2ZvbGlvX3BtZF96YXAobW0sIHB2bXctXHUwMDNlcG1kKTtcbiAyOTY6XHRcbiAyOTc6XHRcdFx0XHRcdHN0ZXBfZm9yd2FyZChwdm13LCBQTURfU0laRSk7XG4gMjk4Olx0XHRcdFx0XHRjb250aW51ZTtcbiAyOTk6XHRcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwODI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaGFuZGxpbmcgYSBzcGVjaWZpYyBlZGdlIGNhc2U6IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIHdoZW4gdGhlIHBhZ2UgbWFwIGVudHJ5IGlzbiYjMzk7dCBwcmVzZW50LCB3aGljaCBtZWFucyBgIXBtZF9wcmVzZW50KHBtZGUpYC4gRXNzZW50aWFsbHksIHdlJiMzOTtyZSBsb29raW5nIGF0IHdoZXRoZXIgdGhlIGRldmljZS1wcml2YXRlIFBNRCB3YXMgc3BsaXQgYmVuZWF0aCB1cy4gVGhpcyBmZWVscyBsaWtlIGEgc29saWQgYWRkaXRpb24sIGFuZCBJIGltbWVkaWF0ZWx5IHNlZSBmdXp6aW5nIHBvdGVudGlhbCBoZXJlLiBUaGlzIGlzIHJpcGUgZm9yIGZ1enogdGVzdGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBJIHRoaW5rIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgUE1ELWxldmVsIGRldmljZS1wcml2YXRlIGVudHJpZXMuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZm9yIHRoZSBgVEVTVF9ITU1gIGRlcGVuZGVuY2llcywgYmVjYXVzZSBpdCB1c3VhbGx5IGhhcyBhbGwgdGhlIG9ic2N1cmUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMTA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfSE1NJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMzgtXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxubGliL0tjb25maWcuZGVidWctMzM0MC1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzNQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA2ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgSE1NL1RIUCBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBURVNUX0hNTWAgZWFybGllciwgd2hpY2ggaXMgZ29vZC4gVGhlIEtjb25maWcgcmV2ZWFscyB0aGF0IGBURVNUX0hNTWAgZGVwZW5kcyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGFuZCB0ZXN0IGl0LCBJJiMzOTtsbCBuZWVkIHRvIHNldCB0aG9zZSB0aHJlZSBjb25maWdzOiBgREVWSUNFX1BSSVZBVEVgLCBgVEVTVF9ITU1gLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZGVmaW5pbmcgdGhlIGZ1enppbmcgdGFyZ2V0cy4gSW5pdGlhbGx5LCBteSB0aG91Z2h0IHdhcyB0byB0YXJnZXQgdGhlIHN5bWJvbHMgZGlyZWN0bHkgbWVudGlvbmVkIGluIHRoZSBwYXRjaCwgd2hpY2ggYXJlIGVzc2VudGlhbGx5IHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGludGVyYWN0aW9uczogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAuIEJ1dCB3YWl0Li4uYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyAqdmVyeSogaG90LiBJdCYjMzk7cyB1c2VkIGluIGFsbW9zdCBldmVyeSBwYWdlIHRhYmxlIHdhbGsuIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc28gZXhjbHVkaW5nIGl0IGNvbXBsZXRlbHkgcmlza3MgbWlzc2luZyB0aGUgY3J1Y2lhbCBtb2RpZmllZCBsb2dpYy4KCkFmdGVyIGZ1cnRoZXIgY29uc2lkZXJhdGlvbiwgSSYjMzk7dmUgcmUtZXZhbHVhdGVkLiBXaGlsZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHZlcnkgaG90LCB0aGUgc3BlY2lmaWMgY29kZSBwYXRoIHRoYXQmIzM5O3MgbW9kaWZpZWQgaXMgb25seSBleGVjdXRlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBgIXBtZF9wcmVzZW50KHBtZGUpYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBidXQgYWxzbyBrZWVwIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAsIGFzIHRoZXkgYXJlIHRoZSBjYWxsIHNpdGVzIHdoZXJlIHRoZSBtb2RpZmllZCBsb2dpYyBpcyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGFuZCBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuCgpUbyByZWNhcCBhbmQgc29saWRpZnkgbXkgcmF0aW9uYWxlLCB0aGlzIHBhdGNoIGRlYWxzIHdpdGggYSBjcml0aWNhbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIEhNTSwgVEhQLCBhbmQgZGV2aWNlLXByaXZhdGUgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGNvbmN1cnJlbnQgc3BsaXR0aW5nIG9mIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoaXMgaXMgY3JpdGljYWwsIHJlYWNoYWJsZSBsb2dpYyB0aGF0IGRlbWFuZHMgZnV6emVyIGF0dGVudGlvbi4KClNvIHRoZSBmaW5hbCBwbGFuOgoKKiAgIENvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCiogICBGb2N1cyBzeW1ib2xzOiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YC4KCkkgdGhpbmsgdGhhdCBnaXZlcyB1cyBhIGdvb2QsIGZvY3VzZWQgYXBwcm9hY2guIE5vdyBJJiMzOTtsbCB1c2UgYHNldC1yZXN1bHRzYCB0byBzZXQgdGhlc2Ugc2V0dGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDEwOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDssCiAgICAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MjcuNTQ1MTMzODAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1ODE1NzgxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCIsXG4gICAgXCJ0cnlfdG9fbWlncmF0ZV9vbmVcIixcbiAgICBcIm1pZ3JhdGVfdm1hX3NldHVwXCIsXG4gICAgXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgdG8gY29ycmVjdGx5IGhhbmRsZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgaW5jbHVkaW5nIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgaXMgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgZm9yIEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQgKEhNTSkgYW5kIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEl0IGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSwgZXNwZWNpYWxseSB3aGVuIG1pZ3JhdGluZyBtZW1vcnkgdG8vZnJvbSBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjI3LjU0NTEzODY1M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM2ODc0MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjhmYTEzZGM5YTU4ZGIwZmUyNmEwZmU3YzFmNGFlMGIzZTI3ZTFlNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuaW5kZXggMmNjYmFiZmIyY2MxN2EuLjhkZTNjNmI4MmRmNmFiIDEwMDY0NFxcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcXG5AQCAtMjcwLDIxICsyNzAsMzMgQEAgYm9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuIFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuLVxcdFxcdFxcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcXG4rXFx0XFx0XFx0c29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbiBcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgUE1EX09SREVSKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuLVxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiBcXG4tXFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4rXFx0XFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuK1xcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuK1xcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgUE1EX09SREVSKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuK1xcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXG4rXFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuIFxcdFxcdFxcdGlmICghcHZtdy1cXHUwMDNlcHRlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDoyNy45ODI2MDQ5ODdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTQ0MDk1MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlX3ZtYV9tYXBwZWRfd2Fsa1wiLFxuICAgIFwidHJ5X3RvX21pZ3JhdGVfb25lXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9zZXR1cFwiLFxuICAgIFwiZG1pcnJvcl9kZXZtZW1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHRvIGNvcnJlY3RseSBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIGluY2x1ZGluZyBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGEgZGV2aWNlLXByaXZhdGUgUE1EIGlzIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGZvciBIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50IChITU0pIGFuZCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApLiBJdCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIGVzcGVjaWFsbHkgd2hlbiBtaWdyYXRpbmcgbWVtb3J5IHRvL2Zyb20gZGV2aWNlLXByaXZhdGUgbWVtb3J5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4ZmExM2RjOWE1OGRiMGZlMjZhMGZlN2MxZjRhZTBiM2UyN2UxZTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1biAyNCAxMDoxNDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi44ZGUzYzZiODJkZjZhYiAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4rKysgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTI3MCwyMSArMjcwLDMzIEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbiBcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4gXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0XHR9XG4gXG4tXHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuLVx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbi1cdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVx1MDAzZXBtZCk7XG4gXG4tXHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbi1cdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbitcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuK1x0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxuK1x0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuK1x0XHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXHUwMDNlYWRkcmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgKHB2bXctXHUwMDNlbnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpKVxuK1x0XHRcdFx0XHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1xuK1x0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuIFx0XHRcdGlmICghcHZtdy1cdTAwM2VwdGUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDoyNy45ODI2MDY4NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc5OTgxNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUE1EIEhhbmRsaW5nIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0d2Vha2luZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYC4gVGhpcyBpcyB3aGVyZSB3ZSBkZWx2ZSBpbnRvIHRoZSBncml0dHkgZGV0YWlscyBvZiBob3cgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgYXJlIG1hbmFnZWQuIFRoZSBjb3JlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIHRoZSBsb2dpYyBkZWFsaW5nIHdpdGggdGhlc2UgZW50cmllcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXkndmUgYWRkZWQgYSBjcnVjaWFsIGNoZWNrLiBJdCBzZWVtcyB0aGV5J3JlIG5vdyBjb25zaWRlcmluZyBgcHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT05gIGluIGNvbmp1bmN0aW9uIHdpdGggYGNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KWAuIFRoaXMgaGFzIHRvIGJlIGluIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlJ3JlIGNvdmVyaW5nIG91ciBiYXNlcyB3aGVuIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWlncmF0aW9uLiBUaGVyZSdzIGFsc28gc29tZSBhZGRpdGlvbmFsIGNvbXBsZXhpdHkgcmVsYXRlZCB0byBoYW5kbGluZyBzaXR1YXRpb25zIHdoZXJlIHRoZSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnkgbWlnaHQgaGF2ZSBiZWVuIHNwbGl0IHVuZGVybmVhdGggdGhlIGV4aXN0aW5nIG9wZXJhdGlvbnMuIFRoaXMgc3VnZ2VzdHMgd2UgbWF5IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgYWNjb3VudCBmb3IgdGhpcyBzY2VuYXJpbyB0byBhdm9pZCBtZW1vcnkgY29ycnVwdGlvbiBvciBhY2Nlc3MgaXNzdWVzLlxuXG5JIHRoaW5rIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBzb3VyY2UgY29kZSBkaXJlY3RseSB0byBmdWxseSBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYWRkaXRpb25zIHdpdGhpbiB0aGUgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzMwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzIuMzYyNTkwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjYxOlxcdFxcdFxcdFxcdH1cXG4gMjYyOlxcdFxcdFxcdFxcdGlmIChsaWtlbHkocG1kX3RyYW5zX2h1Z2UocG1kZSkpKSB7XFxuIDI2MzpcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2NTpcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcXG4gMjY2OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI2NzpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjY4OlxcdFxcdFxcdFxcdH1cXG4gMjY5OlxcdFxcdFxcdFxcdC8qIFRIUCBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXFxuIDI3MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiAyNzE6XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gTlVMTDtcXG4gMjcyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI3MzpcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4gMjc2OlxcdFxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdH1cXG4gMjg3OlxcdFxcdFxcdFxcdFxcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyOTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQTURfT1JERVIpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTk6XFx0XFx0XFx0XFx0fVxcbiAzMDA6XFx0XFx0XFx0fVxcbiAzMDE6XFx0XFx0XFx0aWYgKCFtYXBfcHRlKHB2bXcsIFxcdTAwMjZwbWRlLCBcXHUwMDI2cHRsKSkge1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKCFwdm13LVxcdTAwM2VwdGUpXFxuIDMwMzpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlc3RhcnQ7XFxuIDMwNDpcXHRcXHRcXHRcXHRnb3RvIG5leHRfcHRlO1xcbiAzMDU6XFx0XFx0XFx0fVxcbiAzMDY6XFx0dGhpc19wdGU6XFxuIDMwNzpcXHRcXHRcXHRpZiAoY2hlY2tfcHRlKHB2bXcsIDEpKVxcbiAzMDg6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDMwOTpcXHRuZXh0X3B0ZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzIuMzYyNjU1NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU5NzIwNTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRGV2aWNlLVByaXZhdGUgTWVtb3J5IGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBhbmQgZG9pbmcgaXRzIGpvYi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW55IGRldmljZS1wcml2YXRlIG1lbW9yeSBjb25maWd1cmF0aW9ucyB3aXRoaW4gaXRzIHNjb3BlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgb3IgZmxhZ3MgdGhhdCBtaWdodCBiZSB0aWVkIHRvIHRoYXQuIEknbSBnb2luZyB0byBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAsIGFzIHRoYXQgc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgdG8gaW5kaWNhdGUgZGV2aWNlLXNwZWNpZmljIG1lbW9yeSByZWdpb25zLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlYXJjaCB0dXJucyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwNywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6MzUuNzIyMzc3NTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTU3ODY1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTEwNDk9c3RhdGljIHZvaWQgc21hcHNfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMDg0LVxcdFxcdFxcdFxcdHByZXNlbnQgPSB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjM2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNDk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjUwLSAqIHdyaXRhYmxlIGVudHJ5P1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjU1LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1NjpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYxLS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjYzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2Ni0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTMzNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQxLVxcdFxcdHJldHVybiB0cnVlO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM0MjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU4ND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NjpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTg3LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MTctXFx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MTg6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxOS1cXHRcXHRzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpO1xcbi0tXFxubW0vaG1tLmM9MjM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9obW0uYy0yNjYtXFx0XFx0ICovXFxubW0vaG1tLmM6MjY3OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9obW0uYy0yNjgtXFx0XFx0ICAgIHBhZ2VfcGdtYXAoc29mdGxlYWZfdG9fcGFnZShlbnRyeSkpLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMjcwLVxcdFxcdFxcdGNwdV9mbGFncyA9IEhNTV9QRk5fVkFMSUQ7XFxubW0vaG1tLmM6MjcxOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjcyLVxcdFxcdFxcdFxcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xcbi0tXFxubW0vaG1tLmMtMjg0LVxcbm1tL2htbS5jOjI4NTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL2htbS5jLTI4Ni1cXHRcXHRcXHRnb3RvIGZhdWx0O1xcbi0tXFxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2htbS5jLTM0NS1cXG5tbS9obW0uYzozNDY6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTM0Ny1cXHQgICAgc29mdGxlYWZfdG9fZm9saW8oZW50cnkpLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgPT1cXG4tLVxcbm1tL2htbS5jLTM1My1cXG5tbS9obW0uYzozNTQ6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNTUtXFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0zNzItXFx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XFxubW0vaG1tLmM6MzczOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMzc0LVxcdFxcdFxcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xODA4PXN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXFx0XFx0c2V0X3BtZF9hdChzcmNfbW0sIGFkZHIsIHNyY19wbWQsIHBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODI4OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0xODI5LVxcdFxcdC8qXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXFx0XFx0ICovXFxubW0vaHVnZV9tZW1vcnkuYzoxODMzOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjU1NT1zdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI1NzUtXFx0XFx0XFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjI1NzY6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTI1NzctXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMD1zdGF0aWMgdm9pZCBfX3NwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcG1kX3QgKnBtZCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyMy1cXG5tbS9odWdlX21lbW9yeS5jOjMxMjQ6XFx0XFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy0zMTI1LVxcdFxcdGFub25fZXhjbHVzaXZlID0gUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4NjY9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5NS1cXG5tbS9odWdlX21lbW9yeS5jOjQ4OTY6XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShvbGRfZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5Ny1cXHRcXHRzb2Z0ZGlydHkgPSBwbWRfc3dwX3NvZnRfZGlydHkocG1kdmFsKTtcXG4tLVxcbm1tL21lbW9yeS5jPTk0MT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxubW0vbWVtb3J5LmMtOTkwLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzo5OTE6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy05OTItXFx0XFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmMtMTAxNS1cXHRcXHQgKi9cXG5tbS9tZW1vcnkuYzoxMDE2OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1vcnkuYy0xMDE3LVxcdFxcdCAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHtcXG4tLVxcbm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbWVtb3J5LmMtMTc0NC1cXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9tZW1vcnkuYzoxNzQ1OlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9tZW1vcnkuYy0xNzQ2LVxcdCAgICBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi0tXFxubW0vbWVtb3J5LmM9NDc0Nz12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ3NzMtXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG5tbS9tZW1vcnkuYzo0Nzc0OlxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDc3NS1cXHRcXHRcXHRpZiAodm1mLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcwLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzItXFx0XFx0XFx0IShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTc3LVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc4OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzktXFx0XFx0XFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MjQxPXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9wbWQocG1kX3QgKnBtZHAsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTI5NS1cXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyOTY6XFx0XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTctXFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjYtXFx0XFx0XFx0XFx0XFx0TUlHUkFURV9QRk5fTUlHUkFURTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMyNzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzI4LVxcdFxcdFxcdFxcdG1wZm4gfD0gTUlHUkFURV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjIzNjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL21wcm90ZWN0LmMtMjM3LVxcdFxcdC8qXFxuLS1cXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTgzLXtcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmMtMTg1LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MC1cXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMjQtXFx0XFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEyNTpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNi1cXHRcXHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc0LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI3NTpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc2LVxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc5LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjI4MDpcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjgxLVxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbi0tXFxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI2MDAtXFxubW0vcm1hcC5jOjI2MDE6XFx0XFx0XFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XFxubW0vcm1hcC5jLTI2MDItXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDozOC44NzgxNjkzMDdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcyMTY3MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBBaCwgaXQncyBpbiBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyouIEknbSBnb2luZyB0byBwdWxsIHVwIHRoZSBkZWZpbml0aW9uIGFuZCBkaXNzZWN0IGl0LiBJJ2xsIGJlIGxvb2tpbmcgYXQgdGhlIGFyZ3VtZW50cywgdGhlIHJldHVybiB0eXBlLCBhbmQsIGNydWNpYWxseSwgdGhlIGxvZ2ljIHdpdGhpbi4gQmFzZWQgb24gdGhlIG5hbWUgYWxvbmUsIEknbSBleHBlY3RpbmcgaXQgdG8gZGV0ZXJtaW5lIGlmIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgXCJzb2Z0bGVhZlwiIGlzIHByaXZhdGUgdG8gYSBwYXJ0aWN1bGFyIGRldmljZS4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSBpbnRlcmVzdGluZy4gV2hhdCBleGFjdGx5IGNvbnN0aXR1dGVzIGEgXCJzb2Z0bGVhZlwiPyBBbmQgd2hhdCBkZWZpbmVzIHRoZSBzY29wZSBvZiB0aGlzIFwiZGV2aWNlIHByaXZhY3lcIj8gTGV0J3MgZ2V0IHJlYWRpbmcgYW5kIHNlZSB3aGF0IGluc2lnaHRzIHdlIGNhbiBnbGVhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzIwMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjQyLjU1MDMzNzg5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjA6XFx0XFxuIDI2MTpcXHQvKipcXG4gMjYyOlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG4gMjYzOlxcdCAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4gMjY0OlxcdCAqXFxuIDI2NTpcXHQgKiBSZXR1cm5zOiB0cnVlIGlmIHRoZSBsZWFmIGVudHJ5IGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnksIG90aGVyd2lzZSBmYWxzZS5cXG4gMjY2OlxcdCAqL1xcbiAyNjc6XFx0c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuIDI2ODpcXHR7XFxuIDI2OTpcXHRcXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuIDI3MDpcXHRcXHRjYXNlIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFOlxcbiAyNzE6XFx0XFx0Y2FzZSBTT0ZUTEVBRl9ERVZJQ0VfUFJJVkFURV9SRUFEOlxcbiAyNzI6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDI3MzpcXHRcXHRkZWZhdWx0OlxcbiAyNzQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNzU6XFx0XFx0fVxcbiAyNzY6XFx0fVxcbiAyNzc6XFx0XFxuIDI3ODpcXHQvKipcXG4gMjc5OlxcdCAqIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZS1leGNsdXNpdmUgZW50cnk/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjQyLjU1MDQ0MDY4OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTk1MDgzNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIEtleXdvcmQgSHVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1dSSVRFYCBvciBwb3RlbnRpYWxseSBhIG1vcmUgZ2VuZXJpYyBgREVWSUNFX1BSSVZBVEVgIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5lZCBhbmQgdXNlZCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgYSBzZWFyY2ggZm9yIHRob3NlIHNwZWNpZmljIHN0cmluZ3MgZGlyZWN0bHkgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmZWN0aXZlIGZpcnN0IHN0ZXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIHN1YnN5c3RlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBkaXJlY3QgZGVmaW5pdGlvbnMgb3IgcmVmZXJlbmNlcyB0byByZWxldmFudCBkZXBlbmRlbmNpZXMgdGhhdCBsZWFkIHRvIGEgY29uZGl0aW9uYWwgc2V0dGluZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZXMgcmV2ZWFsISBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBwdXJwb3NlIGFuZCBzY29wZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBhcyBJIGdvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzc0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo0Ni41MDk5NTA1MzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjgxODE4NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI3ND1UaGVzZSBjYW4gYmUgYWxsb2NhdGVkIGFuZCBmcmVlZCB3aXRoOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJuYW1lIG9mIGRyaXZlciByZXNvdXJjZVxcXCIpO1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyODE6ICAgIHBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjgyLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTAtICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAgd2lsbCBvbmx5IG1pZ3JhdGUgc3lzdGVtIG1lbW9yeSBhbmRcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzExOiAgIGBgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFYGAgd2lsbCBvbmx5IG1pZ3JhdGUgcGFnZXMgcmVzaWRpbmcgaW5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzEyLSAgIGRldmljZSBwcml2YXRlIG1lbW9yeS4gSWYgdGhlIGxhdHRlciBmbGFnIGlzIHNldCwgdGhlIGBgYXJncy1cXHUwMDNlcGdtYXBfb3duZXJgYFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMxLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwibmFtZSBvZiBkcml2ZXIgcmVzb3VyY2VcXFwiKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIzMjogICAgcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjMzLSAgICBwYWdlbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjQzPWRldm1fbWVtdW5tYXBfcGFnZXMoKSDlkowgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSDlvZPotYTmupDlj6/ku6Xnu5HlrprliLAgYGBzdHJ1Y3QgZGV2aWNlYGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Ny0gICDkvovlpoLvvIzorr7nva4gYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNYGAg5bCG5Y+q6L+B56e757O757uf5YaF5a2Y77yM6K6+572uXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTg6ICAgYGBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEVgYCDlsIblj6rov4Hnp7vpqbvnlZnlnKjorr7lpIfnp4HmnInlhoXlrZjkuK3nmoTpobVcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1OS0gICDpnaLjgILlpoLmnpzlkI7ogIXooqvorr7nva7vvIwgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteiiq+eUqOadpeivhuWIq+mpseWKqOaJgOaLpeacieeahOiuvuWkh1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWc9NTQxPWNvbmZpZyBQUENfVVZcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0My1cXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1NDQ6XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU0NS1cXHRkZWZhdWx0IG5cXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTY4PUNPTkZJR19aT05FX0RFVklDRT15XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc6Njk6Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZy03MC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM9NTEzPXN0YXRpYyBpbnQgX19rdm1wcGNfc3ZtX3BhZ2Vfb3V0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzEtXFx0bWlnLnBnbWFwX293bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzMjpcXHRtaWcuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEU7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy01MzMtXFx0bWlnLmZhdWx0X3BhZ2UgPSBmYXVsdF9wYWdlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz0xMTU4PWludCBrdm1wcGNfdXZtZW1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTgyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6MTE4MzpcXHRrdm1wcGNfdXZtZW1fcGdtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODQtXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLnJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jPTY4Mz1zdGF0aWMgYm9vbCBpc19hbGxvd2VkX3JhbmdlKHU2NCBiYXNlX2FkZHIsIHU2NCBzaXplKVxcbi0tXFxuZHJpdmVycy9hY3BpL2FwZWkvZWluai1jb3JlLmMtNjk3LVxcdFxcdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZLFxcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jOjY5ODpcXHRcXHQvKiBUcmVhdCBJT1JFU19ERVNDX0RFVklDRV9QUklWQVRFX01FTU9SWSBhcyBNTUlPLiAqL1xcbmRyaXZlcnMvYWNwaS9hcGVpL2VpbmotY29yZS5jLTY5OS1cXHRcXHRJT1JFU19ERVNDX1JFU0VSVkVELFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oPTEwND1zdHJ1Y3QgYW1kZ3B1X2tmZF9kZXYge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oLTExMy1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmg6MTE0OlxcdC8qIEhNTSBwYWdlIG1pZ3JhdGlvbiBNRU1PUllfREVWSUNFX1BSSVZBVEUgbWFwcGluZ1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaC0xMTUtXFx0ICogTXVzdCBiZSBsYXN0IC0tZW5kcyBpbiBhIGZsZXhpYmxlLWFycmF5IG1lbWJlci5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc9MTU9Y29uZmlnIEhTQV9BTURfU1ZNXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgSE1NLWJhc2VkIHNoYXJlZCB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VyXFxcIlxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc6MTc6XFx0ZGVwZW5kcyBvbiBIU0FfQU1EIFxcdTAwMjZcXHUwMDI2IERFVklDRV9QUklWQVRFXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xOC1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkyPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNS1cXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MTY6XFx0XFx0bWlncmF0ZS5mbGFncyA9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTcxNy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9MTAyNT1pbnQga2dkMmtmZF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDU2LVxcdFxcdHBnbWFwLVxcdTAwM2VyYW5nZS5lbmQgPSByZXMtXFx1MDAzZWVuZDtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNTc6XFx0XFx0cGdtYXAtXFx1MDAzZXR5cGUgPSBNRU1PUllfREVWSUNFX1BSSVZBVEU7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDU4LVxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2OS1cXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byByZWdpc3RlciBITU0gZGV2aWNlIG1lbW9yeVxcXFxuXFxcIik7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzoxMDcwOlxcdFxcdGlmIChwZ21hcC1cXHUwMDNldHlwZSA9PSBNRU1PUllfREVWSUNFX1BSSVZBVEUpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDcxLVxcdFxcdFxcdGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGFkZXYtXFx1MDAzZWRldiwgcmVzLVxcdTAwM2VzdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTUxNz1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MjktXFx0XFx0LmZsYWdzXFx0XFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNIHwgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9DT0hFUkVOVCB8XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTMwOlxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCxcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01MzEtXFx0fTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTM9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTEyMC1cXHRcXHQucGdtYXBfb3duZXJcXHQ9IHBhZ2VfcGdtYXAocGFnZSktXFx1MDAzZW93bmVyLFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjExMjE6XFx0XFx0LmZsYWdzXFx0XFx0PSBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUgfFxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExMjItXFx0XFx0XFx0XFx0ICBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX0NPSEVSRU5UIHxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc9OTQ9Y29uZmlnIERSTV9OT1VWRUFVX1NWTVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTUtXFx0Ym9vbCBcXFwiKEVYUEVSSU1FTlRBTCkgRW5hYmxlIFNWTSAoU2hhcmVkIFZpcnR1YWwgTWVtb3J5KSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTctXFx0ZGVwZW5kcyBvbiBEUk1fTk9VVkVBVVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTE5NS1cXHRcXHQuZmF1bHRfcGFnZVxcdD0gdm1mLVxcdTAwM2VwYWdlLFxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjE5NjpcXHRcXHQuZmxhZ3NcXHRcXHQ9IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSB8XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMTk3LVxcdFxcdFxcdFxcdCAgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5ELFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMyMC1cXHRjaHVuay1cXHUwMDNlZHJtID0gZHJtO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjMyMTpcXHRjaHVuay1cXHUwMDNlcGFnZW1hcC50eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMyMi1cXHRjaHVuay1cXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCA9IHJlcy1cXHUwMDNlc3RhcnQ7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUvS2NvbmZpZz03OT1jb25maWcgRFJNX1hFX0dQVVNWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODQtXFx0ZGVmYXVsdCB5XFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWc6ODU6XFx0c2VsZWN0IERFVklDRV9QUklWQVRFXFxuZHJpdmVycy9ncHUvZHJtL3hlL0tjb25maWctODYtXFx0c2VsZWN0IERSTV9HUFVTVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzY5PXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwNC1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwNTpcXHRwYWdlbWFwLVxcdTAwM2V0eXBlID0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODA2LVxcdHBhZ2VtYXAtXFx1MDAzZXJhbmdlLnN0YXJ0ID0gcmVzLVxcdTAwM2VzdGFydDtcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaC02LVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL3BjaS9oaXZlX2lzcF9jc3NfY29tbW9uL2hvc3QvZ3BfZGV2aWNlX3ByaXZhdGUuaDo3OiNpZm5kZWYgX19HUF9ERVZJQ0VfUFJJVkFURV9IX0lOQ0xVREVEX19cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmg6ODojZGVmaW5lIF9fR1BfREVWSUNFX1BSSVZBVEVfSF9JTkNMVURFRF9fXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oLTktXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmg9Mjg9U1RPUkFHRV9DTEFTU19HUF9ERVZJQ0VfQyBocnRfZGF0YSBncF9kZXZpY2VfcmVnX2xvYWQoXFxuLS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L2dwX2RldmljZV9wcml2YXRlLmgtMzctXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC9ncF9kZXZpY2VfcHJpdmF0ZS5oOjM4OiNlbmRpZiAvKiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfXyAqL1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaD0xNj1TVE9SQUdFX0NMQVNTX1RJTUVEX0NUUkxfQyB2b2lkIHRpbWVkX2N0cmxfcmVnX3N0b3JlKFxcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvcGNpL2hpdmVfaXNwX2Nzc19jb21tb24vaG9zdC90aW1lZF9jdHJsX3ByaXZhdGUuaC0yNS1cXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9wY2kvaGl2ZV9pc3BfY3NzX2NvbW1vbi9ob3N0L3RpbWVkX2N0cmxfcHJpdmF0ZS5oOjI2OiNlbmRpZiAvKiBfX0dQX0RFVklDRV9QUklWQVRFX0hfSU5DTFVERURfXyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaD0xND1zdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9obW0uaC0yMS0gKiAgICAgICAgICAgICAgICAgbGVhc3QgcmVhZGFibGUuIElmIGRldl9wcml2YXRlX293bmVyIGlzICFOVUxMIHRoZW4gdGhpcyBjb3VsZFxcbmluY2x1ZGUvbGludXgvaG1tLmg6MjI6ICogICAgICAgICAgICAgICAgIHBvaW50IGF0IGEgREVWSUNFX1BSSVZBVEUgcGFnZS5cXG5pbmNsdWRlL2xpbnV4L2htbS5oLTIzLSAqIEhNTV9QRk5fV1JJVEUgLSBpZiB0aGUgcGFnZSBtZW1vcnkgY2FuIGJlIHdyaXR0ZW4gdG8gKHJlcXVpcmVzIEhNTV9QRk5fVkFMSUQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2lvcG9ydC5oPTEzNj1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMTQyLVxcdElPUkVTX0RFU0NfUEVSU0lTVEVOVF9NRU1PUllfTEVHQUNZXFx0PSA1LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0Lmg6MTQzOlxcdElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZXFx0PSA2LFxcbmluY2x1ZGUvbGludXgvaW9wb3J0LmgtMTQ0LVxcdElPUkVTX0RFU0NfUkVTRVJWRURcXHRcXHRcXHQ9IDcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xOT1lbnVtIHNvZnRsZWFmX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjctXFx0LyogRGV2aWNlIHR5cGVzLiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI4OlxcdFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQsXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjk6XFx0U09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEUsXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAtXFx0U09GVExFQUZfREVWSUNFX0VYQ0xVU0lWRSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE0MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTYxOiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjItXFx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2MzpcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTY0LVxcdGNhc2UgU1dQX0RFVklDRV9SRUFEOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE2NTpcXHRcXHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjYtXFx0Y2FzZSBTV1BfREVWSUNFX0VYQ0xVU0lWRTpcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI1ODpcXHRyZXR1cm4gc29mdGxlYWZfdHlwZShlbnRyeSkgPT0gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjU5LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI2Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OS1cXHRzd2l0Y2ggKHNvZnRsZWFmX3R5cGUoZW50cnkpKSB7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcwOlxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfV1JJVEU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjcxOlxcdGNhc2UgU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDpcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzItXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MjE9c3RydWN0IHZtZW1fYWx0bWFwIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0zMy0gKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDozNDogKiBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTM1LSAqIERldmljZSBtZW1vcnkgdGhhdCBpcyBub3QgZGlyZWN0bHkgYWRkcmVzc2FibGUgYnkgdGhlIENQVTogQ1BVIGNhbiBuZWl0aGVyXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Njg9ZW51bSBtZW1vcnlfdHlwZSB7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTY5LVxcdC8qIDAgaXMgcmVzZXJ2ZWQgdG8gY2F0Y2ggdW5pbml0aWFsaXplZCB0eXBlIGZpZWxkcyAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDo3MDpcXHRNRU1PUllfREVWSUNFX1BSSVZBVEUgPSAxLFxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC03MS1cXHRNRU1PUllfREVWSUNFX0NPSEVSRU5ULFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTE2Nj1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9faXNfZGV2aWNlX3ByaXZhdGUoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbylcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTY4OlxcdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkgXFx1MDAyNlxcdTAwMjZcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY5LVxcdFxcdGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzA6XFx0XFx0Zm9saW8tXFx1MDAzZXBnbWFwLVxcdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTcxLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNzM9c3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9wcml2YXRlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3NC17XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjE3NTpcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFxcdTAwMjZcXHUwMDI2XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3Ni1cXHRcXHRmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1MT1lbnVtIG1pZ3JhdGVfdm1hX2RpcmVjdGlvbiB7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTUyLVxcdE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gPSAxIFxcdTAwM2NcXHUwMDNjIDAsXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmg6MTUzOlxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA9IDEgXFx1MDAzY1xcdTAwM2MgMSxcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNTQtXFx0TUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9DT0hFUkVOVCA9IDEgXFx1MDAzY1xcdTAwM2MgMixcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oPTE1OD1zdHJ1Y3QgbWlncmF0ZV92bWEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTc3LVxcdCAqIGZvciBtaWdyYXRpbmcgb3V0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeS4gVGhlIGZsYWdzIGFsc28gbmVlZCB0b1xcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE3ODpcXHQgKiBiZSBzZXQgdG8gTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFLlxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE3OS1cXHQgKiBUaGUgY2FsbGVyIHNob3VsZCBhbHdheXMgc2V0IHRoaXMgZmllbGQgd2hlbiB1c2luZyBtbXUgbm90aWZpZXJcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTM0PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NS0gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NjojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzctI2RlZmluZSBTV1BfREVWSUNFX05VTSAzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkICpzd3BfdG9fcmFkaXhfZW50cnkoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzQtXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTM1OiNpZiBJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSlcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzYtc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUwLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE1MTojZWxzZSAvKiBDT05GSUdfREVWSUNFX1BSSVZBVEUgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNTItc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTYyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY2LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE2NzojZW5kaWYgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY4LVxcbi0tXFxua2VybmVsL3Jlc291cmNlLmM9MTMxNT1zdGF0aWMgaW50IF9fcmVxdWVzdF9yZWdpb25fbG9ja2VkKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jLTEzNDAtXFx0XFx0aWYgKHBhcmVudCA9PSBcXHUwMDI2aW9tZW1fcmVzb3VyY2UgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvcmVzb3VyY2UuYzoxMzQxOlxcdFxcdCAgICBjb25mbGljdC1cXHUwMDNlZGVzYyA9PSBJT1JFU19ERVNDX0RFVklDRV9QUklWQVRFX01FTU9SWSkge1xcbmtlcm5lbC9yZXNvdXJjZS5jLTEzNDItXFx0XFx0XFx0cHJfd2FybihcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgJXMgJXBSIGNvbmZsaWN0cyB3aXRoICVwUlxcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jPTIxMDc9c3RydWN0IHJlc291cmNlICpkZXZtX3JlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC9yZXNvdXJjZS5jLTIxMTMtXFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSxcXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTE0OlxcdFxcdFxcdFxcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XFxua2VybmVsL3Jlc291cmNlLmMtMjExNS19XFxuLS1cXG5rZXJuZWwvcmVzb3VyY2UuYz0yMTE4PXN0cnVjdCByZXNvdXJjZSAqcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oc3RydWN0IHJlc291cmNlICpiYXNlLFxcbi0tXFxua2VybmVsL3Jlc291cmNlLmMtMjEyMy1cXHRyZXR1cm4gZ2V0X2ZyZWVfbWVtX3JlZ2lvbihOVUxMLCBiYXNlLCBzaXplLCBHRlJfREVGQVVMVF9BTElHTiwgbmFtZSxcXG5rZXJuZWwvcmVzb3VyY2UuYzoyMTI0OlxcdFxcdFxcdFxcdCAgIElPUkVTX0RFU0NfREVWSUNFX1BSSVZBVEVfTUVNT1JZLCBmbGFncyk7XFxua2VybmVsL3Jlc291cmNlLmMtMjEyNS19XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzM5PWNvbmZpZyBURVNUX0hNTVxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzM0MS1cXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubGliL0tjb25maWcuZGVidWc6MzM0MjpcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxubGliL0tjb25maWcuZGVidWctMzM0My1cXHRzZWxlY3QgSE1NX01JUlJPUlxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQyPXN0YXRpYyBib29sIGRtaXJyb3JfaXNfcHJpdmF0ZV96b25lKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE0NC1cXHRyZXR1cm4gKG1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cXG5saWIvdGVzdF9obW0uYzoxNDU6XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKTtcXG5saWIvdGVzdF9obW0uYy0xNDYtfVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ5PWRtaXJyb3Jfc2VsZWN0X2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcilcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MS1cXHRyZXR1cm4gKGRtaXJyb3ItXFx1MDAzZW1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUgPT1cXG5saWIvdGVzdF9obW0uYzoxNTI6XFx0XFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9QUklWQVRFKSA/XFxubGliL3Rlc3RfaG1tLmM6MTUzOlxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSA6XFxubGliL3Rlc3RfaG1tLmMtMTU0LVxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfQ09IRVJFTlQ7XFxuLS1cXG5saWIvdGVzdF9obW0uYz01NTg9c3RhdGljIGludCBkbWlycm9yX2FsbG9jYXRlX2NodW5rKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTU3My1cXHRzd2l0Y2ggKG1kZXZpY2UtXFx1MDAzZXpvbmVfZGV2aWNlX3R5cGUpIHtcXG5saWIvdGVzdF9obW0uYzo1NzQ6XFx0Y2FzZSBITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubGliL3Rlc3RfaG1tLmMtNTc1LVxcdFxcdHJlcyA9IHJlcXVlc3RfZnJlZV9tZW1fcmVnaW9uKFxcdTAwMjZpb21lbV9yZXNvdXJjZSwgREVWTUVNX0NIVU5LX1NJWkUsXFxuLS1cXG5saWIvdGVzdF9obW0uYy01ODAtXFx0XFx0ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnJhbmdlLmVuZCA9IHJlcy1cXHUwMDNlZW5kO1xcbmxpYi90ZXN0X2htbS5jOjU4MTpcXHRcXHRkZXZtZW0tXFx1MDAzZXBhZ2VtYXAudHlwZSA9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURTtcXG5saWIvdGVzdF9obW0uYy01ODItXFx0XFx0YnJlYWs7XFxuLS1cXG5saWIvdGVzdF9obW0uYy02ODAtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2VkZXZtZW1fbG9jayk7XFxubGliL3Rlc3RfaG1tLmM6NjgxOlxcdGlmIChyZXMgXFx1MDAyNlxcdTAwMjYgZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxcbmxpYi90ZXN0X2htbS5jLTY4Mi1cXHRcXHRyZWxlYXNlX21lbV9yZWdpb24oZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnJhbmdlLnN0YXJ0LFxcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE0OTctXFx0XFx0XFx0bWVtdW5tYXBfcGFnZXMoXFx1MDAyNmRldm1lbS1cXHUwMDNlcGFnZW1hcCk7XFxubGliL3Rlc3RfaG1tLmM6MTQ5ODpcXHRcXHRcXHRpZiAoZGV2bWVtLVxcdTAwM2VwYWdlbWFwLnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKVxcbmxpYi90ZXN0X2htbS5jLTE0OTktXFx0XFx0XFx0XFx0cmVsZWFzZV9tZW1fcmVnaW9uKGRldm1lbS1cXHUwMDNlcGFnZW1hcC5yYW5nZS5zdGFydCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE4MjE9c3RhdGljIGludCBfX2luaXQgaG1tX2RtaXJyb3JfaW5pdCh2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTgzMy1cXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMrK10uem9uZV9kZXZpY2VfdHlwZSA9XFxubGliL3Rlc3RfaG1tLmM6MTgzNDpcXHRcXHRcXHRcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XFxubGliL3Rlc3RfaG1tLmMtMTgzNS1cXHRkbWlycm9yX2RldmljZXNbbmRldmljZXMrK10uem9uZV9kZXZpY2VfdHlwZSA9XFxubGliL3Rlc3RfaG1tLmM6MTgzNjpcXHRcXHRcXHRcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEU7XFxubGliL3Rlc3RfaG1tLmMtMTgzNy1cXHRpZiAoc3BtX2FkZHJfZGV2MCBcXHUwMDI2XFx1MDAyNiBzcG1fYWRkcl9kZXYxKSB7XFxuLS1cXG5saWIvdGVzdF9obW1fdWFwaS5oPTc0PWVudW0ge1xcbmxpYi90ZXN0X2htbV91YXBpLmgtNzUtXFx0LyogMCBpcyByZXNlcnZlZCB0byBjYXRjaCB1bmluaXRpYWxpemVkIHR5cGUgZmllbGRzICovXFxubGliL3Rlc3RfaG1tX3VhcGkuaDo3NjpcXHRITU1fRE1JUlJPUl9NRU1PUllfREVWSUNFX1BSSVZBVEUgPSAxLFxcbmxpYi90ZXN0X2htbV91YXBpLmgtNzctXFx0SE1NX0RNSVJST1JfTUVNT1JZX0RFVklDRV9DT0hFUkVOVCxcXG4tLVxcbm1tL0tjb25maWc9MTE4Mz1jb25maWcgWk9ORV9ERVZJQ0VcXG4tLVxcbm1tL0tjb25maWctMTE5NC1cXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxubW0vS2NvbmZpZzoxMTk1OlxcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxcbm1tL0tjb25maWctMTE5Ni1cXG4tLVxcbm1tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyMTMtXFxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTIxNS1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jPTE3MDY9c3RhdGljIGludCBtZl9nZW5lcmljX2tpbGxfcHJvY3ModW5zaWduZWQgbG9uZyBsb25nIHBmbiwgaW50IGZsYWdzLFxcbi0tXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzMwLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG5tbS9tZW1vcnktZmFpbHVyZS5jOjE3MzE6XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtb3J5LWZhaWx1cmUuYy0xNzMyLVxcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4tLVxcbm1tL21lbXJlbWFwLmM9ODY9c3RhdGljIHZvaWQgcGFnZXVubWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCByYW5nZV9pZClcXG4tLVxcbm1tL21lbXJlbWFwLmMtOTctXFx0XFx0XFx0XFx0ICAgUEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSkpO1xcbm1tL21lbXJlbWFwLmM6OTg6XFx0aWYgKHBnbWFwLVxcdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSkge1xcbm1tL21lbXJlbWFwLmMtOTktXFx0XFx0X19yZW1vdmVfcGFnZXMoUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTEyPXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTE2LVxcdHBlcmNwdV9yZWZfa2lsbChcXHUwMDI2cGdtYXAtXFx1MDAzZXJlZik7XFxubW0vbWVtcmVtYXAuYzoxMTc6XFx0aWYgKHBnbWFwLVxcdTAwM2V0eXBlICE9IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbXJlbWFwLmMtMTE4LVxcdCAgICBwZ21hcC1cXHUwMDNldHlwZSAhPSBNRU1PUllfREVWSUNFX0NPSEVSRU5UKVxcbi0tXFxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTE0Ni17XFxubW0vbWVtcmVtYXAuYzoxNDc6XFx0Y29uc3QgYm9vbCBpc19wcml2YXRlID0gcGdtYXAtXFx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFO1xcbm1tL21lbXJlbWFwLmMtMTQ4LVxcdHN0cnVjdCByYW5nZSAqcmFuZ2UgPSBcXHUwMDI2cGdtYXAtXFx1MDAzZXJhbmdlc1tyYW5nZV9pZF07XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI0NC1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgcGdtYXApO1xcbm1tL21lbXJlbWFwLmM6MjQ1OlxcdGlmIChwZ21hcC1cXHUwMDNldHlwZSAhPSBNRU1PUllfREVWSUNFX1BSSVZBVEUgXFx1MDAyNlxcdTAwMjZcXG5tbS9tZW1yZW1hcC5jLTI0Ni1cXHQgICAgcGdtYXAtXFx1MDAzZXR5cGUgIT0gTUVNT1JZX0RFVklDRV9DT0hFUkVOVClcXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI4Mi1cXHRzd2l0Y2ggKHBnbWFwLVxcdTAwM2V0eXBlKSB7XFxubW0vbWVtcmVtYXAuYzoyODM6XFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxubW0vbWVtcmVtYXAuYzoyODQ6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcXG5tbS9tZW1yZW1hcC5jLTI4NS1cXHRcXHRcXHRXQVJOKDEsIFxcXCJEZXZpY2UgcHJpdmF0ZSBtZW1vcnkgbm90IHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTQxNj12b2lkIGZyZWVfem9uZV9kZXZpY2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL21lbXJlbWFwLmMtNDUxLVxcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG5tbS9tZW1yZW1hcC5jOjQ1MjpcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tZW1yZW1hcC5jLTQ1My1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE3MS1cXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTcyOlxcdFxcdFxcdCEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzMtXFx0XFx0XFx0KGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpKSB7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMDEtXFx0XFx0XFx0aWYgKCEobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzAyOlxcdFxcdFxcdFxcdE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMy1cXHRcXHRcXHQgICAgcGdtYXAtXFx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXFx1MDAzZXBnbWFwX293bmVyKVxcbi0tXFxubW0vbW1faW5pdC5jPTEwMDQ9c3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTEwMzgtXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG5tbS9tbV9pbml0LmM6MTAzOTpcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tbV9pbml0LmMtMTA0MC1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XFxuLS1cXG5tbS9ybWFwLmM9MjczOT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NzYtXFxubW0vcm1hcC5jOjI3Nzc6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbm1tL3JtYXAuYy0yNzc4LS8qKlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTQ9Q09ORklHX1RFU1RfVk1BTExPQz1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjU6Q09ORklHX0RFVklDRV9QUklWQVRFPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo0OC40MzgxMzY3MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjQzMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBEZXZpY2UtUHJpdmF0ZSBNZW1vcnkqKlxuXG5Pa2F5LCBzbyBJJ20gaG9uaW5nIGluIG9uIHRoZSBjcnVjaWFsIGNvbmZpZyBvcHRpb24gaGVyZSwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyB0aGUga2V5IHRvIGVuYWJsaW5nIGRldmljZS1wcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gSG93ZXZlciwgSSdtIHRoaW5raW5nIGFib3V0IHRlc3RpbmcgdGhpcywgYW5kIGlmIEkgd2FudCB0byBoYXZlIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LCBJIHJlYWxpemUgdGhhdCBgQ09ORklHX1RFU1RfSE1NYCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bC4gU3BlY2lmaWNhbGx5LCB0aGlzIHNob3VsZCBwcm92aWRlIGEgZHVtbXkgZGV2aWNlIHRoYXQgSSBjYW4gdXNlIHRvIHJlbGlhYmx5IHRlc3QgdGhlIGRldmljZS1wcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWZpYyBoYXJkd2FyZS4gTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBob3cgaXQncyB1c2VkLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbGliL0tjb25maWcuZGVidWdgIGZpbGUgdG8gY29uZmlybSBob3cgYFRFU1RfSE1NYCBpcyBkZWZpbmVkIGFuZCB1c2VkLCB0byBiZSBjZXJ0YWluIGl0IGFsaWducyB3aXRoIG15IHRlc3QgcGxhbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MjIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNDo1MS42NTQ1NjkzODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Mzk3NTkzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTQ6NTMuNDk0MzM1OTg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NDIxODkwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCoqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgaXMgY29uZmlybWVkIHRvIGJlIGEgdHJpc3RhdGUsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBwYXRjaCB0YXJnZXRzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbjsgaXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCB1c2VkIHRvIHRyYXZlcnNlIHRoZSBwYWdlIHRhYmxlcyBmb3IgYSBnaXZlbiBwYWdlL2ZvbGlvIGFuZCBWTUEuIFRoaXMgaXMgY29yZSBzdHVmZi5cblxuVGhlIGNvcmUgb2YgdGhpcyBtb2RpZmljYXRpb24gYXBwZWFycyB0byBoYW5kbGUgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMsIHNwZWNpZmljYWxseSwgdGhlIGNhc2Ugd2hlcmUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAgaXMgdHJ1ZSwgYnV0IGAhcG1kX3ByZXNlbnQocG1kZSlgLiBJdCBsb29rcyBsaWtlIGl0J3Mgbm93IGNoZWNraW5nIGZvciBgUFZNV19NSUdSQVRJT05gIGluIGBwdm13LVx1MDAzZWZsYWdzYCBhbmQgdGhlbiBjYWxsaW5nIGBjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdylgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZC4gRGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBzeW1ib2wuXG5cbldhaXQgYSBzZWNvbmQuLi4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyBhICpob3QtcGF0aCogZnVuY3Rpb24uIFRoYXQncyB1c2VkIGNvbnN0YW50bHkuIEdpdmVuIGl0J3MgYSBob3QgcGF0aCwgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2Ugc3RhbmRwb2ludC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIHNlZSBpZiBvdGhlciBmdW5jdGlvbnMgY291bGQgdHJpZ2dlciB0aGlzIGV4YWN0IHBhdGgsIG1heWJlIHRoaXMgZml4IHdpbGwgaW1wcm92ZSBvdGhlciBmdW5jdGlvbnMgYW5kIG5vdCBqdXN0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuXG5cbkRldmljZS1wcml2YXRlIG1lbW9yeSBhbmQgdGhpcyBwYXJ0aWN1bGFyIGNvbmRpdGlvbiBvZnRlbiByZWxhdGUgdG8gSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KSBvciBtaWdyYXRpb24gc2NlbmFyaW9zLiBMZXQgbWUgdHJhY2UgYmFjayB0aGUgY2FsbHMgdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29udGV4dCB3aGVyZSB0aGlzIGlzIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjYyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE0OjU5LjIzNjUyNzQzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1ODg1ODg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX3ZtYV9tYXBwZWRfd2Fsa1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTUyMj1zdHJ1Y3QgbHJ1dmVjO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTIzOnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9Njg5PXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXFx0XFx0dW5zaWduZWQgaW50IG5yKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9ODUxPXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2My1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NjQ6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NjUtXFx0dW5zaWduZWQgbG9uZyBwZm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzYtI2RlZmluZSBERUZJTkVfRk9MSU9fVk1BX1dBTEsobmFtZSwgX2ZvbGlvLCBfdm1hLCBfYWRkcmVzcywgX2ZsYWdzKVxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4Nzc6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIG5hbWUgPSB7XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3OC1cXHRcXHQucGZuID0gZm9saW9fcGZuKF9mb2xpbyksXFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg1LVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg4NjpzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg5NS0vKipcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTY6ICogcGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydCAtIFJlc3RhcnQgdGhlIHBhZ2UgdGFibGUgd2Fsay5cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTc6ICogQHB2bXc6IFBvaW50ZXIgdG8gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg5OC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmg9OTA0PXN0YXRpYyBpbmxpbmUgdm9pZFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjkwNTpwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MDYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTE4LVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjkxOTpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7XFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTIwLXVuc2lnbmVkIGxvbmcgcGFnZV9hZGRyZXNzX2luX3ZtYShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzE3PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9ndWFyZF9zd3BfZW50cnkodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjI6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyMy1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyODpleHRlcm4gdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVxcdFxcdHN0cnVjdCBwYWdlICpuZXcpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDI6c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0My1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozNDg6c3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldylcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTYzLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYz0xOTQ9c3RhdGljIGJvb2wgZGFtb25fZm9saW9feW91bmdfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAxLVxcdCphY2Nlc3NlZCA9IGZhbHNlO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMDI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDMtXFx0XFx0YWRkciA9IHB2bXcuYWRkcmVzcztcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjYtXFx0XFx0aWYgKCphY2Nlc3NlZCkge1xcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjc6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyOC1cXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Mj1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NjUtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxubW0vaHVnZV9tZW1vcnkuYzo0ODY2OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vaHVnZV9tZW1vcnkuYy00ODY3LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00OTM5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDk0MDp2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcXG5tbS9odWdlX21lbW9yeS5jLTQ5NDEte1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xMjM0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bWFfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTI1Ny0gKi9cXG5tbS9pbnRlcm5hbC5oOjEyNTg6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzX2VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vaW50ZXJuYWwuaC0xMjU5LXtcXG4tLVxcbm1tL2tzbS5jPTEyNzU9c3RhdGljIGludCB3cml0ZV9wcm90ZWN0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9rc20uYy0xMjk2LVxcbm1tL2tzbS5jOjEyOTc6XFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpXFxubW0va3NtLmMtMTI5OC1cXHRcXHRnb3RvIG91dF9tbjtcXG4tLVxcbm1tL2tzbS5jLTEzNTgtb3V0X3VubG9jazpcXG5tbS9rc20uYzoxMzU5OlxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL2tzbS5jLTEzNjAtb3V0X21uOlxcbi0tXFxubW0vbWlncmF0ZS5jPTI3OT1ib29sIGlzb2xhdGVfZm9saW9fdG9fbGlzdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vbWlncmF0ZS5jLTI5Ny1cXG5tbS9taWdyYXRlLmM6Mjk4OnN0YXRpYyBib29sIHRyeV90b19tYXBfdW51c2VkX3RvX3plcm9wYWdlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9taWdyYXRlLmMtMjk5LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHB0ZV90IG9sZF9wdGUsIHVuc2lnbmVkIGxvbmcgaWR4KVxcbi0tXFxubW0vbWlncmF0ZS5jPTM0Nj1zdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTM1MS1cXG5tbS9taWdyYXRlLmM6MzUyOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9taWdyYXRlLmMtMzUzLVxcdFxcdHJtYXBfdCBybWFwX2ZsYWdzID0gUk1BUF9OT05FO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTc6XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTgtXFx0XFx0XFx0LnB0bCA9IHB0bCxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jPTUyPXN0YXRpYyBib29sIHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaWRsZS5jLTU4LVxcbm1tL3BhZ2VfaWRsZS5jOjU5OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9wYWdlX2lkbGUuYy02MC1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDpzdGF0aWMgaW5saW5lIGJvb2wgbm90X2ZvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMS17XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMy1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjpzdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTctXFx0XFx0ICAgIHNwaW5sb2NrX3QgKipwdGxwKVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtODctICogbWFwcGVkIGF0IHRoZSBAcHZtdy1cXHUwMDNlcHRlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6ODg6ICogQHB2bXc6IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHN0cnVjdCwgaW5jbHVkZXMgYSBwYWlyIHB0ZSBhbmQgcGZuIHJhbmdlXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtODktICogZm9yIGNoZWNraW5nXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05MS0gKlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjkyOiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgZm91bmQgYSBwbGFjZSB3aGVyZSBwZm4gcmFuZ2UgaXMgKnBvdGVudGlhbGx5Klxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkzLSAqIG1hcHBlZC4gY2hlY2tfcHRlKCkgaGFzIHRvIHZhbGlkYXRlIHRoaXMuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMDYtICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTA3OnN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwOC17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzktLyogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gcmFuZ2VzIG92ZXJsYXAuICBDYXJlZnVsIHRvIG5vdCBvdmVyZmxvdy4gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OC1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDk6c3RhdGljIHZvaWQgc3RlcF9mb3J3YXJkKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBzaXplKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1MC17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTYtLyoqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU3OiAqIHBhZ2Vfdm1hX21hcHBlZF93YWxrIC0gY2hlY2sgaWYgQHB2bXctXFx1MDAzZXBmbiBpcyBtYXBwZWQgaW4gQHB2bXctXFx1MDAzZXZtYSBhdFxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1OC0gKiBAcHZtdy1cXHUwMDNlYWRkcmVzc1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1OTogKiBAcHZtdzogcG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuIHBhZ2UsIHZtYSwgYWRkcmVzcyBhbmQgZmxhZ3NcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjAtICogbXVzdCBiZSBzZXQuIHBtZCwgcHRlIGFuZCBwdGwgbXVzdCBiZSBOVUxMLlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY2LSAqIElmIEBwdm13LVxcdTAwM2VwbWQgaXMgc2V0IGJ1dCBAcHZtdy1cXHUwMDNlcHRlIGlzIG5vdCwgeW91IGhhdmUgZm91bmQgUE1ELW1hcHBlZCBwYWdlXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY3OiAqICh1c3VhbGx5IFRIUCkuIEZvciBQVEUtbWFwcGVkIFRIUCwgeW91IHNob3VsZCBydW4gcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBpblxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2OC0gKiBhIGxvb3AgdG8gZmluZCBhbGwgUFRFcyB0aGF0IG1hcCB0aGUgVEhQLlxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTc2LSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc3OiAqIElmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHdhbGsgYmVmb3JlIHBhZ2Vfdm1hX21hcHBlZF93YWxrKCkgcmV0dXJuZWQgZmFsc2UsXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc4OiAqIHVzZSBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCkuIEl0IHdpbGwgZG8gdGhlIGhvdXNla2VlcGluZy5cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzktICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTgwOmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4MS17XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0zNTg9dW5zaWduZWQgbG9uZyBwYWdlX21hcHBlZF9pbl92bWEoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzYyOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2My1cXHRcXHQucGZuID0gcGFnZV90b19wZm4ocGFnZSksXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzEtXFx0XFx0Z290byBvdXQ7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MzcyOlxcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3My1cXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzQ6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzc1LW91dDpcXG4tLVxcbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05MjQtXFxubW0vcm1hcC5jOjkyNTpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTkyNi1cXHRcXHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vcm1hcC5jLTk0OC1cXHRcXHRcXHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XFxubW0vcm1hcC5jOjk0OTpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtOTUwLVxcdFxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbi0tXFxubW0vcm1hcC5jLTk2My1cXHRcXHRcXHRwcmEtXFx1MDAzZXJlZmVyZW5jZWQgPSAtMTtcXG5tbS9ybWFwLmM6OTY0OlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy05NjUtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vcm1hcC5jLTEwMDItXFx0XFx0aWYgKHB0ZXMgPT0gcHZtdy5ucl9wYWdlcykge1xcbm1tL3JtYXAuYzoxMDAzOlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0xMDA0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jPTEwNjQ9aW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4tLVxcbm1tL3JtYXAuYy0xMTAyLVxcbm1tL3JtYXAuYzoxMTAzOnN0YXRpYyBpbnQgcGFnZV92bWFfbWtjbGVhbl9vbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3JtYXAuYy0xMTA0LXtcXG4tLVxcbm1tL3JtYXAuYy0xMTE3LVxcbm1tL3JtYXAuYzoxMTE4OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2Fsayhwdm13KSkge1xcbm1tL3JtYXAuYy0xMTE5LVxcdFxcdGludCByZXQgPSAwO1xcbi0tXFxubW0vcm1hcC5jPTEyMzE9c3RhdGljIGJvb2wgbWFwcGluZ193cnByb3RlY3RfcmFuZ2Vfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9ybWFwLmMtMTIzNC1cXHRzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqKWFyZztcXG5tbS9ybWFwLmM6MTIzNTpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9ybWFwLmMtMTIzNi1cXHRcXHQucGZuXFx0XFx0PSBzdGF0ZS1cXHUwMDNlcGZuLFxcbi0tXFxubW0vcm1hcC5jPTEzMTA9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxcbi0tXFxubW0vcm1hcC5jLTEzMTIte1xcbm1tL3JtYXAuYzoxMzEzOlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3JtYXAuYy0xMzE0LVxcdFxcdC5wZm5cXHRcXHQ9IHBmbixcXG4tLVxcbm1tL3JtYXAuYz0xOTQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3VubWFwX3B0ZV9iYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3JtYXAuYzoxOTQ1OlxcdFxcdFxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9ybWFwLmMtMTk0Ni1cXHRcXHRcXHRlbnVtIHR0dV9mbGFncyBmbGFncywgcHRlX3QgcHRlKVxcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMDMxLVxcbm1tL3JtYXAuYzoyMDMyOlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtMjAzMy1cXHRcXHRucl9wYWdlcyA9IDE7XFxuLS1cXG5tbS9ybWFwLmMtMjA4OS1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xcbm1tL3JtYXAuYzoyMDkwOlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yMDkxLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vcm1hcC5jLTIzNjMtd2Fsa19kb25lOlxcbm1tL3JtYXAuYzoyMzY0OlxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yMzY1LVxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jPTI0MTU9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTI0NjAtXFxubW0vcm1hcC5jOjI0NjE6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy0yNDYyLVxcdFxcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xcbi0tXFxubW0vcm1hcC5jLTI0NzYtXFx0XFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gflRUVV9TUExJVF9IVUdFX1BNRDtcXG5tbS9ybWFwLmM6MjQ3NzpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjQ3OC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3JtYXAuYy0yNDkzLVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNDk0OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNDk1LVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI1NDktXFx0XFx0XFx0XFx0aWYgKCFodWdldGxiX3ZtYV90cnlsb2NrX3dyaXRlKHZtYSkpIHtcXG5tbS9ybWFwLmM6MjU1MDpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjU1MS1cXHRcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG4tLVxcbm1tL3JtYXAuYy0yNTYzLVxcdFxcdFxcdFxcdFxcdCAqL1xcbm1tL3JtYXAuYzoyNTY0OlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNTY1LVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NTAtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2NTE6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NTItXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY2MS1cXHRcXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY2MjpcXHRcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY2My1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjY4LVxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjY5OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjcwLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NDEzND1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE4MC0gKi9cXG5tbS92bXNjYW4uYzo0MTgxOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MDEuMDk1MzkxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMTkxNzE3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgZm9yIERldmljZS1Qcml2YXRlIE1lbW9yeSoqXG5cbk9rYXksIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgdXNlZCBieSBxdWl0ZSBhIGZldyBkaWZmZXJlbnQgcGF0aHMuIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYW5kIGEgZmV3IG90aGVycyBsaWtlIGBmb2xpb19yZWZlcmVuY2VkX29uZWAgYW5kIGBwYWdlX3ZtYV9ta2NsZWFuX29uZWAuIEdpdmVuIHRoZSBlbXBoYXNpcyBvbiBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIG1pZ3JhdGlvbiBpbiB0aGlzIHBhdGNoLCBteSBpbml0aWFsIGZvY3VzIHNob3VsZCBiZSBvbiBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYHRyeV90b191bm1hcF9vbmVgLiBUaGV5IHNlZW0gbGlrZSB0aGUgbW9zdCBkaXJlY3QgbGlua3MuXG5cbkkgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUg4oCTIGNvdWxkIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBvciBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGJlIHJlbGV2YW50PyBUaGV5IGRvbid0ICpkaXJlY3RseSogY2FsbCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLCBvciBzbyBJIGluaXRpYWxseSB0aG91Z2h0LiBIYW5nIG9uIGEgbW9tZW50Li4uIEkgc2VlIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgICpkb2VzKiBhY3R1YWxseSB1c2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCdzIGFuIGltcG9ydGFudCBkZXRhaWwuIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGF0IG9uZS5cblxuQWxyaWdodCwgYSBxdWljayBzY2FuIG9mIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBmaW5kIHdoZXJlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpcyBkZWZpbmVkIHdpbGwgYmUgdGhlIG5leHQgc3RlcC4gSSdsbCBnZXQgYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVzYWdlIGZyb20gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjA3LjQxNDU2NTIyOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0fSBlbHNlIHtcXG4gMTgxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMTg2OlxcdFxcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XFxuIDE4NzpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAxODg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMTg5OlxcdFxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE5MzpcXHRcXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NDpcXHRcXHRcXHQoSVNfQUxJR05FRChzdGFydCwgSFBBR0VfUE1EX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NTpcXHRcXHRcXHQgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxuIDE5ODpcXHRcXHRcXHRcXHQucHRsID0gcHRsLFxcbiAxOTk6XFx0XFx0XFx0XFx0LmFkZHJlc3MgPSBzdGFydCxcXG4gMjAwOlxcdFxcdFxcdFxcdC5wbWQgPSBwbWRwLFxcbiAyMDE6XFx0XFx0XFx0XFx0LnZtYSA9IHdhbGstXFx1MDAzZXZtYSxcXG4gMjAyOlxcdFxcdFxcdH07XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IG1pZ3JhdGVfcGZuKHBmbikgfCB3cml0ZVxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXFxuIDIwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHR8IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbiAyMDk6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjA3LjQxNDY5MTE2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg1NzQyMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmUsIGFzIGEgZmVsbG93IGV4cGVydDpcblxuKipSZWZpbmluZyBNeSBVbmRlcnN0YW5kaW5nIG9mIEh1Z2UgUE1EIE1pZ3JhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIGFib3V0IHRvIGp1bXAgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgd2FzIGRpcmVjdGx5IGludm9sdmVkIGluIHdhbGtpbmcgdGhlIHBhZ2UgbWFwcGluZ3MgdXNpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQnV0IHRoYXQncyBub3QgcXVpdGUgcmlnaHQsIGlzIGl0PyBMb29raW5nIGNsb3Nlci4uLiBpdCBhY3R1YWxseSBkb2Vzbid0ICpjYWxsKiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGl0c2VsZi4gSW5zdGVhZCwgaXQgc2VlbXMgbGlrZSB0aGUgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYHB2bXdgIGFuZCB0aGVuIHBhc3NpbmcgaXQgYWxvbmcgdG8gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCwgcmlnaHQ/IFNvIGl0J3MgbW9yZSBhYm91dCBzZXR0aW5nIHVwIHRoZSBjb250ZXh0IGZvciB0aGUgcGFnZSB3YWxrIHRoYXQgKndpbGwqIGhhcHBlbi4gVGhlIGtleSBpcyBpbiB0aGF0IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgY2FsbC4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyB0cmF2ZXJzYWwgbG9naWMgaXMgbW9zdCBsaWtlbHkgZ29pbmcgdG8gYmUgbGV2ZXJhZ2VkLCB1c2luZyB0aGUgYHB2bXdgIHN0cnVjdHVyZSB0aGF0IHdhcyBzZXQgdXAuIEludGVyZXN0aW5nOyBpdCdzIGEgY3JpdGljYWwgZGlzdGluY3Rpb24gdG8ga2VlcCBpbiBtaW5kIGZvciB0cmFjaW5nIHRoaXMgY29kZSdzIGV4ZWN1dGlvbiBmbG93LiBJIG5lZWQgdG8gZm9jdXMgb24gd2hlcmUgdGhlIGBwdm13YCBpcyBiZWluZyB1c2VkIGluIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzI3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToxMS41MDA0MzU4NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWNwYWdlcysrO1xcbiAyMTE6XFx0XFx0XFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG4gMjEyOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gMjEzOlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZW5wYWdlcy0tO1xcbiAyMTQ6XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzLS07XFxuIDIxNTpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IDA7XFxuIDIxNjpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2Vkc3RbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IDA7XFxuIDIxNzpcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiAyMTg6XFx0XFx0XFx0fVxcbiAyMTk6XFx0XFx0XFx0bWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0ICsgUEFHRV9TSVpFLCBlbmQsIHdhbGspO1xcbiAyMjA6XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gMjIxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAyMjI6XFx0XFx0fVxcbiAyMjM6XFx0XFxuIDIyNDpcXHRmYWxsYmFjazpcXG4gMjI1OlxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDIyNjpcXHRcXHRpZiAoIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pKVxcbiAyMjc6XFx0XFx0XFx0Z290byBkb25lO1xcbiAyMjg6XFx0XFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xcbiAyMjk6XFx0XFx0aWYgKGZhdWx0X2ZvbGlvICE9IGZvbGlvKVxcbiAyMzA6XFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gMjMxOlxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIDIzMjpcXHRcXHRpZiAocmV0KVxcbiAyMzM6XFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG4gMjM0OlxcdFxcdGlmIChwbWRfbm9uZShwbWRwX2dldF9sb2NrbGVzcyhwbWRwKSkpXFxuIDIzNTpcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9ob2xlKHN0YXJ0LCBlbmQsIC0xLCB3YWxrKTtcXG4gMjM2OlxcdFxcbiAyMzc6XFx0ZG9uZTpcXG4gMjM4OlxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiAyMzk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToxMS41MDA2MzA4NjZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjE2MTk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiBEZXZpY2UtUHJpdmF0ZSBQTUQgRW50cmllcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbXBhY3QuIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gYmUgY2VudGVyZWQgYXJvdW5kIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZnVuY3Rpb25zIGFyZSAqY2FsbGluZyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gQmFzZWQgb24gbXkga25vd2xlZGdlLCB0aGUgbGlzdCBpczogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2Vfdm1hX21rY2xlYW5fb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGBkYW1vbl9mb2xpb195b3VuZ19vbmVgLCBgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAsIGFuZCBgd3JpdGVfcHJvdGVjdF9wYWdlYCByZWxhdGVkIHRvIEtTTS5cblxuVGhlIHBhdGNoIG1lbnRpb25zIGRlYWxpbmcgd2l0aCBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcy4gRGV2aWNlLXByaXZhdGUgbWVtb3J5IGlzICp0eXBpY2FsbHkqIGFzc29jaWF0ZWQgd2l0aCBtaWdyYXRpb25zLiBTbywgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBzdGFuZCBvdXQgYXMgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byBmb2N1cyBvbiBoZXJlLlxuXG5Ib3dldmVyLCBJIHJlbWVtYmVyIHRoYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGFsc28gaGFuZGxlcyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcywgYWx0aG91Z2ggaXQgZG9lc24ndCBkaXJlY3RseSBjYWxsIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIEJ1dCB0aGUgcGF0Y2ggc3BlY2lmaWNhbGx5IG1lbnRpb25zIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgICp3aXRoaW4qIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyB0aGUgY3JpdGljYWwgY29ubmVjdGlvbi5cblxuTm93LCB3aGVuIHdvdWxkIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgYWN0dWFsbHkgZW5jb3VudGVyIGEgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJ5PyBUaGUgYW5zd2VyIGlzIHdoZW4gdGhlIFBNRCAqaXRzZWxmKiBpcyBhIGRldmljZS1wcml2YXRlIGVudHJ5LiBUaGlzIHNpdHVhdGlvbiBhcmlzZXMgd2hlbiBhIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBpcyBtaWdyYXRlZCB0byBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuXG5cblNvLCBob3cgZG9lcyB0aGlzIGhhcHBlbj8gYHRyeV90b19taWdyYXRlX29uZWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgdW5tYXBwaW5nLiBJIGNhbiBzZWUgdGhlc2UgYXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIHRvIGludmVzdGlnYXRlLlxuXG5BbHRob3VnaCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSB3b3JraG9yc2UgZnVuY3Rpb24sIGl0J3MgZGVmaW5pdGVseSBhIGhvdC1wYXRoIGZ1bmN0aW9uIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4gSXMgYHRyeV90b19taWdyYXRlX29uZWAgYSBob3QgcGF0aCBmdW5jdGlvbj8gTm8sIGJlY2F1c2UgaXQncyBjYWxsZWQgZHVyaW5nIHBhZ2UgbWlncmF0aW9uLiBJcyBgdHJ5X3RvX3VubWFwX29uZWA/IEl0J3MgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0gYW5kIHVubWFwcGluZywgc28gaXQgaXMgYSBob3QgcGF0aCBidXQgbm90IGFzIGhvdCBhcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLlxuXG5UbyBiZSB0aG9yb3VnaCwgbGV0J3MgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgYW5kIGBtaWdyYXRlX3ZtYV9zZXR1cGAgYXMgdGhleSBtYXkgYmUgZW50cnkgcG9pbnRzIGZvciBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9taWdyYXRlX2RldmljZS5jYCB0byBsb29rIGF0IHRoZSBzZXR1cCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMjAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNToyMS41NjIyNTM3NzdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjEzNjk2NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI2ND11c2UgaGFyZHdhcmUgRE1BIG9yIGRldmljZSBzcGVjaWZpYyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB0byBtaWdyYXRlIGRhdGEuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDEtICAgVGhlIGRldmljZSBkcml2ZXIgaGFzIHRvIHBhc3MgYSBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDctICAgVGhlIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAgZmllbGRzIGFuZCBwYXNzZXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXFx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDktICAgZmlsdGVyIHdoaWNoIHNvdXJjZSBwYWdlcyBzaG91bGQgYmUgbWlncmF0ZWQuIEZvciBleGFtcGxlLCBzZXR0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTg6ICAgT25lIG9mIHRoZSBmaXJzdCBzdGVwcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIGRvZXMgaXMgdG8gaW52YWxpZGF0ZSBvdGhlclxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJ3MgTU1VcyB3aXRoIHRoZSBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCgpYGAgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMyNTogICB0aGUgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXFx1MDAzZWRzdGBgIGFycmF5LlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUwOiAgIOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+WwhiBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIOS8oOmAkue7mW1pZ3JhdGVfdm1hX3NldHVwKCnvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MzoyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjU2OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnjgIJgYGFyZ3MtXFx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY0LSAgIOWSjCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYGAg6LCD55So5p2l6YGN5Y6G6K6+5aSH5ZGo5Zu055qE6aG16KGo77yM5L2/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjg6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeeahCBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc3LSAgIOi/mOa4hemZpOS6hiBgYGFyZ3MtXFx1MDAzZWRzdGBgIOaVsOe7hOOAglxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzOTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU0MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc2MTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQzMTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMyLVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MzQ6XFx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNS1cXHRpZiAocikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzU4MzogKiAxLiBtaWdyYXRlX3ZtYV9zZXR1cCBpbnZhbGlkYXRlIHBhZ2VzLCBNTVUgbm90aWZpZXIgY2FsbGJhY2sgc3ZtX3JhbmdlX2V2aWN0XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MTc9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NTpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2NzpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz04MjI9bm91dmVhdV9kbWVtX21pZ3JhdGVfdm1hKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjg3MjpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjU6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTM6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2NC1cXG5saWIvdGVzdF9obW0uYzoxMTY1OlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTY2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDItXFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jOjEyNDM6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTEyNDQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzA1LVxcdC8qXFxubGliL3Rlc3RfaG1tLmM6MTcwNjpcXHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcXG5saWIvdGVzdF9obW0uYy0xNzA3LVxcdCAqIHRlc3QgaXMgd3JvbmcgYXMgaXQganVzdCB0ZXN0cyBzb21lIHN0YXRpYyBWTUEgcHJvcGVydGllcy5cXG5saWIvdGVzdF9obW0uYy0xNzA4LVxcdCAqL1xcbmxpYi90ZXN0X2htbS5jOjE3MDk6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSkge1xcbmxpYi90ZXN0X2htbS5jLTE3MTAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjUtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzMwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc2OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTU9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcXHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MjMuMjgzNjI2ODA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDY1MTgxMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBkZXZpY2UtcHJpdmF0ZSBtZW1vcnksIGFuZCBpdCBzZWVtcyBsaWtlIGBtaWdyYXRlX3ZtYV9zZXR1cGAgaXMgYSBrZXkgZnVuY3Rpb24gaGVyZS4gSXQncyBleHBvcnRlZCBhbmQgdXNlZCBieSBzZXZlcmFsIGRyaXZlcnMgYW5kIGV2ZW4gYHRlc3RfaG1tYCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIHN5bWJvbCB0byBkZWx2ZSBpbnRvLiBUaGUgY29yZSBvZiB0aGlzIGlzIG1pZ3JhdGlvbjsgZmluZGluZyBhIGdvb2QgZW50cnkgcG9pbnQuXG5cbkkgYWxzbyBzZWUgdGhhdCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgY291bGQgYmUgYW5vdGhlciBjcml0aWNhbCBwaWVjZSwgc2luY2UgaXQgc2VlbXMgdG8gdHJpZ2dlciBtaWdyYXRpb24gdG8gUkFNLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEhtbSwgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpcyBhIGZhdWx0IGhhbmRsZXIsIHdoaWNoIGlzIGltcG9ydGFudCB0byByZW1lbWJlci4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBgbGliL3Rlc3RfaG1tLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhhdCBmdW5jdGlvbiBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjI3LjA5MDE0Njg5NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjY5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjUwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjUwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZtZGV2aWNlLVxcdTAwM2Vsb2NrKTtcXG4xNjUxOlxcdH1cXG4xNjUyOlxcdFxcbjE2NTM6XFx0c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuMTY1NDpcXHR7XFxuMTY1NTpcXHRcXHRzdHJ1Y3QgbWlncmF0ZV92bWEgYXJncyA9IHsgMCB9O1xcbjE2NTY6XFx0XFx0c3RydWN0IHBhZ2UgKnJwYWdlO1xcbjE2NTc6XFx0XFx0c3RydWN0IGRtaXJyb3IgKmRtaXJyb3I7XFxuMTY1ODpcXHRcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuMTY1OTpcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIG5yO1xcbjE2NjA6XFx0XFxuMTY2MTpcXHRcXHQvKlxcbjE2NjI6XFx0XFx0ICogTm9ybWFsbHksIGEgZGV2aWNlIHdvdWxkIHVzZSB0aGUgcGFnZS1cXHUwMDNlem9uZV9kZXZpY2VfZGF0YSB0byBwb2ludCB0b1xcbjE2NjM6XFx0XFx0ICogdGhlIG1pcnJvciBidXQgaGVyZSB3ZSB1c2UgaXQgdG8gaG9sZCB0aGUgcGFnZSBmb3IgdGhlIHNpbXVsYXRlZFxcbjE2NjQ6XFx0XFx0ICogZGV2aWNlIG1lbW9yeSBhbmQgdGhhdCBwYWdlIGhvbGRzIHRoZSBwb2ludGVyIHRvIHRoZSBtaXJyb3IuXFxuMTY2NTpcXHRcXHQgKi9cXG4xNjY2OlxcdFxcdHJwYWdlID0gZm9saW9fem9uZV9kZXZpY2VfZGF0YShwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSkpO1xcbjE2Njc6XFx0XFx0ZG1pcnJvciA9IHJwYWdlLVxcdTAwM2V6b25lX2RldmljZV9kYXRhO1xcbjE2Njg6XFx0XFxuMTY2OTpcXHRcXHQvKiBGSVhNRSBkZW1vbnN0cmF0ZSBob3cgd2UgY2FuIGFkanVzdCBtaWdyYXRlIHJhbmdlICovXFxuMTY3MDpcXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHBhZ2VfZm9saW8odm1mLVxcdTAwM2VwYWdlKSk7XFxuMTY3MTpcXHRcXHRuciA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuMTY3MjpcXHRcXG4xNjczOlxcdFxcdC8qXFxuMTY3NDpcXHRcXHQgKiBXaGVuIGZvbGlvcyBhcmUgcGFydGlhbGx5IG1hcHBlZCwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgZm9saW9cXG4xNjc1OlxcdFxcdCAqIG9yZGVyIG9mIHZtZi1cXHUwMDNlcGFnZSBhcyB0aGUgZm9saW8gbWlnaHQgbm90IGJlIGZ1bGx5IHNwbGl0IHlldFxcbjE2NzY6XFx0XFx0ICovXFxuMTY3NzpcXHRcXHRpZiAodm1mLVxcdTAwM2VwdGUpIHtcXG4xNjc4OlxcdFxcdFxcdG9yZGVyID0gMDtcXG4xNjc5OlxcdFxcdFxcdG5yID0gMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MjcuMDkwMjQ0OTk1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDkxNTM2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZpY2UgTWVtb3J5IEZhdWx0IEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIOKAkyB5ZXAsIHRoYXQgY29uZmlybXMgaXQsIHRoaXMgaXMgYSBmYXVsdCBoYW5kbGVyIGRlYWxpbmcgd2l0aCBkZXZpY2UgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIE5vdywgSSBzZWUgd2UncmUgbW9kaWZ5aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyBpbnRlcmVzdGluZywgbWFrZXMgbWUgdGhpbmsgd2UncmUgd29ya2luZyBhdCBhIGZhaXJseSBsb3cgbGV2ZWwuIFRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIHNwZWNpZmljIHNjZW5hcmlvIOKAkyBhIHNwbGl0IGRldmljZS1wcml2YXRlIFBNRC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFuZCwgbmF0dXJhbGx5LCBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYXMga2V5IGFzcGVjdHMgaGVyZS4gR2l2ZW4gdGhlIGNvbnRleHQsIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG11c3QgYmUgYSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGNvbnNpZGVyLiBUaW1lIHRvIHRha2UgYW5vdGhlciBsb29rIGF0IGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuIExldCdzIHNlZSB3aGF0IGZ1cnRoZXIgY2x1ZXMgdGhpcyBoYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MzEuMDM5NDAxMTI1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2Vfdm1hX21hcHBlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI3MDpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiAyNzE6XFx0XFx0XFx0XFx0cHZtdy1cXHUwMDNlcHRsID0gTlVMTDtcXG4gMjcyOlxcdFxcdFxcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XFxuIDI3MzpcXHRcXHRcXHRcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4gMjc2OlxcdFxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuIDI4MTpcXHRcXHRcXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4MzpcXHRcXHRcXHRcXHRcXHRcXHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuIDI4NTpcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMjg2OlxcdFxcdFxcdFxcdFxcdH1cXG4gMjg3OlxcdFxcdFxcdFxcdFxcdC8qIGRldmljZS1wcml2YXRlIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjg4OlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI4OTpcXHRcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyOTA6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gMjkxOlxcdFxcdFxcdFxcdFxcdGlmICgocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX1NZTkMpIFxcdTAwMjZcXHUwMDI2XFxuIDI5MjpcXHRcXHRcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIDI5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBQTURfT1JERVIpIFxcdTAwMjZcXHUwMDI2XFxuIDI5NDpcXHRcXHRcXHRcXHRcXHQgICAgKHB2bXctXFx1MDAzZW5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRcXHRzeW5jX3dpdGhfZm9saW9fcG1kX3phcChtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0XFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAyOTk6XFx0XFx0XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNTozMS4wMzk0NjcwMTVaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3ODQzMjUwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaGFuZGxpbmcgYSBzcGVjaWZpYyBlZGdlIGNhc2U6IGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgIHdoZW4gdGhlIHBhZ2UgbWFwIGVudHJ5IGlzbid0IHByZXNlbnQsIHdoaWNoIG1lYW5zIGAhcG1kX3ByZXNlbnQocG1kZSlgLiBFc3NlbnRpYWxseSwgd2UncmUgbG9va2luZyBhdCB3aGV0aGVyIHRoZSBkZXZpY2UtcHJpdmF0ZSBQTUQgd2FzIHNwbGl0IGJlbmVhdGggdXMuIFRoaXMgZmVlbHMgbGlrZSBhIHNvbGlkIGFkZGl0aW9uLCBhbmQgSSBpbW1lZGlhdGVseSBzZWUgZnV6emluZyBwb3RlbnRpYWwgaGVyZS4gVGhpcyBpcyByaXBlIGZvciBmdXp6IHRlc3RpbmcuIEknbGwgbmVlZCB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBJIHRoaW5rIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgbmVjZXNzYXJ5IGFzIHdlbGwsIHNwZWNpZmljYWxseSBmb3IgdGhvc2UgUE1ELWxldmVsIGRldmljZS1wcml2YXRlIGVudHJpZXMuIEp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgZm9yIHRoZSBgVEVTVF9ITU1gIGRlcGVuZGVuY2llcywgYmVjYXVzZSBpdCB1c3VhbGx5IGhhcyBhbGwgdGhlIG9ic2N1cmUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA4MjYsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQxMDoxNTozNS4wMTc5MDIxMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTQzNjkxMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMTA6MTU6MzYuODcyMjc1MDY5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTgwMDQ1MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEhNTS9USFAgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSBhbHJlYWR5IGdyZXBwZWQgZm9yIGBURVNUX0hNTWAgZWFybGllciwgd2hpY2ggaXMgZ29vZC4gVGhlIEtjb25maWcgcmV2ZWFscyB0aGF0IGBURVNUX0hNTWAgZGVwZW5kcyBvbiBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBERVZJQ0VfUFJJVkFURWAuIFRoZXJlZm9yZSwgdG8gZW5hYmxlIGFuZCB0ZXN0IGl0LCBJJ2xsIG5lZWQgdG8gc2V0IHRob3NlIHRocmVlIGNvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGRlZmluaW5nIHRoZSBmdXp6aW5nIHRhcmdldHMuIEluaXRpYWxseSwgbXkgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IHRoZSBzeW1ib2xzIGRpcmVjdGx5IG1lbnRpb25lZCBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFyZSBlc3NlbnRpYWxseSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnM6IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AsIGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgLiBCdXQgd2FpdC4uLmBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgKnZlcnkqIGhvdC4gSXQncyB1c2VkIGluIGFsbW9zdCBldmVyeSBwYWdlIHRhYmxlIHdhbGsuIEZ1enppbmcgdGhhdCBkaXJlY3RseSBtaWdodCBnZW5lcmF0ZSB0b28gbXVjaCBub2lzZS4gSG93ZXZlciwgdGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgc28gZXhjbHVkaW5nIGl0IGNvbXBsZXRlbHkgcmlza3MgbWlzc2luZyB0aGUgY3J1Y2lhbCBtb2RpZmllZCBsb2dpYy5cblxuQWZ0ZXIgZnVydGhlciBjb25zaWRlcmF0aW9uLCBJJ3ZlIHJlLWV2YWx1YXRlZC4gV2hpbGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB2ZXJ5IGhvdCwgdGhlIHNwZWNpZmljIGNvZGUgcGF0aCB0aGF0J3MgbW9kaWZpZWQgaXMgb25seSBleGVjdXRlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBgIXBtZF9wcmVzZW50KHBtZGUpYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgc3BlY2lmaWMgc2NlbmFyaW8uIFRoZXJlZm9yZSwgSSB3aWxsIGluY2x1ZGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBidXQgYWxzbyBrZWVwIHRoZSBoaWdoZXItbGV2ZWwgZnVuY3Rpb25zLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYG1pZ3JhdGVfdm1hX3NldHVwYCwgYW5kIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAsIGFzIHRoZXkgYXJlIHRoZSBjYWxsIHNpdGVzIHdoZXJlIHRoZSBtb2RpZmllZCBsb2dpYyBpcyB0cmlnZ2VyZWQgaW4gdGhlIGNvbnRleHQgb2YgbWlncmF0aW9uIGFuZCBkZXZpY2UgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblRvIHJlY2FwIGFuZCBzb2xpZGlmeSBteSByYXRpb25hbGUsIHRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBhIGNyaXRpY2FsIGludGVyYWN0aW9uIGJldHdlZW4gSE1NLCBUSFAsIGFuZCBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkuIFNwZWNpZmljYWxseSwgaXQgaGFuZGxlcyB0aGUgY29uY3VycmVudCBzcGxpdHRpbmcgb2YgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgZHVyaW5nIHBhZ2UgdGFibGUgd2Fsa3MgaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhpcyBpcyBjcml0aWNhbCwgcmVhY2hhYmxlIGxvZ2ljIHRoYXQgZGVtYW5kcyBmdXp6ZXIgYXR0ZW50aW9uLlxuXG5TbyB0aGUgZmluYWwgcGxhbjpcblxuKiAgIENvbmZpZ3M6IGBERVZJQ0VfUFJJVkFURWAsIGBURVNUX0hNTWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG4qICAgRm9jdXMgc3ltYm9sczogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgYHRyeV90b19taWdyYXRlX29uZWAsIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAuXG5cbkkgdGhpbmsgdGhhdCBnaXZlcyB1cyBhIGdvb2QsIGZvY3VzZWQgYXBwcm9hY2guIE5vdyBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHNldCB0aGVzZSBzZXR0aW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzEyMzUsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDEwOjE1OjQ4LjA1MjMyMTg0NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0Mzc0Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBpbmNsdWRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBpcyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IHdoZW4gbWlncmF0aW5nIG1lbW9yeSB0by9mcm9tIGRldmljZS1wcml2YXRlIG1lbW9yeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZV92bWFfbWFwcGVkX3dhbGtcIixcbiAgICBcInRyeV90b19taWdyYXRlX29uZVwiLFxuICAgIFwibWlncmF0ZV92bWFfc2V0dXBcIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB0byBjb3JyZWN0bHkgaGFuZGxlIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzLCBpbmNsdWRpbmcgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBpcyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBmb3IgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudCAoSE1NKSBhbmQgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKS4gSXQgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCBlc3BlY2lhbGx5IHdoZW4gbWlncmF0aW5nIG1lbW9yeSB0by9mcm9tIGRldmljZS1wcml2YXRlIG1lbW9yeS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflownts4b[1] Phase: Succeeded StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 10:17:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2] Phase: Succeeded StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 10:17:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 10:17:24 +0000 UTC FinishedAt: 2026-06-24 10:17:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownts4b/series-workflownts4b-convert-artifact-1003112624/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 10:17:45 +0000 UTC FinishedAt: 2026-06-24 10:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 10:17:45 +0000 UTC FinishedAt: 2026-06-24 10:55:51 +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:*ccb130ed-dfaf-4cac-9862-9848ee50a453,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-workflownts4b/series-workflownts4b-convert-artifact-1003112624/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": "a5548ad5-0166-4673-9890-413c15496a08", "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-workflownts4b/series-workflownts4b-build-action-3427415478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 10:17:45 +0000 UTC FinishedAt: 2026-06-24 10:54:07 +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:*ccb130ed-dfaf-4cac-9862-9848ee50a453,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-workflownts4b/series-workflownts4b-convert-artifact-1003112624/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": "a5548ad5-0166-4673-9890-413c15496a08", "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-workflownts4b/series-workflownts4b-build-action-3427415478/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 10:55:51 +0000 UTC FinishedAt: 2026-06-24 10:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 10:55:51 +0000 UTC FinishedAt: 2026-06-24 10:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 10:55:51 +0000 UTC FinishedAt: 2026-06-24 10:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 10:55:51 +0000 UTC FinishedAt: 2026-06-24 10:55:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflownts4b/series-workflownts4b-convert-artifact-3634680983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 10:56:14 +0000 UTC FinishedAt: 2026-06-24 10:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 10:56:14 +0000 UTC FinishedAt: 2026-06-24 10:58:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5548ad5-0166-4673-9890-413c15496a08,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-workflownts4b/series-workflownts4b-build-action-3427415478/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-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 10:58:27 +0000 UTC FinishedAt: 2026-06-24 10:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 10:58:27 +0000 UTC FinishedAt: 2026-06-24 10:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 10:58:27 +0000 UTC FinishedAt: 2026-06-24 11:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 10:58:27 +0000 UTC FinishedAt: 2026-06-24 11:36:25 +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:*ccb130ed-dfaf-4cac-9862-9848ee50a453,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-workflownts4b/series-workflownts4b-convert-artifact-3634680983/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": "41dd463c-61e5-4fcc-9714-cf7bb0669f34", "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-workflownts4b/series-workflownts4b-build-action-680528603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 10:58:27 +0000 UTC FinishedAt: 2026-06-24 11:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ccb130ed-dfaf-4cac-9862-9848ee50a453,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-workflownts4b/series-workflownts4b-convert-artifact-3634680983/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": "41dd463c-61e5-4fcc-9714-cf7bb0669f34", "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-workflownts4b/series-workflownts4b-build-action-680528603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 11:36:25 +0000 UTC FinishedAt: 2026-06-24 11:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 11:36:25 +0000 UTC FinishedAt: 2026-06-24 11:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 11:36:25 +0000 UTC FinishedAt: 2026-06-24 11:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 11:36:25 +0000 UTC FinishedAt: 2026-06-24 11:38:29 +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:*41dd463c-61e5-4fcc-9714-cf7bb0669f34,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-workflownts4b/series-workflownts4b-build-action-680528603/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-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},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:*a5548ad5-0166-4673-9890-413c15496a08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41dd463c-61e5-4fcc-9714-cf7bb0669f34,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-workflownts4b/series-workflownts4b-build-action-3427415478/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-workflownts4b/series-workflownts4b-build-action-680528603/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 11:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 11:38:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},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-workflownts4b/series-workflownts4b-convert-artifact-1363172432/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 11:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 11:38:38 +0000 UTC FinishedAt: 2026-06-24 11:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 11:38:39 +0000 UTC FinishedAt: 2026-06-24 11:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 11:38:49 +0000 UTC FinishedAt: 2026-06-24 14:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflownts4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["page_vma_mapped_walk","try_to_migrate_one","migrate_vma_setup","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","TEST_HMM","TRANSPARENT_HUGEPAGE"],"series_id":"56ff04e4-fb27-4eb5-8861-59d00f6f2250","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 11:38:49 +0000 UTC FinishedAt: 2026-06-24 14:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a5548ad5-0166-4673-9890-413c15496a08,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*41dd463c-61e5-4fcc-9714-cf7bb0669f34,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-workflownts4b/series-workflownts4b-build-action-3427415478/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-workflownts4b/series-workflownts4b-build-action-680528603/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-workflownts4b/series-workflownts4b-convert-artifact-1363172432/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,}