Name: series-workflowfg8zx Phase: Succeeded StartedAt: 2026-07-20 15:56:43 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[0] Phase: Succeeded StartedAt: 2026-07-20 15:56:43 +0000 UTC FinishedAt: 2026-07-20 16:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 15:56:43 +0000 UTC FinishedAt: 2026-07-20 16:13:55 +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": "e57d6e9e20b551e4910d7a6331a81775c3ad6693", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "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": "e57d6e9e20b551e4910d7a6331a81775c3ad6693", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memmap_init_compound" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OTVkOTg2ZjhmMDdiNjQwNGY2ZTZlZGU5ZTMwZGExNzliNGM0MDE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTY6MTI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7clwmIzM0OygqKGNvbnN0IHU2NCAqKXNyYylcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuJiM0MztcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuJiM0MztcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4mIzQzO1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuJiM0MztcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhc2UgMzI6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNDg6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA4MDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDk2OlxuJiM0MztcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuJiM0MzsvKlxuJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbiYjNDM7ICogcHJpbWl0aXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdHNpemVfdCBjbnQpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhIG1hY3JvIGFsaWFzXG4mIzQzOyAqIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbCBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kXG4mIzQzOyAqIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4gb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlXG4mIzQzOyAqIHRoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCAwZjY0OTA5ZThkMjBlMi4uYWU0MmExMzExZTFkMTggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDUsMTEgJiM0MzsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXG4mIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4mIzQzOyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbiYjNDM7ICogYW5kIHJhaXNlIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlXG4mIzQzOyAqIG91dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4mIzQzO1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbiYjNDM7XHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyAmIzQzOzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0ICovXG4gXHRwYWdlX2ZvbGlvKHBhZ2UpLVx1MDAzZXBnbWFwID0gcGdtYXA7XG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuJiM0Mzt9XG4gXG4tXHQvKlxuLVx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxuLVx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxuLVx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXG4tXHQgKlxuLVx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxuLVx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcbi1cdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxuLVx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuJiM0MztcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiYjNDM7e1xuJiM0MztcdF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcbiBcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHRcdGJyZWFrO1xuJiM0Mzt9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuJiM0MztcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xuJiM0MztcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxuJiM0MzsgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4mIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVx1MDAzZXZpcnR1YWwgbWF5IHN0aWxsIGRlcGVuZFxuJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcbiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4mIzQzO1x0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4mIzQzO1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbiYjNDM7XHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XG4mIzQzO1x0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XG4mIzQzO1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbiB9XG4gXG4gLypcbkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVx1MDAzZXZtZW1tYXBfc2hpZnQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbiYjNDM7XG4gXHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuLVx0XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7XHRcdGlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4mIzQzO1x0XHRcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXG4mIzQzO1x0XHRcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxuJiM0MztcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuJiM0MztcdFx0XHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICYjNDM7MTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4mIzQzO1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuJiM0MztcdFx0XHQgKiBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5NWQ5ODZmOGYwN2I2NDA0ZjZlNmVkZTllMzBkYTE3OWI0YzQwMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNjoxMjoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHkKJiM0MzsgKiBwcmltaXRpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCXNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwltZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI1NDEsMTEgJiM0MzsyNTQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQogewogCXJldHVybiAobWRmLmYgJmd0OyZndDsgU0VDVElPTlNfUEdTSElGVCkgJmFtcDsgU0VDVElPTlNfTUFTSzsKIH0KICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIDA7CkBAIC0yNzY4LDkgJiM0MzsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLAogewogCXNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7CiAJc2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTsKLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1MKLQlzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpOwotI2VuZGlmCiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMjc4LDYgJiM0MzsyNzgsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQogfQogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZQomIzQzOyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYQomIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYSBtYWNybyBhbGlhcwomIzQzOyAqIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbCBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kCiYjNDM7ICogcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlbiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUKJiM0MzsgKiB0aGVyZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZCkKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZQomIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluCiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZQomIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZQomIzQzOyAqIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7Ci0KIAlfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTsKIAogCS8qCkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJICovCiAJcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXAgPSBwZ21hcDsKIAlwYWdlLSZndDt6b25lX2RldmljZV9kYXRhID0gTlVMTDsKJiM0Mzt9CiAKLQkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KLQkgKi8KLQlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7Ci0JY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKLQljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwlfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJaWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKQogCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQkJYnJlYWs7CiYjNDM7fQogCi0JY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6Ci0JCWJyZWFrOwotCX0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLAomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlCiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieQomIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLSZndDt2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmQKJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUKJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0CiYjNDM7CSAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgomIzQzOwkgKi8KJiM0MzsJem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7CiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiB9CiAKIC8qCkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlCiYjNDM7CQkJICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlCiYjNDM7CQkJICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJCQkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQKJiM0MzsJCQkgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwKJiM0MzsJCQkJCQkgICBwZ21hcCwgaGVhZCwgb3JkZXIpOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAJfQogCXByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7CiB9CkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSkKIAkJcmV0dXJuOwpAQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCWlmIChwZm4gPT0gc3RhcnRfcGZuKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUKJiM0MzsJCQkgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZwomIzQzOwkJCSAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbAomIzQzOwkJCSAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LAomIzQzOwkJCQkJCSAgIG5pZCwgcGdtYXApOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlczogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCwgYW5kIGBtbS9tbV9pbml0LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIGZ1bmN0aW9uLCBhbmQgdGhlbiB1c2luZyBpdCB3aXRoaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBhYm91dCBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIHNwZWNpZmljYWxseSBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdCBhbHNvIGluY2x1ZGVzIGFkZGluZyBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGFuZCBgbW92bnRpXzY0YCB0byBgeDg2IHN0cmluZ182NC5oYC4KClRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkIGZvciBaT05FX0RFVklDRSBtZW1vcnksIHdoaWNoIGlzIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIFBNRU0sIGFuZCBzaW1pbGFyIHRlY2hub2xvZ2llcy4gU3VyZSwgd2UgY2FuIGVtdWxhdGUgTlZESU1NIG9yIFBNRU0gZGV2aWNlcyB3aXRoaW4gUUVNVSwgb3IgdXNlIGBtZW1tYXA9Li4uIXNvbWV0aGluZ2AgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9mIFpPTkVfREVWSUNFIG1lbW9yeS4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IHN5emthbGxlcj8KClN5emthbGxlciBjYW4gd29yayB3aXRoIGAvZGV2L2RheGAgaWYgcHJvcGVybHkgY29uZmlndXJlZCwgYnV0IGRvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9uIGl0cyBvd24/IE1heWJlIGl0IGlzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIE5vLCB3YWl0LCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHByb2JlZC4gU28gd2hlbiBhIHBtZW0gb3IgZGF4IGRldmljZSBpcyBpbml0aWFsaXplZC4KClN5emthbGxlciB1c3VhbGx5IGRvZXNuJiMzOTt0IGhvdHBsdWcgcG1lbSBkZXZpY2VzIGR5bmFtaWNhbGx5IHVubGVzcyBpdCYjMzk7cyB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgZHJpdmVycyAobGlrZSBuZGN0bC9udmRpbW0pLiBIbW1tLCBpbnRlcmVzdGluZy4gU28sIGlzIGl0IGV2ZW4gKndvcnRoKiBmdXp6aW5nIHRoaXM/CgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBvcHRpbWl6aW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIGJ5IGxldmVyYWdpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1vdm50aWApLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBNTSBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIHNwZWVkaW5nIHVwIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpZiB0aGVzZSBub24tdGVtcG9yYWwgc3RvcmVzIGFyZSBmYXN0ZXIuCgpPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBhbmQgc2VhcmNoIGZvciBmdXJ0aGVyIHVzYWdlcyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIGNhbGxlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMTE9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjAtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMjE6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNDEtXHQgKi9cbm1tL21lbXJlbWFwLmM6MjQyOlx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXHUwMDI2Tk9ERV9EQVRBKG5pZCktXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXG5tbS9tZW1yZW1hcC5jLTI0My1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbi0tXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xMDA4LS8qXG5tbS9tbV9pbml0LmM6MTAwOTogKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXG5tbS9tbV9pbml0LmMtMTAxMC0gKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuLS1cbm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMTcxLVxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21tX2luaXQuYy0xMTczLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKioKCk9rYXksIHNvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIHRhcmdldCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgd2UgZ290ICpoZXJlKiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgcGFnZW1hcF9yYW5nZWAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcGFnZW1hcF9yYW5nZWAgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdXAgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBwYWdlbWFwX3JhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtcmVtYXAuYy0xNDMtXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbm1tL21lbXJlbWFwLmMtMTQ1LVx0XHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYz0yNjY9dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbi0tXG5tbS9tZW1yZW1hcC5jLTMzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xubW0vbWVtcmVtYXAuYzozMzg6XHRcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXHUwMDI2cGFyYW1zLCBpLCBuaWQpO1xubW0vbWVtcmVtYXAuYy0zMzktXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggbWVtcmVtYXBfcGFnZXMqKgoKUmlnaHQsIHNvIGBtZW1yZW1hcF9wYWdlc2AgaXMgYmVpbmcgY2FsbGVkIGJ5ICpkcml2ZXJzKi4gVGhhdCYjMzk7cyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IHNwYWNlLiBEcml2ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgYXJlIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIHBoeXNpY2FsIGRldmljZXMsIGFuZCBvZnRlbiBuZWVkIHRvIG1hcCBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBpbnRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGtlcm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyIHNwYWNlLCBmb3IgRE1BIG9wZXJhdGlvbnMgb3IgZGlyZWN0IGFjY2Vzcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zOiBXaGF0IGtpbmQgb2YgZHJpdmVycz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmV0d29yayBhZGFwdGVycyBtYXBwaW5nIGJ1ZmZlcnMsIGdyYXBoaWNzIGNhcmRzIGhhbmRsaW5nIGZyYW1lYnVmZmVycywgb3Igc3RvcmFnZSBjb250cm9sbGVycyBkZWFsaW5nIHdpdGggZGlzayBzZWN0b3JzPyBUaGUgc3BlY2lmaWNzIG1hdHRlciBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJcyB0aGlzIGEgY29tbW9uIG9wZXJhdGlvbiBvciBzb21ldGhpbmcgcmVsYXRpdmVseSByYXJlPyBUaGUgZnJlcXVlbmN5IG9mIGl0cyB1c2Ugd2lsbCBnaXZlIGEgY2x1ZSBhcyB0byBpdHMgY3JpdGljYWxpdHkgZm9yIG9wdGltaXphdGlvbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cy4gSG93IGxhcmdlIGFyZSB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgbWFwcGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW5nbGUgcGFnZXMsIG9yIHBvdGVudGlhbGx5IGh1Z2UgYmxvY2tzPyBMYXJnZXIgcmVnaW9ucyBpbXBseSBwb3RlbnRpYWwgZm9yIG1vcmUgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHJlc291cmNlIGNvbnRlbnRpb24uIEFuZCBpcyBpdCBhbiBhcmVhIG9mIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCwgb3IgaXMgdGhpcyBtYXBwaW5nIHB1cmVseSBrZXJuZWwgc3BhY2U/IFNoYXJlZCByZWdpb25zIGNhbiBvcGVuIHVwIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgZXJyb3JzLiBXaGF0IGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlPyBBcmUgd2UgY2hlY2tpbmcgZm9yIHZhbGlkIHBoeXNpY2FsIGFkZHJlc3Nlcz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBtYXBwaW5nIGZhaWxzIOKAkyBkb2VzIGl0IGdyYWNlZnVsbHkgZGVncmFkZSwgb3IgY291bGQgaXQgbGVhZCB0byBzeXN0ZW0gaW5zdGFiaWxpdHk/IFNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmUgYW5vdGhlciBpbXBvcnRhbnQgYXNwZWN0IHRvIGNvbnNpZGVyIGhlcmUgLSBhcmUgdGhlcmUgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBkcml2ZXIgY2FuIGFjdHVhbGx5IGFjY2VzcyB0aGUgcmVxdWVzdGVkIG1lbW9yeT8gSXMgdGhlcmUgYSByaXNrIG9mIG1lbW9yeSBsZWFrcyBpZiBtYXBwaW5ncyBhcmUgbm90IHByb3Blcmx5IHVubWFwcGVkPyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSAqd2h5KiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRyaXZlciBpcyB0cnlpbmcgdG8gKmFjaGlldmUqIHdpdGggYG1lbXJlbWFwX3BhZ2VzYC4gS25vd2luZyB0aGF0IHdpbGwgZW5hYmxlIG1lIHRvIHNlZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZm9sbG93LXVwIHF1ZXN0aW9uczogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgTlVNQSBzeXN0ZW1zLCBhbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgcGFnZSBjYWNoaW5nIGFuZCBjb2hlcmVuY2U/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODUtICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg2OiAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTg5LVx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzoxMTkwOlx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE5MS1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9OTY0PWludCBhZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3Ni1cdC8qXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3Olx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3OC1cdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXHRcdFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXHUwMDNlYWxpZ24gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuZHJpdmVycy9kYXgvZGV2aWNlLmM6NDM1Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MjA3PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxuZHJpdmVycy9kYXgvZnNkZXYuYzoyNzQ6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVx0aWYgKElTX0VSUihhZGRyKSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjctXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcdHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGFkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXHRpZiAoSVNfRVJSKHIpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZjaHVuay1cdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzQtXHRpZiAoSVNfRVJSKHB0cikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVx0cGFnZW1hcC1cdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTAtXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMTpcdCAqIENsYW1wIHRvIE1BWF9GT0xJT19PUkRFUiB0byBhdm9pZCBhIFdBUk4gaW4gbWVtcmVtYXBfcGFnZXMoKSB3aGVuIHRoZSByYW5nZVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMobWVtX2RldiwgcGdtYXApO1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIyOlx0XHRkZXZfZXJyKHZ0bC1cdTAwM2Vtb2R1bGVfZGV2LCBcJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXG5cJiMzNDssIFBUUl9FUlIoYWRkcikpO1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVx0XHRrZnJlZShwZ21hcCk7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz0xNDM9Y29uZmlnIE5WRElNTV9URVNUX0JVSUxEXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXHQgIG90aGVyd2lzZSBoZWxwcyBjYXRjaCBidWlsZCBlcnJvcnMgaW5kdWNlZCBieSBjaGFuZ2VzIHRvIHRoZVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTMtXHQgIGluZnJhc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTktXHRcdHBmbl9zYiA9IG5kX3Bmbi1cdTAwM2VwZm5fc2I7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cdFx0cG1lbS1cdTAwM2VwZ21hcC5vcHMgPSBcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXHUwMDI2cG1lbS1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMyLVx0XHRiYl9yYW5nZSA9IHBtZW0tXHUwMDNlcGdtYXAucmFuZ2U7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzOC0gKiBzaG91bGQgYmUgb2sgd2l0aCBTVUJTRUNUSU9OX1NJWkUgKHNlZSBtZW1yZW1hcF9jb21wYXRfYWxpZ24oKSkuXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvcGNpL3AycGRtYS5jLTQzOC1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jPTU1Mz1kY3NzYmxrX2FkZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cdFx0ZGV2X2luZm8tXHUwMDNlcGdtYXAubnJfcmFuZ2VcdD0gMTtcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZfaW5mby1cdTAwM2VkZXYsIFx1MDAyNmRldl9pbmZvLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVx0XHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYz0zNz1zdGF0aWMgaW50IGZpbGxfbGlzdCh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jOjEyNDpcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cdGlmIChJU19FUlIodmFkZHIpKSB7XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc2PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMTc6XHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExOC1cdCAqIGluaXRpYWxpemUgYSBzdHJ1Y3QgcmVzb3VyY2UgZnJvbSBzY3JhdGNoIChvbmx5IHRoZSBzdGFydFxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTEyNzpcdGZzLVx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2dmRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyOC1cdGlmIChJU19FUlIoZnMtXHUwMDNld2luZG93X2thZGRyKSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjExNjogKiBAcmVmOiByZWZlcmVuY2UgY291bnQgdGhhdCBwaW5zIHRoZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgbWFwcGluZ1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yMjc9dm9pZCB6b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVx0XHRcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMC12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXHQvKlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5MS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjE1LVx0fVxubGliL3Rlc3RfaG1tLmM6NjE2Olx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2ZGV2bWVtLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmxpYi90ZXN0X2htbS5jLTYxNy1cdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XG4tLVxubW0vbWVtcmVtYXAuYz0xNz1zdGF0aWMgREVGSU5FX1hBUlJBWShwZ21hcF9hcnJheSk7XG4tLVxubW0vbWVtcmVtYXAuYy0xOS0vKlxubW0vbWVtcmVtYXAuYzoyMDogKiBUaGUgbWVtcmVtYXAoKSBhbmQgbWVtcmVtYXBfcGFnZXMoKSBpbnRlcmZhY2VzIGFyZSBhbHRlcm5hdGVseSB1c2VkXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxubW0vbWVtcmVtYXAuYzoyMzogKiBtZW1yZW1hcCgpIGNhbiBtYXAgaW5kaXZpZHVhbCBQQUdFX1NJWkUgcGFnZXMuIG1lbXJlbWFwX3BhZ2VzKCkgY2FuXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXG5tbS9tZW1yZW1hcC5jLTI2LSAqXG4tLVxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0xMzEtXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcbm1tL21lbXJlbWFwLmMtMTMzLXtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI2MS0vKlxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XG5tbS9tZW1yZW1hcC5jLTI2NC0gKiBkZXZpY2UgYXZhaWxhYmxlLlxubW0vbWVtcmVtYXAuYy0yNjUtICovXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxubW0vbWVtcmVtYXAuYy0yNjcte1xuLS1cbm1tL21lbXJlbWFwLmMtMzUxLX1cbm1tL21lbXJlbWFwLmM6MzUyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzUzLVxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXG5tbS9tZW1yZW1hcC5jOjM1NTogKiBkZXZtX21lbXJlbWFwX3BhZ2VzIC0gcmVtYXAgYW5kIHByb3ZpZGUgbWVtbWFwIGJhY2tpbmcgZm9yIHRoZSBnaXZlbiByZXNvdXJjZVxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcbi0tXG5tbS9tZW1yZW1hcC5jLTM2Ny0gKiAgICAmIzM5O2xpdmUmIzM5OyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxubW0vbWVtcmVtYXAuYy0zNjktICpcbi0tXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cbm1tL21lbXJlbWFwLmM6Mzc0OnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxubW0vbWVtcmVtYXAuYy0zNzUte1xuLS1cbm1tL21lbXJlbWFwLmMtMzc4LVxubW0vbWVtcmVtYXAuYzozNzk6XHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XG5tbS9tZW1yZW1hcC5jLTM4MC1cdGlmIChJU19FUlIocmV0KSlcbi0tXG5tbS9tZW1yZW1hcC5jLTM4Mi1cbm1tL21lbXJlbWFwLmM6MzgzOlx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXG5tbS9tZW1yZW1hcC5jLTM4NC1cdFx0XHRwZ21hcCk7XG4tLVxubW0vbWVtcmVtYXAuYy0zODgtfVxubW0vbWVtcmVtYXAuYzozODk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM5MC1cbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM5Mi17XG5tbS9tZW1yZW1hcC5jOjM5MzpcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcbm1tL21lbXJlbWFwLmMtMzk0LX1cbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwMj1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MDogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICogaXQgYWZ0ZXIgZWFjaCByYW5nZSBzdWNjZXNzZnVsIG9ubGluaW5nLiBUaHVzIHRoZSB2YWx1ZSBvciBAbnJfcmFuZ2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM9MTA4PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMTU6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMS1cdGlmICghbmZpdF9yZXMpXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlx0XHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzYtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTMtXHRcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg6MjE0OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgd2l0aCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgd2lkZWx5IHVzZWQgYWNyb3NzIHZhcmlvdXMgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGRyaXZlcnMvZGF4L2RldmljZS5jYCB3aXRoaW4gYGRldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9kYXgvZnNkZXYuY2AgZHVyaW5nIGBmc2Rldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBgcG1lbV9hdHRhY2hfZGlza2AsIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2Agd2l0aGluIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAsIGFuZCBhbHNvIGluIGBmcy9mdXNlL3ZpcnRpb19mcy5jYCBkdXJpbmcgYHZpcnRpb19mc19zZXR1cF9kYXhgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBTeXprYWxsZXIgYW5kIGl0cyBwb3RlbnRpYWwgdG8gZXhwbG9pdCB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bSBhbG1vc3QgY2VydGFpbiBJIGNhbiB0cmlnZ2VyIGVpdGhlciBgdmlydGlvX2ZzX3NldHVwX2RheGAsIGBkZXZfZGF4X3Byb2JlYCwgb3IgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCB3aXRoIGZ1enppbmcuCgpXYWl0LCBob2xkIG9uLiBUaGlzIHJlbWluZHMgbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkganVzdCB3YW50IHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNhbGxpbmcgb3JkZXIuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSB0aG91Z2h0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2FzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGFuZCBJJiMzOTttIHJpZ2h0LCB0aGF0JiMzOTtzIGl0LiBPay4gTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTExMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBvdW5kX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21tX2luaXQuYy0xMTMwLVxubW0vbW1faW5pdC5jOjExMzE6c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG5tbS9tbV9pbml0LmMtMTEzMi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTEyMjMtXG5tbS9tbV9pbml0LmM6MTIyNDpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjI1LVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEluaXRpYWxpemF0aW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIFRoZSBjb3JlIGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgdGhlIG9yaWdpbmFsIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbWVtY3B5X25vbnRlbXBvcmFsYCwgYW5kIG9uIHg4NiwgdGhhdCBtZWFucyB1c2luZyBgbWVtY3B5X2ZsdXNoY2FjaGVgLCB3aGljaCB1bHRpbWF0ZWx5IHRyYW5zbGF0ZXMgdG8gYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgbWVtb3J5IHBhZ2VzIGFyZSBpbml0aWFsaXplZC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBBbnl0aW1lIHlvdSYjMzk7cmUgdG91Y2hpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBpbnRyb2R1Y2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCB5b3UmIzM5O3JlIHBvdGVudGlhbGx5IG9wZW5pbmcgdGhlIGRvb3IgdG8gc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBidWdzLiBPcmRlcmluZyBpc3N1ZXMgd2l0aCBub24tdGVtcG9yYWwgc3RvcmVzLCBpbmNvcnJlY3Qgc2l6ZXMsIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCB0aGVyZSBjb3VsZCBiZSBhIHdpZGUgcmFuZ2Ugb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gU28sIG9uIHg4NiwgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBpbXBsZW1lbnRlZCB3aXRoIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGZvciBkaWZmZXJlbnQgZGF0YSBzaXplcy4gT2theSwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhvc2UgaW5zdHJ1Y3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHBhdGNoIGFnYWluIGp1c3QgdG8gZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKYGBgYwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1NjQgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQpgYGAKCk9rYXksIHllcCwgdGhhdCYjMzk7cyB3aGF0IEkgdGhvdWdodC4gRnVuY3Rpb25hbGx5LCBpdCBpcyBleGFjdGx5IHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nLCBzbyB0aGF0JiMzOTtzIHRoZSByZWxldmFudCBjaGFuZ2UuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBrbm93IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIG5lZWRlZCBmb3IgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQW5kIHRvIHVzZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9uIHg4Niwgd2UgbmVlZCBgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE9rYXksIHRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBjb25maWcgZW50YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xOTIyPWNvbmZpZyBBUk02NF9QTUVNXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjQtXHRzZWxlY3QgQVJDSF9IQVNfUE1FTV9BUElcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjYtXHRoZWxwXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaD00ND1leHRlcm4gdm9pZCAqX19tZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ1LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0NjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmg9NDc1PWV4dGVybiBfX211c3RfY2hlY2sgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3Ni1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQ3NzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc4LWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbi0tXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XHRcdDo9IGNsZWFyX3VzZXIubyBkZWxheS5vIGNvcHlfZnJvbV91c2VyLm9cdFx0XFxcbi0tXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS03LVxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6ODpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSAmIzQzOz0gdWFjY2Vzc19mbHVzaGNhY2hlLm9cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTktXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTgtXHRzZWxlY3QgQVJDSF9IQVNfVElDS19CUk9BRENBU1RcdFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE1OTpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2MC1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaW52YWxpZGF0ZV9wbWVtKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02Ni0vKlxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6Njc6ICogQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSBzeW1ib2xzXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02OC0gKi9cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1x0aWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gveDg2L0tjb25maWc6MTAzOlx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXHRcdFx0aWYgWDg2XzY0XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDo4MjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTctXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxODojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTktLyoqXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00OTMtXHRmdWEgPSBudmRpbW1faGFzX2ZsdXNoKG5kX3JlZ2lvbik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDk0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIHx8IGZ1YSBcdTAwM2MgMCkge1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ5NS1cdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDt1bmFibGUgdG8gZ3VhcmFudGVlIHBlcnNpc3RlbmNlIG9mIHdyaXRlc1xcblwmIzM0Oyk7XG4tLVxuaW5jbHVkZS9saW51eC91aW8uaD0yNjE9Ym9vbCBjb3B5X2Zyb21faXRlcl9mdWxsX25vY2FjaGUodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4tLVxuaW5jbHVkZS9saW51eC91aW8uaC0yNjktXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3MDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuaW5jbHVkZS9saW51eC91aW8uaC0yNzEtLypcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3My0gKiBfY29weV9mcm9tX2l0ZXJfZmx1c2hjYWNoZSgpIHRoYW4gX2NvcHlfZnJvbV9pdGVyX25vY2FjaGUoKSBtdXN0IGNoZWNrIGZvclxuaW5jbHVkZS9saW51eC91aW8uaDoyNzQ6ICogSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSBiZWZvcmUgYXNzdW1pbmcgdGhhdCB0aGVcbmluY2x1ZGUvbGludXgvdWlvLmgtMjc1LSAqIGRlc3RpbmF0aW9uIGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUgb24gcmV0dXJuLlxuLS1cbmxpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcbi0tXG5saWIvS2NvbmZpZy01NDQtXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL0tjb25maWctNTQ2LVx0Ym9vbFxuLS1cbmxpYi9pb3ZfaXRlci5jPTI5Mj1FWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKTtcbmxpYi9pb3ZfaXRlci5jLTI5My1cbmxpYi9pb3ZfaXRlci5jOjI5NDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL2lvdl9pdGVyLmMtMjk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaXMgY2hvc2VuLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBzZWUgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHJlcXVpcmVzIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBIbW0sIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQ09ORklHX1pPTkVfREVWSUNFYCBhY3R1YWxseSBlbmFibGVzLCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IHRvIGFzc2VzcyB0aGUgYnJvYWRlciBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDgxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhleSYjMzk7cmUgY29yZSB0byBaT05FX0RFVklDRSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uICBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNlZCBmdXp6aW5nLgoKTXkgbWluZCB0aGVuIHF1aWNrbHkganVtcHMgdG8gaG93IHdlIGNhbiBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgZnVuY3Rpb25zLiAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBnZXRzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHByb2JlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjYWxscyBsaWtlIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCB0aGlzIHZpYSBhIHN5c2NhbGwuIFllcywgdGhhdCYjMzk7cyB0aGUgYW5nbGUhIGBtbWFwYCBvZiBgL2Rldi9kYXhgIGlzIHRoZSBvYnZpb3VzIGZpcnN0IGNhbmRpZGF0ZSwgb3IgcGVyaGFwcyBhbiBgaW9jdGxgIHRoYXQgYWRkcyBtZW1vcnkuIEFsc28sIGBtZW1yZW1hcF9wYWdlc2AgaW4gc29tZSBkcml2ZXIgbWlnaHQgYmUgdnVsbmVyYWJsZSBhbmQgdHJpZ2dlcmFibGUgdmlhIHN5emthbGxlci4KCkZvciBleGFtcGxlLCBgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtYCBpbiBgZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmNgIGNhbGxzIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhpcyBpcyBhIHNvbGlkIGxlYWQuIEFsc28sIGB2aXJ0aW9fZnNfc2V0dXBfZGF4YCBpbiBgZnMvZnVzZS92aXJ0aW9fZnMuY2AgY2FsbHMgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiAgU28sIHdlJiMzOTt2ZSBnb3QgbXVsdGlwbGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgYWN0dWFsIGNvZGUuICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyBuZXcsIHdoaWNoIGlzIGEgZ29vZCBzaWduIGZvciB1bmNvdmVyaW5nIGJ1Z3MuIEl0JiMzOTtzIGFsc28gZGVmaW5lZCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIHdpdGggdGhlIGBtb3ZudGlfKmAgZnVuY3Rpb25zLCBhbmQgYGluY2x1ZGUvbGludXgvbW0uaGAgd2l0aCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAsIGFuZCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgZm9yIGZhbGxiYWNrLiAgVGhlc2UgYXJlIGNoYW5nZXMgd2UgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpEaWdnaW5nIGRlZXBlciwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCB3aXRoaW4gYG1tL21tX2luaXQuY2Agc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdXNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhlIGZ1bmN0aW9uJiMzOTtzIHN0cnVjdHVyZSBpcyBhbHNvIGhlbHBmdWwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiAgQWhhISBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZSwgYnV0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIEZvY3VzU3ltYm9scyBhbmQgYWxzbyBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKRmluYWxseSwgY29uZmlndXJhdGlvbi4gV2UgbmVlZCBgQ09ORklHX1pPTkVfREVWSUNFYCBmb3Igc3VyZS4gVGhlIHg4Ni1zcGVjaWZpYyBgbW92bnRpYCBpbnN0cnVjdGlvbnMgYXJlIGltcGxpY2l0bHkgdGllZCB0byBgQ09ORklHX1g4Nl82NGAgYnV0IGBaT05FX0RFVklDRWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFdhaXQsIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IGluIGBtbS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSAxMjM2IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZW50cmllcyByZXZlYWwgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24uIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBjb250ZXh0IGFuZCBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgaW4gbWluZCBmb3Igc3Vic2VxdWVudCBhbmFseXNpcy4gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciB0aGUgdW5kZXJseWluZyBsb2dpYyBmb3IgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRcbjEyMzE6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIzMjpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjMzOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMzQ6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIzNTpcdFxuMTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4xMjM5Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyNDA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbjEyNDE6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDI6XHRcbjEyNDM6XHRcdGhlbHBcbjEyNDQ6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDU6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDY6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ3Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0ODpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFpPTkVfREVWSUNFYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZ1bmN0aW9uIGlzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kZW50IG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCB0aGF0IG1hY3JvIGlzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aGVuIGBYODZfNjRgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgaXQgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcuCgpUbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBpdCBzaG91bGQgYmUgaW4gYG1tL21tX2luaXQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZXBlciBjb250ZXh0IEkgcmVxdWlyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5OAoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWk9ORV9ERVZJQ0UgTWVtb3J5IE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgc3RhdGljLCBpc24mIzM5O3QgaXQ/JiMzNDsgVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXIgY2FuIHVzZSBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgd2hpY2ggdGhleSB1c3VhbGx5IGFyZSB1bmxlc3MgdGhleSYjMzk7cmUgaW5saW5lZC4gU28sIGxldCYjMzk7cyBjaGVjayBpZiBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGlubGluZWQuIFllcCwgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLCAuLi4pYCwgc28gbm8gZXhwbGljaXQgYGlubGluZWAga2V5d29yZC4KCk5vdywgd2hhdCBhYm91dCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgPyBJJiMzOTtsbCBjaGVjayB0aGF0IG9uZSB0b28uIE9rYXksIGl0JiMzOTtzIGFsc28gYHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKC4uLilgLiBObyBleHBsaWNpdCBgaW5saW5lYCB0aGVyZSBlaXRoZXIsIGJ1dCB0aGUgY29tcGlsZXIgKmNvdWxkKiBiZSBpbmxpbmluZyBpdC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCByZWxpYWJsZSwgSSYjMzk7bGwganVzdCBmb2N1cyBvbiB1c2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGRpcmVjdGx5LgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbi4gQWggeWVzLCBpdCYjMzk7cyBvcHRpbWl6aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBhZ2VgIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3Jlcywgc3BlY2lmaWNhbGx5IGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3Mgbm90IGp1c3QgY29zbWV0aWMuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGRldmljZSBwcm9iZXMsIHRoaW5ncyBsaWtlIERBWCwgUE1FTSwgYW5kIHZpcnRpby1mcyBEQVguIFRoaXMgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBkaXJlY3RseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIFNpbmNlIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGRldmljZSBwcm9iaW5nLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gWWVzLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKUmlnaHQsIGxldCYjMzk7cyBjYWxsIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHN0cnVjdHVyZXMgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiBwYXRocyBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIHRoYXQgdXNlIFpPTkVfREVWSUNFIG1lbW9yeSAoZS5nLiwgREFYLCBQTUVNLCB2aXJ0aW8tZnMgREFYKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHN0cnVjdHVyZXMgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiBwYXRocyBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIHRoYXQgdXNlIFpPTkVfREVWSUNFIG1lbW9yeSAoZS5nLiwgREFYLCBQTUVNLCB2aXJ0aW8tZnMgREFYKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI4LjYxMjUzMTIxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDU0NDUxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI4LjYxMjU0MjE3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExOTAyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTk1ZDk4NmY4ZjA3YjY0MDRmNmU2ZWRlOWUzMGRhMTc5YjRjNDAxN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNjoxMjoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcXG4rICogcHJpbWl0aXZlLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0c2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yNzY4LDkgKzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXFxuIHtcXG4gXFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcXG4gXFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcXG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xcbi1cXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbi0jZW5kaWZcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGEgbWFjcm8gYWxpYXNcXG4rICogc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmRcXG4rICogcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlbiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGVcXG4rICogdGhlcmUuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlcXG4rI2VuZGlmXFxuK1xcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XFxuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NFxcbi0tLSBhL21tL21tX2luaXQuY1xcbisrKyBiL21tL21tX2luaXQuY1xcbkBAIC0xMDA1LDExICsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4rLypcXG4rICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxcbisgKiB0aGUgZnJlZSBwYXRoLCB3aGlsZSB0aGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlXFxuKyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxcbisgKiBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXFxuK1xcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuK1xcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuIHtcXG4tXFxuIFxcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdCAqL1xcbiBcXHRwYWdlX2ZvbGlvKHBhZ2UpLVxcdTAwM2VwZ21hcCA9IHBnbWFwO1xcbiBcXHRwYWdlLVxcdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcXG4rfVxcbiBcXG4tXFx0LypcXG4tXFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxcbi1cXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XFxuLVxcdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxcbi1cXHQgKlxcbi1cXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxcbi1cXHQgKi9cXG4tXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4rc3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbitcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXFxuIFxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbi1cXHRcXHRicmVhaztcXG4rfVxcbiBcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuK1xcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcXG4rICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieVxcbisgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXFxuKyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxcbisgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcXG4rXFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXFxuK1xcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcXG4rXFx0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxcbitcXHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cXG4rXFx0ICovXFxuK1xcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xcbitcXHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xMDgzLDYgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVxcdTAwM2V2bWVtbWFwX3NoaWZ0O1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXFxuQEAgLTEwOTEsMTIgKzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIFxcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cXG4gXFx0ICovXFxuIFxcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XFxuK1xcbiBcXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMTsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuLVxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuLVxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbitcXHRcXHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcXG4rXFx0XFx0XFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXFxuK1xcdFxcdFxcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXFxuK1xcdFxcdFxcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxcbitcXHRcXHRcXHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbiB9XFxuQEAgLTExMTMsNiArMTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XFxuIFxcdGludCBuaWQgPSBwZ2RhdC1cXHUwMDNlbm9kZV9pZDtcXG4rXFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTEzMCw3ICsxMTk5LDIxIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xcbitcXHRcXHRcXHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcXG4rXFx0XFx0XFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjoyOS4xMjUyNzA5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczOTQxNjk4NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTk1ZDk4NmY4ZjA3YjY0MDRmNmU2ZWRlOWUzMGRhMTc5YjRjNDAxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE2OjEyOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aXEgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHU2NCAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTY0ICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKilkc3QpIDogXCJyXCIoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopKGRzdCArIDgpKSA6IFwiclwiKCoodTY0ICopKHNyYyArIDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgcmVsZXZhbnQgZml4ZWQtc2l6ZSBjb3BpZXMgaGVyZSBhcmUgdGhlXG4rXHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbitcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4rXHRcdFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXG4rXHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y2FzZSAzMjpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA0ODpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgMzIsIHNyYyArIDMyKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDY0OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDgwOlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgOTY6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbitcbiBcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuK1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4rICogcHJpbWl0aXZlLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdHNpemVfdCBjbnQpXG4re1xuK1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhIG1hY3JvIGFsaWFzXG4rICogc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmRcbisgKiBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZVxuKyAqIHRoZXJlLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbisgKiBvdXQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHQvKlxuK1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbitcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4rXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4rXHQgKi9cbitcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4rXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbit9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4rXHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4rXHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbitcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbitcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuK1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuK1x0XHRcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI5LjEyNTI3Mjk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0MzA3MzAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIGFuZCBgbW0vbW1faW5pdC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgbWVtY3B5X25vbnRlbXBvcmFsYCBmdW5jdGlvbiwgYW5kIHRoZW4gdXNpbmcgaXQgd2l0aGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbGwgYWJvdXQgaW5pdGlhbGl6aW5nIGBzdHJ1Y3QgcGFnZWAgc3RydWN0dXJlcyBzcGVjaWZpY2FsbHkgZm9yIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgYWxzbyBpbmNsdWRlcyBhZGRpbmcgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgdG8gYHg4NiBzdHJpbmdfNjQuaGAuXG5cblRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkIGZvciBaT05FX0RFVklDRSBtZW1vcnksIHdoaWNoIGlzIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIFBNRU0sIGFuZCBzaW1pbGFyIHRlY2hub2xvZ2llcy4gU3VyZSwgd2UgY2FuIGVtdWxhdGUgTlZESU1NIG9yIFBNRU0gZGV2aWNlcyB3aXRoaW4gUUVNVSwgb3IgdXNlIGBtZW1tYXA9Li4uIXNvbWV0aGluZ2AgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9mIFpPTkVfREVWSUNFIG1lbW9yeS4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IHN5emthbGxlcj9cblxuU3l6a2FsbGVyIGNhbiB3b3JrIHdpdGggYC9kZXYvZGF4YCBpZiBwcm9wZXJseSBjb25maWd1cmVkLCBidXQgZG9lcyBpdCBkaXJlY3RseSBjYWxsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgb24gaXRzIG93bj8gTWF5YmUgaXQgaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1Zy4gTm8sIHdhaXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcHJvYmVkLiBTbyB3aGVuIGEgcG1lbSBvciBkYXggZGV2aWNlIGlzIGluaXRpYWxpemVkLlxuXG5TeXprYWxsZXIgdXN1YWxseSBkb2Vzbid0IGhvdHBsdWcgcG1lbSBkZXZpY2VzIGR5bmFtaWNhbGx5IHVubGVzcyBpdCdzIHRocm91Z2ggc29tZSBzcGVjaWZpYyBkcml2ZXJzIChsaWtlIG5kY3RsL252ZGltbSkuIEhtbW0sIGludGVyZXN0aW5nLiBTbywgaXMgaXQgZXZlbiAqd29ydGgqIGZ1enppbmcgdGhpcz9cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBieSBsZXZlcmFnaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKGBtb3ZudGlgKS4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBNTSBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIHNwZWVkaW5nIHVwIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpZiB0aGVzZSBub24tdGVtcG9yYWwgc3RvcmVzIGFyZSBmYXN0ZXIuXG5cbk9rYXksIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgYW5kIHNlYXJjaCBmb3IgZnVydGhlciB1c2FnZXMgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGNhbGxlZCBhbmQgaG93IGl0J3MgdXNlZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjozNS43NjgzNDkzODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MDcxNjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMTE9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMjE6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTcxLVxcbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTExNzMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjM4LjgzOTA3OTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzQ3NzI5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKipcblxuT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgdGFyZ2V0LCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGludm9rZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgd2UgZ290ICpoZXJlKiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgcGFnZW1hcF9yYW5nZWAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcGFnZW1hcF9yYW5nZWAgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIHVwIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgcGFnZW1hcF9yYW5nZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0Mi4wMTM4NTQ0MzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5MDgzMDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTE0My1cXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG5tbS9tZW1yZW1hcC5jLTE0NS1cXHRcXHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zMzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlOyBpKyspIHtcXG5tbS9tZW1yZW1hcC5jOjMzODpcXHRcXHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFxcdTAwMjZwYXJhbXMsIGksIG5pZCk7XFxubW0vbWVtcmVtYXAuYy0zMzktXFx0XFx0aWYgKGVycm9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0NC4yMDQ3MDQxMjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ1MjEwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIG1lbXJlbWFwX3BhZ2VzKipcblxuUmlnaHQsIHNvIGBtZW1yZW1hcF9wYWdlc2AgaXMgYmVpbmcgY2FsbGVkIGJ5ICpkcml2ZXJzKi4gVGhhdCdzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEl0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBoYXJkd2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IHNwYWNlLiBEcml2ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgYXJlIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIHBoeXNpY2FsIGRldmljZXMsIGFuZCBvZnRlbiBuZWVkIHRvIG1hcCBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBpbnRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGtlcm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyIHNwYWNlLCBmb3IgRE1BIG9wZXJhdGlvbnMgb3IgZGlyZWN0IGFjY2Vzcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IFdoYXQga2luZCBvZiBkcml2ZXJzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXR3b3JrIGFkYXB0ZXJzIG1hcHBpbmcgYnVmZmVycywgZ3JhcGhpY3MgY2FyZHMgaGFuZGxpbmcgZnJhbWVidWZmZXJzLCBvciBzdG9yYWdlIGNvbnRyb2xsZXJzIGRlYWxpbmcgd2l0aCBkaXNrIHNlY3RvcnM/IFRoZSBzcGVjaWZpY3MgbWF0dGVyIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIElzIHRoaXMgYSBjb21tb24gb3BlcmF0aW9uIG9yIHNvbWV0aGluZyByZWxhdGl2ZWx5IHJhcmU/IFRoZSBmcmVxdWVuY3kgb2YgaXRzIHVzZSB3aWxsIGdpdmUgYSBjbHVlIGFzIHRvIGl0cyBjcml0aWNhbGl0eSBmb3Igb3B0aW1pemF0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMuIEhvdyBsYXJnZSBhcmUgdGhlIG1lbW9yeSByZWdpb25zIGJlaW5nIG1hcHBlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2luZ2xlIHBhZ2VzLCBvciBwb3RlbnRpYWxseSBodWdlIGJsb2Nrcz8gTGFyZ2VyIHJlZ2lvbnMgaW1wbHkgcG90ZW50aWFsIGZvciBtb3JlIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zIGFuZCByZXNvdXJjZSBjb250ZW50aW9uLiBBbmQgaXMgaXQgYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwsIG9yIGlzIHRoaXMgbWFwcGluZyBwdXJlbHkga2VybmVsIHNwYWNlPyBTaGFyZWQgcmVnaW9ucyBjYW4gb3BlbiB1cCB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBlcnJvcnMuIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgaW4gcGxhY2U/IEFyZSB3ZSBjaGVja2luZyBmb3IgdmFsaWQgcGh5c2ljYWwgYWRkcmVzc2VzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIG1hcHBpbmcgZmFpbHMg4oCTIGRvZXMgaXQgZ3JhY2VmdWxseSBkZWdyYWRlLCBvciBjb3VsZCBpdCBsZWFkIHRvIHN5c3RlbSBpbnN0YWJpbGl0eT8gU2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBhbm90aGVyIGltcG9ydGFudCBhc3BlY3QgdG8gY29uc2lkZXIgaGVyZSAtIGFyZSB0aGVyZSBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGRyaXZlciBjYW4gYWN0dWFsbHkgYWNjZXNzIHRoZSByZXF1ZXN0ZWQgbWVtb3J5PyBJcyB0aGVyZSBhIHJpc2sgb2YgbWVtb3J5IGxlYWtzIGlmIG1hcHBpbmdzIGFyZSBub3QgcHJvcGVybHkgdW5tYXBwZWQ/IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSAqd2h5KiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRyaXZlciBpcyB0cnlpbmcgdG8gKmFjaGlldmUqIHdpdGggYG1lbXJlbWFwX3BhZ2VzYC4gS25vd2luZyB0aGF0IHdpbGwgZW5hYmxlIG1lIHRvIHNlZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBmb2xsb3ctdXAgcXVlc3Rpb25zOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBwYWdlIGNhY2hpbmcgYW5kIGNvaGVyZW5jZT8gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0OC44NDk5NDE2MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NjI5NTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1yZW1hcF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XFx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXFx0LypcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3OlxcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVxcdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVxcdFxcdFxcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVxcdTAwM2VhbGlnbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XFx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVxcdGlmIChJU19FUlIocikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZjaHVuay1cXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cXHRwYWdlbWFwLVxcdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XFx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVxcdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XFx0XFx0ZGV2X2Vycih2dGwtXFx1MDAzZW1vZHVsZV9kZXYsIFxcXCJkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXFxcblxcXCIsIFBUUl9FUlIoYWRkcikpO1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cXHRcXHRrZnJlZShwZ21hcCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVxcdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XFx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cXHQgIGluZnJhc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cXHRcXHRwZm5fc2IgPSBuZF9wZm4tXFx1MDAzZXBmbl9zYjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXFx0XFx0cG1lbS1cXHUwMDNlcGdtYXAub3BzID0gXFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcXHUwMDI2cG1lbS1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXFx0XFx0YmJfcmFuZ2UgPSBwbWVtLVxcdTAwM2VwZ21hcC5yYW5nZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXFx0XFx0ZGV2X2luZm8tXFx1MDAzZXBnbWFwLm5yX3JhbmdlXFx0PSAxO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2luZm8tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cXHRcXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0OlxcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXFx0aWYgKElTX0VSUih2YWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XFx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXFxuLS1cXG5saWIvdGVzdF9obW0uYy02MTUtXFx0fVxcbmxpYi90ZXN0X2htbS5jOjYxNjpcXHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxubGliL3Rlc3RfaG1tLmMtNjE3LVxcdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTktLypcXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxcbm1tL21lbXJlbWFwLmMtMjYtICpcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTEzMS1cXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5tbS9tZW1yZW1hcC5jLTEzMy17XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjYxLS8qXFxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XFxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXFxubW0vbWVtcmVtYXAuYy0yNjUtICovXFxubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcXG5tbS9tZW1yZW1hcC5jLTI2Ny17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM1MS19XFxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzUzLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzgtXFxubW0vbWVtcmVtYXAuYzozNzk6XFx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xcbm1tL21lbXJlbWFwLmMtMzgwLVxcdGlmIChJU19FUlIocmV0KSlcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzgyLVxcbm1tL21lbXJlbWFwLmM6MzgzOlxcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxcbm1tL21lbXJlbWFwLmMtMzg0LVxcdFxcdFxcdHBnbWFwKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzg4LX1cXG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTM5MC1cXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbm1tL21lbXJlbWFwLmMtMzkyLXtcXG5tbS9tZW1yZW1hcC5jOjM5MzpcXHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XFxubW0vbWVtcmVtYXAuYy0zOTQtfVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSArPSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgKz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2VcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVxcdGlmICghbmZpdF9yZXMpXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcXHRcXHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cXHRcXHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjUwLjgwNjI0NTQ4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDI1MTkyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgd2l0aCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHdpZGVseSB1c2VkIGFjcm9zcyB2YXJpb3VzIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBjYWxsZWQgYnkgYGRyaXZlcnMvZGF4L2RldmljZS5jYCB3aXRoaW4gYGRldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9kYXgvZnNkZXYuY2AgZHVyaW5nIGBmc2Rldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBgcG1lbV9hdHRhY2hfZGlza2AsIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2Agd2l0aGluIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAsIGFuZCBhbHNvIGluIGBmcy9mdXNlL3ZpcnRpb19mcy5jYCBkdXJpbmcgYHZpcnRpb19mc19zZXR1cF9kYXhgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IFN5emthbGxlciBhbmQgaXRzIHBvdGVudGlhbCB0byBleHBsb2l0IHRoaXMgY29kZSBwYXRoLiBJJ20gYWxtb3N0IGNlcnRhaW4gSSBjYW4gdHJpZ2dlciBlaXRoZXIgYHZpcnRpb19mc19zZXR1cF9kYXhgLCBgZGV2X2RheF9wcm9iZWAsIG9yIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgd2l0aCBmdXp6aW5nLlxuXG5XYWl0LCBob2xkIG9uLiBUaGlzIHJlbWluZHMgbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkganVzdCB3YW50IHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNhbGxpbmcgb3JkZXIuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSB0aG91Z2h0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2FzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGFuZCBJJ20gcmlnaHQsIHRoYXQncyBpdC4gT2suIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTI6NTYuMTA4NzY4MDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzOTgyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21tX2luaXQuYy0xMTMwLVxcbm1tL21tX2luaXQuYzoxMTMxOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbm1tL21tX2luaXQuYy0xMTMyLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jPTExNzI9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjIzLVxcbm1tL21tX2luaXQuYzoxMjI0OlxcdFxcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXFxubW0vbW1faW5pdC5jLTEyMjUtXFx0XFx0XFx0XFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTI6NTcuODcyNzYyODIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzY2MTc3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEluaXRpYWxpemF0aW9uIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCB0aGUgb3JpZ2luYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBhbmQgb24geDg2LCB0aGF0IG1lYW5zIHVzaW5nIGBtZW1jcHlfZmx1c2hjYWNoZWAsIHdoaWNoIHVsdGltYXRlbHkgdHJhbnNsYXRlcyB0byBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IG1lbW9yeSBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBBbnl0aW1lIHlvdSdyZSB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGludHJvZHVjaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMsIHlvdSdyZSBwb3RlbnRpYWxseSBvcGVuaW5nIHRoZSBkb29yIHRvIHN1YnRsZSBidXQgZGV2YXN0YXRpbmcgYnVncy4gT3JkZXJpbmcgaXNzdWVzIHdpdGggbm9uLXRlbXBvcmFsIHN0b3JlcywgaW5jb3JyZWN0IHNpemVzLCBhbnkgZGV2aWF0aW9uIGZyb20gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhlcmUgY291bGQgYmUgYSB3aWRlIHJhbmdlIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gU28sIG9uIHg4NiwgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBpbXBsZW1lbnRlZCB3aXRoIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGZvciBkaWZmZXJlbnQgZGF0YSBzaXplcy4gT2theSwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhvc2UgaW5zdHJ1Y3Rpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgcGF0Y2ggYWdhaW4ganVzdCB0byBkb3VibGUgY2hlY2sgdGhhdCBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy5cblxuYGBgY1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbmBgYFxuXG5Pa2F5LCB5ZXAsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gRnVuY3Rpb25hbGx5LCBpdCBpcyBleGFjdGx5IHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nLCBzbyB0aGF0J3MgdGhlIHJlbGV2YW50IGNoYW5nZS5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2Uga25vdyBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBuZWVkZWQgZm9yIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFuZCB0byB1c2UgYG1lbWNweV9mbHVzaGNhY2hlYCBvbiB4ODYsIHdlIG5lZWQgYENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBPa2F5LCB0aW1lIHRvIGNoZWNrIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjA1LjQwOTM4NTc1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwODc3NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVxcdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cXHRoZWxwXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ1LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg6NDY6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTQ3NT1leHRlcm4gX19tdXN0X2NoZWNrIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbik7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc2LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQ3NzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3OC1leHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7XFxuLS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XFx0XFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1xcdFxcdFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTctXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6ODpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSArPSB1YWNjZXNzX2ZsdXNoY2FjaGUub1xcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTktXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVxcdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFxcdFxcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYz02ND1FWFBPUlRfU1lNQk9MX0dQTChhcmNoX2ludmFsaWRhdGVfcG1lbSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02Ni0vKlxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjY3OiAqIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUgc3ltYm9sc1xcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY4LSAqL1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcXHRpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3g4Ni9LY29uZmlnOjEwMzpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xMDQtXFx0c2VsZWN0IEFSQ0hfSEFTX0NPUFlfTUNcXHRcXHRcXHRpZiBYODZfNjRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDo4MjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTctXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6MTg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xOS0vKipcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00OTMtXFx0ZnVhID0gbnZkaW1tX2hhc19mbHVzaChuZF9yZWdpb24pO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0OTQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIHx8IGZ1YSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDk1LVxcdFxcdGRldl93YXJuKGRldiwgXFxcInVuYWJsZSB0byBndWFyYW50ZWUgcGVyc2lzdGVuY2Ugb2Ygd3JpdGVzXFxcXG5cXFwiKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmg9MjYxPWJvb2wgY29weV9mcm9tX2l0ZXJfZnVsbF9ub2NhY2hlKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNjktXFxuaW5jbHVkZS9saW51eC91aW8uaDoyNzA6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3MS0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNzMtICogX2NvcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUoKSB0aGFuIF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKCkgbXVzdCBjaGVjayBmb3JcXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3NDogKiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIGJlZm9yZSBhc3N1bWluZyB0aGF0IHRoZVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjc1LSAqIGRlc3RpbmF0aW9uIGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUgb24gcmV0dXJuLlxcbi0tXFxubGliL0tjb25maWc9NTQyPWNvbmZpZyBVQUNDRVNTX01FTUNQWVxcbi0tXFxubGliL0tjb25maWctNTQ0LVxcbmxpYi9LY29uZmlnOjU0NTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxubGliL0tjb25maWctNTQ2LVxcdGJvb2xcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTI5Mj1FWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKTtcXG5saWIvaW92X2l0ZXIuYy0yOTMtXFxubGliL2lvdl9pdGVyLmM6Mjk0OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxubGliL2lvdl9pdGVyLmMtMjk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MDcuNDE4MTc5MzM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjEzNjQ5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaXMgY2hvc2VuLiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4gTm93LCBJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVxdWlyZXMgYENPTkZJR19aT05FX0RFVklDRWAuIEhtbSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFjdHVhbGx5IGVuYWJsZXMsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgdG8gYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjEwLjUzOTU0ODE1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODAxMzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoxMi41MTc1OTE0OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MTY1ODY1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFpPTkVfREVWSUNFIE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB3aXRoaW4gYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGNvcmUgdG8gWk9ORV9ERVZJQ0UgbWVtb3J5IGluaXRpYWxpemF0aW9uLiAgVGhhdCdzIG91ciBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNlZCBmdXp6aW5nLlxuXG5NeSBtaW5kIHRoZW4gcXVpY2tseSBqdW1wcyB0byBob3cgd2UgY2FuIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGVzZSBmdW5jdGlvbnMuICBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGdldHMgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUsIHNwZWNpZmljYWxseSB0aHJvdWdoIGNhbGxzIGxpa2UgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHJlYWNoIHRoaXMgdmlhIGEgc3lzY2FsbC4gWWVzLCB0aGF0J3MgdGhlIGFuZ2xlISBgbW1hcGAgb2YgYC9kZXYvZGF4YCBpcyB0aGUgb2J2aW91cyBmaXJzdCBjYW5kaWRhdGUsIG9yIHBlcmhhcHMgYW4gYGlvY3RsYCB0aGF0IGFkZHMgbWVtb3J5LiBBbHNvLCBgbWVtcmVtYXBfcGFnZXNgIGluIHNvbWUgZHJpdmVyIG1pZ2h0IGJlIHZ1bG5lcmFibGUgYW5kIHRyaWdnZXJhYmxlIHZpYSBzeXprYWxsZXIuXG5cbkZvciBleGFtcGxlLCBgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtYCBpbiBgZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmNgIGNhbGxzIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhpcyBpcyBhIHNvbGlkIGxlYWQuIEFsc28sIGB2aXJ0aW9fZnNfc2V0dXBfZGF4YCBpbiBgZnMvZnVzZS92aXJ0aW9fZnMuY2AgY2FsbHMgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiAgU28sIHdlJ3ZlIGdvdCBtdWx0aXBsZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgYWN0dWFsIGNvZGUuICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaXQncyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBUaGlzIGlzIG5ldywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHVuY292ZXJpbmcgYnVncy4gSXQncyBhbHNvIGRlZmluZWQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCB3aXRoIHRoZSBgbW92bnRpXypgIGZ1bmN0aW9ucywgYW5kIGBpbmNsdWRlL2xpbnV4L21tLmhgIHdpdGggYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGZvciBmYWxsYmFjay4gIFRoZXNlIGFyZSBjaGFuZ2VzIHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLlxuXG5EaWdnaW5nIGRlZXBlciwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCB3aXRoaW4gYG1tL21tX2luaXQuY2Agc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdXNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhlIGZ1bmN0aW9uJ3Mgc3RydWN0dXJlIGlzIGFsc28gaGVscGZ1bCBhbmQgaXQncyBjYWxsZWQgYnkgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gIEFoYSEgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZXhwb3N1cmUsIGJ1dCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGV4cG9ydGVkLiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIEZvY3VzU3ltYm9scyBhbmQgYWxzbyBgbWVtbWFwX2luaXRfY29tcG91bmRgLlxuXG5GaW5hbGx5LCBjb25maWd1cmF0aW9uLiBXZSBuZWVkIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGZvciBzdXJlLiBUaGUgeDg2LXNwZWNpZmljIGBtb3ZudGlgIGluc3RydWN0aW9ucyBhcmUgaW1wbGljaXRseSB0aWVkIHRvIGBDT05GSUdfWDg2XzY0YCBidXQgYFpPTkVfREVWSUNFYCBzaG91bGQgYmUgc3VmZmljaWVudC4gV2FpdCwgYFpPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU3OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyMy4yMzQxODI3MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjk4ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MjMuMzA0NDkxMjI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTg2MDY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEyMzYgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJ20gZGVhbGluZyB3aXRoLiBJIGhhdmUgYSBodW5jaCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBlbnRyaWVzIHJldmVhbCBhYm91dCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGRlcGVuZGVuY2llcywgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbnRleHQgYW5kIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBpbiBtaW5kIGZvciBzdWJzZXF1ZW50IGFuYWx5c2lzLiBJJ20gaG9waW5nIHRvIHVuY292ZXIgdGhlIHVuZGVybHlpbmcgbG9naWMgZm9yIHRoaXMgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyOC45MDMxMDMwODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXG4xMjMxOlxcdGNvbmZpZyBaT05FX0RNQTMyXFxuMTIzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMzM6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxuMTIzNDpcXHRcXHRkZWZhdWx0IHkgaWYgQVJNNjRcXG4xMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyOC45MDMyOTYyNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwNTA5NDY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFpPTkVfREVWSUNFYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZ1bmN0aW9uIGlzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kZW50IG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCB0aGF0IG1hY3JvIGlzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aGVuIGBYODZfNjRgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgaXQgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmUgSSdtIGV4YW1pbmluZy5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgaXQgc2hvdWxkIGJlIGluIGBtbS9tbV9pbml0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWVwZXIgY29udGV4dCBJIHJlcXVpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MzQuMzA4Mzk1MDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMDAyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbV9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE3MS1cXG5tbS9tbV9pbml0LmM6MTE3Mjp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy0xMTczLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzozNC44MDY0MDk1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTc5NTQ4ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFpPTkVfREVWSUNFIE1lbW9yeSBPcHRpbWl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2FpdCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBzdGF0aWMsIGlzbid0IGl0P1wiIFRoZW4sIEkgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBsb25nIGFzIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgd2hpY2ggdGhleSB1c3VhbGx5IGFyZSB1bmxlc3MgdGhleSdyZSBpbmxpbmVkLiBTbywgbGV0J3MgY2hlY2sgaWYgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBpbmxpbmVkLiBZZXAsIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLCAuLi4pYCwgc28gbm8gZXhwbGljaXQgYGlubGluZWAga2V5d29yZC5cblxuTm93LCB3aGF0IGFib3V0IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWA/IEknbGwgY2hlY2sgdGhhdCBvbmUgdG9vLiBPa2F5LCBpdCdzIGFsc28gYHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKC4uLilgLiBObyBleHBsaWNpdCBgaW5saW5lYCB0aGVyZSBlaXRoZXIsIGJ1dCB0aGUgY29tcGlsZXIgKmNvdWxkKiBiZSBpbmxpbmluZyBpdC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCByZWxpYWJsZSwgSSdsbCBqdXN0IGZvY3VzIG9uIHVzaW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgZGlyZWN0bHkuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbi4gQWggeWVzLCBpdCdzIG9wdGltaXppbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGFnZWAgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBzcGVjaWZpY2FsbHkgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIG5vdCBqdXN0IGNvc21ldGljLiBBbmQsIGNydWNpYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBkZXZpY2UgcHJvYmVzLCB0aGluZ3MgbGlrZSBEQVgsIFBNRU0sIGFuZCB2aXJ0aW8tZnMgREFYLiBUaGlzIG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBkaXJlY3RseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIFNpbmNlIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggZGV2aWNlIHByb2JpbmcsIHdoaWNoIGFyZSBwcmV0dHkgY29tbW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gZnV6ei5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjayB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gWWVzLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLlxuXG5SaWdodCwgbGV0J3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTgsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjQyLjk4NTk2MTk0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDAyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIG9wdGltaXphdGlvbiBmb3IgaW5pdGlhbGl6aW5nIGBzdHJ1Y3QgcGFnZWAgc3RydWN0dXJlcyBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIHBhdGhzIGFuZCB4ODYgc3RyaW5nIHJvdXRpbmVzLiBJdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgdGhhdCB1c2UgWk9ORV9ERVZJQ0UgbWVtb3J5IChlLmcuLCBEQVgsIFBNRU0sIHZpcnRpby1mcyBEQVgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 15:56:43 +0000 UTC FinishedAt: 2026-07-20 16:13:45 +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": "e57d6e9e20b551e4910d7a6331a81775c3ad6693", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "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": "e57d6e9e20b551e4910d7a6331a81775c3ad6693", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZONE_DEVICE" ], "series_id": "fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memmap_init_zone_device", "memmap_init_compound" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1OTVkOTg2ZjhmMDdiNjQwNGY2ZTZlZGU5ZTMwZGExNzliNGM0MDE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTY6MTI6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxuIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7XG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlKFwmIzM0O21vdm50aXEgJTEsICUwXCYjMzQ7XG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7PW1cJiMzNDsoKih1NjQgKilkc3QpXG4mIzQzO1x0XHQgICAgIDogXCYjMzQ7clwmIzM0OygqKGNvbnN0IHU2NCAqKXNyYylcbiYjNDM7XHRcdCAgICAgOiBcJiMzNDttZW1vcnlcJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuJiM0Mzt7XG4mIzQzO1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV84KGRzdCAmIzQzOyA4LCBzcmMgJiM0MzsgOCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMTYoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4mIzQzO3tcbiYjNDM7XHRtb3ZudGlfMzIoZHN0LCBzcmMpO1xuJiM0MztcdG1vdm50aV8zMihkc3QgJiM0MzsgMzIsIHNyYyAmIzQzOyAzMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHNpemVfdCBjbnQpXG4ge1xuIFx0aWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGNudCkpIHtcbiBcdFx0c3dpdGNoIChjbnQpIHtcbkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcJiMzNDttb3ZudGlxICUxLCAlMFwmIzM0OyA6IFwmIzM0Oz1tXCYjMzQ7KCoodTY0ICopZHN0KSA6IFwmIzM0O3JcJiMzNDsoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCYjMzQ7bW92bnRpcSAlMSwgJTBcJiMzNDsgOiBcJiMzNDs9bVwmIzM0OygqKHU2NCAqKShkc3QgJiM0MzsgOCkpIDogXCYjMzQ7clwmIzM0OygqKHU2NCAqKShzcmMgJiM0MzsgOCkpKTtcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxuJiM0MztcdFx0XHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxuJiM0MztcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4mIzQzO1x0XHRcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxuJiM0MztcdFx0XHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhc2UgMzI6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGNhc2UgNDg6XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcbiYjNDM7XHRcdFx0XHRtb3ZudGlfMTYoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA2NDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XHRcdFx0Y2FzZSA4MDpcbiYjNDM7XHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuJiM0MztcdFx0XHRcdG1vdm50aV8xNihkc3QgJiM0MzsgNjQsIHNyYyAmIzQzOyA2NCk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHRjYXNlIDk2OlxuJiM0MztcdFx0XHRcdG1vdm50aV82NChkc3QsIHNyYyk7XG4mIzQzO1x0XHRcdFx0bW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRfX21lbWNweV9mbHVzaGNhY2hlKGRzdCwgc3JjLCBjbnQpO1xuIH1cbiYjNDM7XG4mIzQzOyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuJiM0MzsvKlxuJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcbiYjNDM7ICogcHJpbWl0aXZlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcbiYjNDM7XHRcdHNpemVfdCBjbnQpXG4mIzQzO3tcbiYjNDM7XHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaFxuaW5kZXggNDg1ZGY5YzJkYmRkYjMuLjQzMzQzYmZjZTQ5MzZlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmhcbkBAIC0yNTQxLDExICYjNDM7MjU0MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzZWN0aW9uKVxuIFx0cGFnZS1cdTAwM2VmbGFncy5mIHw9IChzZWN0aW9uIFx1MDAyNiBTRUNUSU9OU19NQVNLKSBcdTAwM2NcdTAwM2MgU0VDVElPTlNfUEdTSElGVDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtZW1kZXNjX3NlY3Rpb24obWVtZGVzY19mbGFnc190IG1kZilcbiB7XG4gXHRyZXR1cm4gKG1kZi5mIFx1MDAzZVx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcdTAwMjYgU0VDVElPTlNfTUFTSztcbiB9XG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxuIHtcbiBcdHJldHVybiAwO1xuQEAgLTI3NjgsOSAmIzQzOzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXG4ge1xuIFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcbiBcdHNldF9wYWdlX25vZGUocGFnZSwgbm9kZSk7XG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xuLVx0c2V0X3BhZ2Vfc2VjdGlvbihwYWdlLCBwZm5fdG9fc2VjdGlvbl9ucihwZm4pKTtcbi0jZW5kaWZcbiYjNDM7XHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgJiM0MzsyNzgsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmbmRlZiBtZW1jcHlfbm9udGVtcG9yYWxcbiYjNDM7LypcbiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZVxuJiM0MzsgKiBhcmNoaXRlY3R1cmUgaGFzIGEgc3VpdGFibGUgYmFja2VuZC4gQXJjaGl0ZWN0dXJlcyB3aXRob3V0IGFcbiYjNDM7ICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhIG1hY3JvIGFsaWFzXG4mIzQzOyAqIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbCBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kXG4mIzQzOyAqIHByZXNlcnZlIHRoZSB1c3VhbCBGT1JUSUZZIGNvdmVyYWdlIHdoZW4gb2JqZWN0IHNpemVzIHJlbWFpbiB2aXNpYmxlXG4mIzQzOyAqIHRoZXJlLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XG4gY2hhciAqc3RycmVwbGFjZShjaGFyICpzdHIsIGNoYXIgb2xkLCBjaGFyIG5ldyk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCAwZjY0OTA5ZThkMjBlMi4uYWU0MmExMzExZTFkMTggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTEwMDUsMTEgJiM0MzsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuIH1cbiBcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXG4tc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXG4mIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXG4mIzQzOyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbiYjNDM7ICogYW5kIHJhaXNlIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlXG4mIzQzOyAqIG91dC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXG4mIzQzO1x0ICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2VcbiYjNDM7XHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4mIzQzO1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyAmIzQzOzEwNTQsNTQgQEAgc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0ICovXG4gXHRwYWdlX2ZvbGlvKHBhZ2UpLVx1MDAzZXBnbWFwID0gcGdtYXA7XG4gXHRwYWdlLVx1MDAzZXpvbmVfZGV2aWNlX2RhdGEgPSBOVUxMO1xuJiM0Mzt9XG4gXG4tXHQvKlxuLVx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxuLVx0ICogZGlyZWN0bHkgdG8gdGhlIGRyaXZlciBwYWdlIGFsbG9jYXRvciB3aGljaCB3aWxsIHNldCB0aGUgcGFnZSBjb3VudFxuLVx0ICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuXG4tXHQgKlxuLVx0ICogTUVNT1JZX1RZUEVfR0VORVJJQyBhbmQgTUVNT1JZX1RZUEVfRlNfREFYIHBhZ2VzIGF1dG9tYXRpY2FsbHkgaGF2ZVxuLVx0ICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXJcbi1cdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxuLVx0ICovXG4tXHRzd2l0Y2ggKHBnbWFwLVx1MDAzZXR5cGUpIHtcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9GU19EQVg6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcbi1cdGNhc2UgTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOlxuJiM0MztzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuJiM0MztcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiYjNDM7e1xuJiM0MztcdF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdGlmIChwYWdlbWFwX3JlcXVpcmVzX3JlZmNvdW50X3Jlc2V0KHBnbWFwKSlcbiBcdFx0c2V0X3BhZ2VfY291bnQocGFnZSwgMCk7XG4tXHRcdGJyZWFrO1xuJiM0Mzt9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxuJiM0MztcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgb3JkZXIpXG4mIzQzO3tcbiYjNDM7XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbiYjNDM7XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xuJiM0MztcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiAmIzM5O3RlbXBsYXRlJiMzOTsgaXMgYSByZXVzYWJsZSBwYWdlIHByb3RvdHlwZSByYXRoZXIgdGhhbiBhIHN0cmljdGx5IGltbXV0YWJsZVxuJiM0MzsgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4mIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLVx1MDAzZXZpcnR1YWwgbWF5IHN0aWxsIGRlcGVuZFxuJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmVcbiYjNDM7ICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuJiM0Mzt7XG4mIzQzO1x0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTtcbiYjNDM7I2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4mIzQzO1x0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXG4mIzQzO1x0XHRzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiAmIzM5O3RlbXBsYXRlJiMzOTsgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbiYjNDM7XHQgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0XG4mIzQzO1x0ICogdG8gdGhlIGRlc3RpbmF0aW9uIHBhZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0em9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7XG4mIzQzO1x0bWVtY3B5X25vbnRlbXBvcmFsKHBhZ2UsIHRlbXBsYXRlLCBzaXplb2YoKnBhZ2UpKTtcbiB9XG4gXG4gLypcbkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlcztcbiBcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVx1MDAzZXZtZW1tYXBfc2hpZnQ7XG4mIzQzO1x0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XG4gXG4gXHQvKlxuIFx0ICogV2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBwYWdlcywgaW5jbHVkaW5nIHNldHRpbmcgdXAgcGFnZSBsaW5rcy5cbkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbiYjNDM7XG4gXHRmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuLVx0XHRwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpO1xuLVx0XHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbiYjNDM7XHRcdGlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcbiYjNDM7XHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4mIzQzO1x0XHRcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXG4mIzQzO1x0XHRcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxuJiM0MztcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuJiM0MztcdFx0XHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cbiYjNDM7XHRcdFx0bWVtY3B5KFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2dGVtcGxhdGUpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICYjNDM7MTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7XG4gXHR1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllcztcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuJiM0MztcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRSghcGdtYXAgfHwgem9uZV9pZHggIT0gWk9ORV9ERVZJQ0UpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICYjNDM7PSBwZm5zX3Blcl9jb21wb3VuZCkge1xuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7XG4gXG4tXHRcdF9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xuJiM0MztcdFx0aWYgKHBmbiA9PSBzdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogU2VlZCB0aGUgcmV1c2FibGUgaGVhZC1wYWdlIHRlbXBsYXRlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGZpcnN0IHJlYWwgc3RydWN0IHBhZ2UsIGJlY2F1c2UgdGhlIGV4aXN0aW5nXG4mIzQzO1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuJiM0MztcdFx0XHQgKiBtZW1tYXAgZW50cnkgcmF0aGVyIHRoYW4gYSBzdGFjayBvYmplY3QuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHQgICBuaWQsIHBnbWFwKTtcbiYjNDM7XHRcdFx0LyogaW5pdCB0ZW1wbGF0ZSBwYWdlICovXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZShwYWdlLCBwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtbWFwX2luaXRfem9uZV9kZXZpY2UmIzM0OywKICAgICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5NWQ5ODZmOGYwN2I2NDA0ZjZlNmVkZTllMzBkYTE3OWI0YzQwMTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNjoxMjoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgKaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaApAQCAtODIsNyAmIzQzOzgyLDM1IEBAIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDEKIHZvaWQgX19tZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNudCk7Ci1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7bW92bnRpcSAlMSwgJTAmIzM0OwomIzQzOwkJICAgICA6ICYjMzQ7PW0mIzM0OygqKHU2NCAqKWRzdCkKJiM0MzsJCSAgICAgOiAmIzM0O3ImIzM0OygqKGNvbnN0IHU2NCAqKXNyYykKJiM0MzsJCSAgICAgOiAmIzM0O21lbW9yeSYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV84KGRzdCwgc3JjKTsKJiM0MzsJbW92bnRpXzgoZHN0ICYjNDM7IDgsIHNyYyAmIzQzOyA4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV8zMih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CW1vdm50aV8xNihkc3QsIHNyYyk7CiYjNDM7CW1vdm50aV8xNihkc3QgJiM0MzsgMTYsIHNyYyAmIzQzOyAxNik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiYjNDM7ewomIzQzOwltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwltb3ZudGlfMzIoZHN0ICYjNDM7IDMyLCBzcmMgJiM0MzsgMzIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiYjNDM7CQkJCQkgICAgICBzaXplX3QgY250KQogewogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7CiAJCXN3aXRjaCAoY250KSB7CkBAIC05NiwxMCAmIzQzOzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdAogCQkJCWFzbSAoJiMzNDttb3ZudGlxICUxLCAlMCYjMzQ7IDogJiMzNDs9bSYjMzQ7KCoodTY0ICopZHN0KSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopc3JjKSk7CiAJCQkJYXNtICgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKikoZHN0ICYjNDM7IDgpKSA6ICYjMzQ7ciYjMzQ7KCoodTY0ICopKHNyYyAmIzQzOyA4KSkpOwogCQkJCXJldHVybjsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSByZWxldmFudCBmaXhlZC1zaXplIGNvcGllcyBoZXJlIGFyZSB0aGUKJiM0MzsJCQkgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLgomIzQzOwkJCSAqIEtlZXAgMzItYnl0ZSBhbmQgNDgtYnl0ZSBjb3BpZXMgaW5saW5lIGFzIHdlbGwKJiM0MzsJCQkgKiBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhvc2UgbmVhcmJ5IGZpeGVkLXNpemUKJiM0MzsJCQkgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYXNlIDMyOgomIzQzOwkJCQltb3ZudGlfMzIoZHN0LCBzcmMpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA0ODoKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzE2KGRzdCAmIzQzOyAzMiwgc3JjICYjNDM7IDMyKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCWNhc2UgNjQ6CiYjNDM7CQkJCW1vdm50aV82NChkc3QsIHNyYyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQljYXNlIDgwOgomIzQzOwkJCQltb3ZudGlfNjQoZHN0LCBzcmMpOwomIzQzOwkJCQltb3ZudGlfMTYoZHN0ICYjNDM7IDY0LCBzcmMgJiM0MzsgNjQpOwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJY2FzZSA5NjoKJiM0MzsJCQkJbW92bnRpXzY0KGRzdCwgc3JjKTsKJiM0MzsJCQkJbW92bnRpXzMyKGRzdCAmIzQzOyA2NCwgc3JjICYjNDM7IDY0KTsKJiM0MzsJCQkJcmV0dXJuOwogCQl9CiAJfQomIzQzOwogCV9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7CiB9CiYjNDM7CiYjNDM7I2RlZmluZSBtZW1jcHlfbm9udGVtcG9yYWwgbWVtY3B5X25vbnRlbXBvcmFsCiYjNDM7LyoKJiM0MzsgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHkKJiM0MzsgKiBwcmltaXRpdmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywKJiM0MzsJCXNpemVfdCBjbnQpCiYjNDM7ewomIzQzOwltZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTI1NDEsMTEgJiM0MzsyNTQxLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHNlY3Rpb24pCiAJcGFnZS0mZ3Q7ZmxhZ3MuZiB8PSAoc2VjdGlvbiAmYW1wOyBTRUNUSU9OU19NQVNLKSAmbHQ7Jmx0OyBTRUNUSU9OU19QR1NISUZUOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4oc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbikKJiM0Mzt7CiYjNDM7CXNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKQogewogCXJldHVybiAobWRmLmYgJmd0OyZndDsgU0VDVElPTlNfUEdTSElGVCkgJmFtcDsgU0VDVElPTlNfTUFTSzsKIH0KICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi8KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpCiB7CiAJcmV0dXJuIDA7CkBAIC0yNzY4LDkgJiM0MzsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLAogewogCXNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7CiAJc2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTsKLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1MKLQlzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpOwotI2VuZGlmCiYjNDM7CXNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4ocGFnZSwgcGZuKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaApAQCAtMjc4LDYgJiM0MzsyNzgsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KQogfQogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbAomIzQzOy8qCiYjNDM7ICogbWVtY3B5X25vbnRlbXBvcmFsKCkgcmVxdWVzdHMgYSBub24tdGVtcG9yYWwgY29weSB3aGVuIHRoZQomIzQzOyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYQomIzQzOyAqIHNwZWNpYWxpemVkIGJhY2tlbmQgZmFsbCBiYWNrIHRvIG1lbWNweSgpLiBLZWVwIHRoaXMgYXMgYSBtYWNybyBhbGlhcwomIzQzOyAqIHNvIHRoZSBjb21waWxlciBjYW4gc3RpbGwgc2VlIHRoZSBvcmlnaW5hbCBtZW1jcHkoKSBjYWxsIHNpdGUgYW5kCiYjNDM7ICogcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlbiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGUKJiM0MzsgKiB0aGVyZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHkKJiM0MzsjZW5kaWYKJiM0MzsKIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpOwogCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC0xMDA1LDExICYjNDM7MTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZCkKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RFVklDRQotc3RhdGljIHZvaWQgX19yZWYgX19pbml0X3pvbmVfZGV2aWNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOy8qCiYjNDM7ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZQomIzQzOyAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluCiYjNDM7ICogdGhlIGZyZWUgcGF0aCwgd2hpbGUgdGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZQomIzQzOyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZQomIzQzOyAqIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWUKJiM0MzsJICogcGF0aC4gVGhlIHJlbWFpbmluZyBaT05FX0RFVklDRSB0eXBlcyBzdGFydCBmcm9tIDAgaGVyZSBhbmQgcmFpc2UKJiM0MzsJICogdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2Ugb3V0LgomIzQzOwkgKi8KJiM0MzsJc3dpdGNoIChwZ21hcC0mZ3Q7dHlwZSkgewomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKJiM0MzsJY2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOgomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQToKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwljYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLAogCQkJCQkgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiB7Ci0KIAlfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTsKIAogCS8qCkBAIC0xMDI4LDI3ICYjNDM7MTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJICovCiAJcGFnZV9mb2xpbyhwYWdlKS0mZ3Q7cGdtYXAgPSBwZ21hcDsKIAlwYWdlLSZndDt6b25lX2RldmljZV9kYXRhID0gTlVMTDsKJiM0Mzt9CiAKLQkvKgotCSAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWQKLQkgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50Ci0JICogdG8gMSB3aGVuIGFsbG9jYXRpbmcgdGhlIHBhZ2UuCi0JICoKLQkgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlCi0JICogdGhlaXIgcmVmY291bnQgcmVzZXQgdG8gb25lIHdoZW5ldmVyIHRoZXkgYXJlIGZyZWVkIChpZS4gYWZ0ZXIKLQkgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS4KLQkgKi8KLQlzd2l0Y2ggKHBnbWFwLSZndDt0eXBlKSB7Ci0JY2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDoKLQljYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURToKLQljYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6Ci0JY2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CiYjNDM7c3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApCiYjNDM7ewomIzQzOwlfX3pvbmVfZGV2aWNlX3BhZ2VfaW5pdChwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJaWYgKHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQocGdtYXApKQogCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKLQkJYnJlYWs7CiYjNDM7fQogCi0JY2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6Ci0JCWJyZWFrOwotCX0KJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCwKJiM0MzsJCXN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLAomIzQzOwkJdW5zaWduZWQgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7CiYjNDM7CXByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7CiYjNDM7CXNldF9wYWdlX2NvdW50KHBhZ2UsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqICYjMzk7dGVtcGxhdGUmIzM5OyBpcyBhIHJldXNhYmxlIHBhZ2UgcHJvdG90eXBlIHJhdGhlciB0aGFuIGEgc3RyaWN0bHkgaW1tdXRhYmxlCiYjNDM7ICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieQomIzQzOyAqIHRoZSBjdXJyZW50IHRlbXBsYXRlLCBidXQgc2VjdGlvbiBiaXRzIGFuZCBwYWdlLSZndDt2aXJ0dWFsIG1heSBzdGlsbCBkZXBlbmQKJiM0MzsgKiBvbiB0aGUgUEZOLiBSZWZyZXNoIHRob3NlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoZSB0ZW1wbGF0ZSBiZWZvcmUKJiM0MzsgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGZuKQomIzQzO3sKJiM0MzsJc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3Bmbih0ZW1wbGF0ZSwgcGZuKTsKJiM0MzsjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUwKJiM0MzsJaWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpCiYjNDM7CQlzZXRfcGFnZV9hZGRyZXNzKHRlbXBsYXRlLCBfX3ZhKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLAomIzQzOwkJdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlICp0ZW1wbGF0ZSkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqICYjMzk7dGVtcGxhdGUmIzM5OyBjYXJyaWVzIHRoZSBpbnZhcmlhbnQgcG9ydGlvbiBvZiBhIFpPTkVfREVWSUNFIHN0cnVjdAomIzQzOwkgKiBwYWdlLiBVcGRhdGUgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHBsYWNlIGJlZm9yZSBjb3B5aW5nIGl0CiYjNDM7CSAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLgomIzQzOwkgKi8KJiM0MzsJem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUodGVtcGxhdGUsIHBmbik7CiYjNDM7CW1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7CiB9CiAKIC8qCkBAIC0xMDgzLDYgJiM0MzsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiAmIzQzOyBucl9wYWdlczsKIAl1bnNpZ25lZCBpbnQgb3JkZXIgPSBwZ21hcC0mZ3Q7dm1lbW1hcF9zaGlmdDsKJiM0MzsJc3RydWN0IHBhZ2UgdGVtcGxhdGU7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuCkBAIC0xMDkxLDEyICYjNDM7MTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCwKIAkgKiB0aGUgcGFnZXMgaW4gdGhlIHNhbWUgZ28uCiAJICovCiAJX19TZXRQYWdlSGVhZChoZWFkKTsKJiM0MzsKIAlmb3IgKHBmbiA9IGhlYWRfcGZuICYjNDM7IDE7IHBmbiAmbHQ7IGVuZF9wZm47IHBmbiYjNDM7JiM0MzspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCi0JCV9faW5pdF96b25lX2RldmljZV9wYWdlKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApOwotCQlwcmVwX2NvbXBvdW5kX3RhaWwocGFnZSwgaGVhZCwgb3JkZXIpOwotCQlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKJiM0MzsJCWlmIChwZm4gPT0gaGVhZF9wZm4gJiM0MzsgMSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlCiYjNDM7CQkJICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlCiYjNDM7CQkJICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmQKJiM0MzsJCQkgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXQKJiM0MzsJCQkgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LgomIzQzOwkJCSAqLwomIzQzOwkJCXpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwKJiM0MzsJCQkJCQkgICBwZ21hcCwgaGVhZCwgb3JkZXIpOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAJfQogCXByZXBfY29tcG91bmRfaGVhZChoZWFkLCBvcmRlcik7CiB9CkBAIC0xMTEzLDYgJiM0MzsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAl1bnNpZ25lZCBsb25nIHpvbmVfaWR4ID0gem9uZV9pZHgoem9uZSk7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7CiAJaW50IG5pZCA9IHBnZGF0LSZndDtub2RlX2lkOwomIzQzOwlzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTsKIAogCWlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSkKIAkJcmV0dXJuOwpAQCAtMTEzMCw3ICYjNDM7MTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogCWZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gJmx0OyBlbmRfcGZuOyBwZm4gJiM0Mzs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAotCQlfX2luaXRfem9uZV9kZXZpY2VfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTsKJiM0MzsJCWlmIChwZm4gPT0gc3RhcnRfcGZuKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGUKJiM0MzsJCQkgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZwomIzQzOwkJCSAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbAomIzQzOwkJCSAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC4KJiM0MzsJCQkgKi8KJiM0MzsJCQl6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LAomIzQzOwkJCQkJCSAgIG5pZCwgcGdtYXApOwomIzQzOwkJCS8qIGluaXQgdGVtcGxhdGUgcGFnZSAqLwomIzQzOwkJCW1lbWNweSgmYW1wO3RlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLAomIzQzOwkJCQkJCQkgICAgJmFtcDt0ZW1wbGF0ZSk7CiYjNDM7CQl9CiAKIAkJaWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpCiAJCQljb25kX3Jlc2NoZWQoKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlczogYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCwgYGluY2x1ZGUvbGludXgvbW0uaGAsIGBpbmNsdWRlL2xpbnV4L3N0cmluZy5oYCwgYW5kIGBtbS9tbV9pbml0LmNgLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBpbnRyb2R1Y2luZyBhIGBtZW1jcHlfbm9udGVtcG9yYWxgIGZ1bmN0aW9uLCBhbmQgdGhlbiB1c2luZyBpdCB3aXRoaW4gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBhbmQgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC4gRnJvbSBhIHF1aWNrIGdsYW5jZSwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIGFsbCBhYm91dCBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIHNwZWNpZmljYWxseSBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5LiBJdCBhbHNvIGluY2x1ZGVzIGFkZGluZyBgbW92bnRpXzhgLCBgbW92bnRpXzE2YCwgYG1vdm50aV8zMmAsIGFuZCBgbW92bnRpXzY0YCB0byBgeDg2IHN0cmluZ182NC5oYC4KClRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkIGZvciBaT05FX0RFVklDRSBtZW1vcnksIHdoaWNoIGlzIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIFBNRU0sIGFuZCBzaW1pbGFyIHRlY2hub2xvZ2llcy4gU3VyZSwgd2UgY2FuIGVtdWxhdGUgTlZESU1NIG9yIFBNRU0gZGV2aWNlcyB3aXRoaW4gUUVNVSwgb3IgdXNlIGBtZW1tYXA9Li4uIXNvbWV0aGluZ2AgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9mIFpPTkVfREVWSUNFIG1lbW9yeS4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IHN5emthbGxlcj8KClN5emthbGxlciBjYW4gd29yayB3aXRoIGAvZGV2L2RheGAgaWYgcHJvcGVybHkgY29uZmlndXJlZCwgYnV0IGRvZXMgaXQgZGlyZWN0bHkgY2FsbCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIG9uIGl0cyBvd24/IE1heWJlIGl0IGlzIGNhbGxlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcuIE5vLCB3YWl0LCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHByb2JlZC4gU28gd2hlbiBhIHBtZW0gb3IgZGF4IGRldmljZSBpcyBpbml0aWFsaXplZC4KClN5emthbGxlciB1c3VhbGx5IGRvZXNuJiMzOTt0IGhvdHBsdWcgcG1lbSBkZXZpY2VzIGR5bmFtaWNhbGx5IHVubGVzcyBpdCYjMzk7cyB0aHJvdWdoIHNvbWUgc3BlY2lmaWMgZHJpdmVycyAobGlrZSBuZGN0bC9udmRpbW0pLiBIbW1tLCBpbnRlcmVzdGluZy4gU28sIGlzIGl0IGV2ZW4gKndvcnRoKiBmdXp6aW5nIHRoaXM/CgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBvcHRpbWl6aW5nIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIGJ5IGxldmVyYWdpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1vdm50aWApLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBNTSBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIHNwZWVkaW5nIHVwIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpZiB0aGVzZSBub24tdGVtcG9yYWwgc3RvcmVzIGFyZSBmYXN0ZXIuCgpPa2F5LCBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlciBhbmQgc2VhcmNoIGZvciBmdXJ0aGVyIHVzYWdlcyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIGNhbGxlZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMTE9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjAtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMjE6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKik7XG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yNDEtXHQgKi9cbm1tL21lbXJlbWFwLmM6MjQyOlx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXHUwMDI2Tk9ERV9EQVRBKG5pZCktXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV0sXG5tbS9tZW1yZW1hcC5jLTI0My1cdFx0XHRcdFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbi0tXG5tbS9tbV9pbml0LmM9OTY4PXN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxuLS1cbm1tL21tX2luaXQuYy0xMDA4LS8qXG5tbS9tbV9pbml0LmM6MTAwOTogKiBSZXR1cm4gdHJ1ZSB3aGVuIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKCkgbXVzdCBpbml0aWFsaXplIHRoZSBwYWdlXG5tbS9tbV9pbml0LmMtMTAxMC0gKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuLS1cbm1tL21tX2luaXQuYz0xMTMxPXN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxuLS1cbm1tL21tX2luaXQuYy0xMTcxLVxubW0vbW1faW5pdC5jOjExNzI6dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21tX2luaXQuYy0xMTczLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKioKCk9rYXksIHNvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgdGhlIHRhcmdldCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCBmcm9tIGBwYWdlbWFwX3JhbmdlYCB3aXRoaW4gYG1tL21lbXJlbWFwLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgd2UgZ290ICpoZXJlKiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgcGFnZW1hcF9yYW5nZWAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcGFnZW1hcF9yYW5nZWAgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyB0byBkaWcgdXAgYWxsIHRoZSBjYWxsIHNpdGVzIG9mIGBwYWdlbWFwX3JhbmdlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlbWFwX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxubW0vbWVtcmVtYXAuYy0xNDMtXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbm1tL21lbXJlbWFwLmMtMTQ1LVx0XHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXG4tLVxubW0vbWVtcmVtYXAuYz0yNjY9dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcbi0tXG5tbS9tZW1yZW1hcC5jLTMzNy1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX3JhbmdlOyBpJiM0MzsmIzQzOykge1xubW0vbWVtcmVtYXAuYzozMzg6XHRcdGVycm9yID0gcGFnZW1hcF9yYW5nZShwZ21hcCwgXHUwMDI2cGFyYW1zLCBpLCBuaWQpO1xubW0vbWVtcmVtYXAuYy0zMzktXHRcdGlmIChlcnJvcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjUyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggbWVtcmVtYXBfcGFnZXMqKgoKUmlnaHQsIHNvIGBtZW1yZW1hcF9wYWdlc2AgaXMgYmVpbmcgY2FsbGVkIGJ5ICpkcml2ZXJzKi4gVGhhdCYjMzk7cyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGlzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaG93IGhhcmR3YXJlIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IHNwYWNlLiBEcml2ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgYXJlIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIHBoeXNpY2FsIGRldmljZXMsIGFuZCBvZnRlbiBuZWVkIHRvIG1hcCBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBpbnRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGtlcm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyIHNwYWNlLCBmb3IgRE1BIG9wZXJhdGlvbnMgb3IgZGlyZWN0IGFjY2Vzcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRpY2tpbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zOiBXaGF0IGtpbmQgb2YgZHJpdmVycz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgbmV0d29yayBhZGFwdGVycyBtYXBwaW5nIGJ1ZmZlcnMsIGdyYXBoaWNzIGNhcmRzIGhhbmRsaW5nIGZyYW1lYnVmZmVycywgb3Igc3RvcmFnZSBjb250cm9sbGVycyBkZWFsaW5nIHdpdGggZGlzayBzZWN0b3JzPyBUaGUgc3BlY2lmaWNzIG1hdHRlciBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LiBJcyB0aGlzIGEgY29tbW9uIG9wZXJhdGlvbiBvciBzb21ldGhpbmcgcmVsYXRpdmVseSByYXJlPyBUaGUgZnJlcXVlbmN5IG9mIGl0cyB1c2Ugd2lsbCBnaXZlIGEgY2x1ZSBhcyB0byBpdHMgY3JpdGljYWxpdHkgZm9yIG9wdGltaXphdGlvbi4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25zdHJhaW50cy4gSG93IGxhcmdlIGFyZSB0aGUgbWVtb3J5IHJlZ2lvbnMgYmVpbmcgbWFwcGVkPyBBcmUgd2UgdGFsa2luZyBhYm91dCBzaW5nbGUgcGFnZXMsIG9yIHBvdGVudGlhbGx5IGh1Z2UgYmxvY2tzPyBMYXJnZXIgcmVnaW9ucyBpbXBseSBwb3RlbnRpYWwgZm9yIG1vcmUgY29tcGxleCBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbnMgYW5kIHJlc291cmNlIGNvbnRlbnRpb24uIEFuZCBpcyBpdCBhbiBhcmVhIG9mIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHVzZXIgYW5kIGtlcm5lbCwgb3IgaXMgdGhpcyBtYXBwaW5nIHB1cmVseSBrZXJuZWwgc3BhY2U/IFNoYXJlZCByZWdpb25zIGNhbiBvcGVuIHVwIHZ1bG5lcmFiaWxpdGllcyBpZiBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBmb3IgZXJyb3JzLiBXaGF0IGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlPyBBcmUgd2UgY2hlY2tpbmcgZm9yIHZhbGlkIHBoeXNpY2FsIGFkZHJlc3Nlcz8gV2hhdCBoYXBwZW5zIGlmIHRoZSBtYXBwaW5nIGZhaWxzIOKAkyBkb2VzIGl0IGdyYWNlZnVsbHkgZGVncmFkZSwgb3IgY291bGQgaXQgbGVhZCB0byBzeXN0ZW0gaW5zdGFiaWxpdHk/IFNlY3VyaXR5IGltcGxpY2F0aW9ucyBhcmUgYW5vdGhlciBpbXBvcnRhbnQgYXNwZWN0IHRvIGNvbnNpZGVyIGhlcmUgLSBhcmUgdGhlcmUgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBkcml2ZXIgY2FuIGFjdHVhbGx5IGFjY2VzcyB0aGUgcmVxdWVzdGVkIG1lbW9yeT8gSXMgdGhlcmUgYSByaXNrIG9mIG1lbW9yeSBsZWFrcyBpZiBtYXBwaW5ncyBhcmUgbm90IHByb3Blcmx5IHVubWFwcGVkPyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCkVzc2VudGlhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSAqd2h5KiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRyaXZlciBpcyB0cnlpbmcgdG8gKmFjaGlldmUqIHdpdGggYG1lbXJlbWFwX3BhZ2VzYC4gS25vd2luZyB0aGF0IHdpbGwgZW5hYmxlIG1lIHRvIHNlZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgZm9sbG93LXVwIHF1ZXN0aW9uczogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgTlVNQSBzeXN0ZW1zLCBhbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgcGFnZSBjYWNoaW5nIGFuZCBjb2hlcmVuY2U/IFRpbWUgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1yZW1hcF9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6OlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yODUtICAgIHBhZ2VtYXAub3BzID0gXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6Mjg2OiAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxuLS1cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTAtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5Mi1kZXZtX21lbXVubWFwX3BhZ2VzKCksIGFuZCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIHdoZW4gdGhlIHJlc291cmNlcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE0Mjo6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYCwgcGVyZm9ybXMganVzdCBlbm91Z2ggbWVtb3J5IGhvdHBsdWcgdG9cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNDMtdHVybiBvbiA6YzpmdW5jOmBwZm5fdG9fcGFnZWAsIDpjOmZ1bmM6YHBhZ2VfdG9fcGZuYCwgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0PTE1Nz1tZW1vcnkgaG90cGx1Zy4gU3ViLXNlY3Rpb24gc3VwcG9ydCBhbGxvd3MgZm9yIDJNQiBhcyB0aGUgY3Jvc3MtYXJjaFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjE1ODpjb21tb24gYWxpZ25tZW50IGdyYW51bGFyaXR5IGZvciA6YzpmdW5jOmBkZXZtX21lbXJlbWFwX3BhZ2VzYC5cbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yMjA9bWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzNi0gICAgcGFnZW1hcC5vcHMgPSBcdTAwMjZkZXZpY2VfZGV2bWVtX29wcztcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcdTAwMjZwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIzOC1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI0MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjQyOui/mOaciWRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTEwNz1aT05FX0RFVklDRVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTExLeS6i+WunuacieWFs++8mui/meS6m+WcsOWdgOiMg+WbtOeahOmhtemdouWvueixoeS7juacquiiq+WcqOe6v+agh+iusOi/h++8jOiAjOS4lOW/hemhu+WvueiuvuWkh+i/m+ihjOW8leeUqO+8jOiAjOS4jeS7heS7hVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMTI65piv6aG16Z2i77yM5Lul5L+d5oyB5YaF5a2Y6KKr4oCc6ZSB5a6a4oCd5Lul5L6/5L2/55So44CCIGBaT05FX0RFVklDRWAg77yM6YCa6L+HIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgIO+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyMi06YzpmdW5jOmBhcmNoX2FkZF9tZW1vcnlgIO+8jOWNs+WGheWtmOeDreaPkuaLlOeahOS4iuWNiumDqOWIhuOAguWtkOauteaUr+aMgeWFgeiuuDJNQuS9nOS4ulxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTEyNC1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTg5LVx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXHUwMDI2a3ZtcHBjX3V2bWVtX3BnbWFwO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYzoxMTkwOlx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcCwgTlVNQV9OT19OT0RFKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtMTE5MS1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM9OTY0PWludCBhZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3Ni1cdC8qXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3Olx0ICogU3BlY2lhbCBjYXNlOiBhZGRfcGFnZXMoKSBpcyBjYWxsZWQgYnkgbWVtcmVtYXBfcGFnZXMoKSBmb3IgYWRkaW5nIGRldmljZVxuYXJjaC94ODYvbW0vaW5pdF82NC5jLTk3OC1cdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MzgwPXN0YXRpYyBpbnQgZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzQtXHRcdFx0b3JkZXJfYmFzZV8yKGRldl9kYXgtXHUwMDNlYWxpZ24gXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuZHJpdmVycy9kYXgvZGV2aWNlLmM6NDM1Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2RheC9kZXZpY2UuYy00MzYtXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmM9MjA3PXN0YXRpYyBpbnQgZnNkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxuLS1cbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxuZHJpdmVycy9kYXgvZnNkZXYuYzoyNzQ6XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVx0aWYgKElTX0VSUihhZGRyKSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjctXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6MTA2ODpcdHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGFkZXYtXHUwMDNlZGV2LCBwZ21hcCk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTEwNjktXHRpZiAoSVNfRVJSKHIpKSB7XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9Mjk2PW5vdXZlYXVfZG1lbV9jaHVua19hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9kcm0gKmRybSwgc3RydWN0IHBhZ2UgKipwcGFnZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzozMzM6XHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcdTAwMjZjaHVuay1cdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzQtXHRpZiAoSVNfRVJSKHB0cikpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM9MTc2MD1zdGF0aWMgc3RydWN0IHhlX3BhZ2VtYXAgKnhlX3BhZ2VtYXBfY3JlYXRlKHN0cnVjdCB4ZV9kZXZpY2UgKnhlLCBzdHJ1Y3QgeGVfdnJhbV9yZWdpb24gKnZyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAxLVx0cGFnZW1hcC1cdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYzoxODAyOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwYWdlbWFwKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVx0aWYgKElTX0VSUihhZGRyKSkge1xuLS1cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcbi0tXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYy00MTAtXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQxMTpcdCAqIENsYW1wIHRvIE1BWF9GT0xJT19PUkRFUiB0byBhdm9pZCBhIFdBUk4gaW4gbWVtcmVtYXBfcGFnZXMoKSB3aGVuIHRoZSByYW5nZVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVx0ICogYWxpZ25tZW50IGV4Y2VlZHMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGZvbGlvIG9yZGVyIGZvciB0aGlzIGtlcm5lbCBjb25maWcuXG4tLVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIwOlx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMobWVtX2RldiwgcGdtYXApO1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVx0aWYgKElTX0VSUihhZGRyKSkge1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmM6NDIyOlx0XHRkZXZfZXJyKHZ0bC1cdTAwM2Vtb2R1bGVfZGV2LCBcJiMzNDtkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXG5cJiMzNDssIFBUUl9FUlIoYWRkcikpO1xuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIzLVx0XHRrZnJlZShwZ21hcCk7XG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZz0xNDM9Y29uZmlnIE5WRElNTV9URVNUX0JVSUxEXG4tLVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTEtXHQgIG90aGVyd2lzZSBoZWxwcyBjYXRjaCBidWlsZCBlcnJvcnMgaW5kdWNlZCBieSBjaGFuZ2VzIHRvIHRoZVxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XHQgIGNvcmUgZGV2bV9tZW1yZW1hcF9wYWdlcygpIGltcGxlbWVudGF0aW9uIGFuZCBvdGhlclxuZHJpdmVycy9udmRpbW0vS2NvbmZpZy0xNTMtXHQgIGluZnJhc3RydWN0dXJlLlxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTE3LVx0XHRwbWVtLVx1MDAzZXBnbWFwLm9wcyA9IFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcdFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcdTAwMjZwbWVtLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MTktXHRcdHBmbl9zYiA9IG5kX3Bmbi1cdTAwM2VwZm5fc2I7XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUzMC1cdFx0cG1lbS1cdTAwM2VwZ21hcC5vcHMgPSBcdTAwMjZmc2RheF9wYWdlbWFwX29wcztcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XHRcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgXHUwMDI2cG1lbS1cdTAwM2VwZ21hcCk7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTMyLVx0XHRiYl9yYW5nZSA9IHBtZW0tXHUwMDNlcGdtYXAucmFuZ2U7XG4tLVxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYz05MzQ9RVhQT1JUX1NZTUJPTChuZF9yZWdpb25fcmVsZWFzZV9sYW5lKTtcbi0tXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxuZHJpdmVycy9udmRpbW0vcmVnaW9uX2RldnMuYzo5Mzc6ICogUG93ZXJQQyByZXF1aXJlcyB0aGlzIGFsaWdubWVudCBmb3IgbWVtcmVtYXBfcGFnZXMoKS4gQWxsIG90aGVyIGFyY2hzXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzOC0gKiBzaG91bGQgYmUgb2sgd2l0aCBTVUJTRUNUSU9OX1NJWkUgKHNlZSBtZW1yZW1hcF9jb21wYXRfYWxpZ24oKSkuXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmM9Mzg3PWludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG4tLVxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxuZHJpdmVycy9wY2kvcDJwZG1hLmM6NDM3Olx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmRyaXZlcnMvcGNpL3AycGRtYS5jLTQzOC1cdGlmIChJU19FUlIoYWRkcikpIHtcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jPTU1Mz1kY3NzYmxrX2FkZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5Ni1cdFx0ZGV2X2luZm8tXHUwMDNlcGdtYXAubnJfcmFuZ2VcdD0gMTtcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3Olx0XHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcdTAwMjZkZXZfaW5mby1cdTAwM2VkZXYsIFx1MDAyNmRldl9pbmZvLVx1MDAzZXBnbWFwKTtcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMtNjk4LVx0XHRpZiAoSVNfRVJSKGFkZHIpKSB7XG4tLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYz0zNz1zdGF0aWMgaW50IGZpbGxfbGlzdCh1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4tLVxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjMtXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jOjEyNDpcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jLTEyNS1cdGlmIChJU19FUlIodmFkZHIpKSB7XG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYz0xMDc2PXN0YXRpYyBpbnQgdmlydGlvX2ZzX3NldHVwX2RheChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgc3RydWN0IHZpcnRpb19mcyAqZnMpXG4tLVxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVx0LyogSWRlYWxseSB3ZSB3b3VsZCBkaXJlY3RseSB1c2UgdGhlIFBDSSBCQVIgcmVzb3VyY2UgYnV0XG5mcy9mdXNlL3ZpcnRpb19mcy5jOjExMTc6XHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTExOC1cdCAqIGluaXRpYWxpemUgYSBzdHJ1Y3QgcmVzb3VyY2UgZnJvbSBzY3JhdGNoIChvbmx5IHRoZSBzdGFydFxuLS1cbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyNi1cbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTEyNzpcdGZzLVx1MDAzZXdpbmRvd19rYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoXHUwMDI2dmRldi1cdTAwM2VkZXYsIHBnbWFwKTtcbmZzL2Z1c2UvdmlydGlvX2ZzLmMtMTEyOC1cdGlmIChJU19FUlIoZnMtXHUwMDNld2luZG93X2thZGRyKSlcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Nzc9c3RydWN0IGRldl9wYWdlbWFwX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNS0gKiBAYWx0bWFwOiBwcmUtYWxsb2NhdGVkL3Jlc2VydmVkIG1lbW9yeSBmb3Igdm1lbW1hcCBhbGxvY2F0aW9uc1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjExNjogKiBAcmVmOiByZWZlcmVuY2UgY291bnQgdGhhdCBwaW5zIHRoZSBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgbWFwcGluZ1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yMjc9dm9pZCB6b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVx0XHRcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjI5OnZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMC12b2lkIG1lbXVubWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMyLXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApO1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY0LSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjY2LVx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjgtXHQvKlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjI2OTpcdCAqIEZhaWwgYXR0ZW1wdHMgdG8gY2FsbCBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2l0aG91dFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cdCAqIFpPTkVfREVWSUNFIHN1cHBvcnQgZW5hYmxlZCwgdGhpcyByZXF1aXJlcyBjYWxsZXJzIHRvIGZhbGxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXG4tLVxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5MS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI5My1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtcmVtYXBfY29tcGF0X2FsaWduKHZvaWQpXG4tLVxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXG4tLVxubGliL3Rlc3RfaG1tLmMtNjE1LVx0fVxubGliL3Rlc3RfaG1tLmM6NjE2Olx0cHRyID0gbWVtcmVtYXBfcGFnZXMoXHUwMDI2ZGV2bWVtLVx1MDAzZXBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcbmxpYi90ZXN0X2htbS5jLTYxNy1cdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XG4tLVxubW0vbWVtcmVtYXAuYz0xNz1zdGF0aWMgREVGSU5FX1hBUlJBWShwZ21hcF9hcnJheSk7XG4tLVxubW0vbWVtcmVtYXAuYy0xOS0vKlxubW0vbWVtcmVtYXAuYzoyMDogKiBUaGUgbWVtcmVtYXAoKSBhbmQgbWVtcmVtYXBfcGFnZXMoKSBpbnRlcmZhY2VzIGFyZSBhbHRlcm5hdGVseSB1c2VkXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxubW0vbWVtcmVtYXAuYy0yMi0gKiBjb25zdHJhaW50cyBvbiB0aGUgYWxpZ25tZW50IGFuZCBzaXplIG9mIHRoZSBtYXBwaW5nIChuYW1lc3BhY2UpLlxubW0vbWVtcmVtYXAuYzoyMzogKiBtZW1yZW1hcCgpIGNhbiBtYXAgaW5kaXZpZHVhbCBQQUdFX1NJWkUgcGFnZXMuIG1lbXJlbWFwX3BhZ2VzKCkgY2FuXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcbm1tL21lbXJlbWFwLmM6MjU6ICogdGhlIG1pbmltdW0gbWFwcGluZyBncmFudWxhcml0eSBvZiBtZW1yZW1hcF9wYWdlcygpIGlzIDE2TUIuXG5tbS9tZW1yZW1hcC5jLTI2LSAqXG4tLVxubW0vbWVtcmVtYXAuYz0xMzA9RVhQT1JUX1NZTUJPTF9HUEwobWVtdW5tYXBfcGFnZXMpO1xubW0vbWVtcmVtYXAuYy0xMzEtXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcbm1tL21lbXJlbWFwLmMtMTMzLXtcbi0tXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcbi0tXG5tbS9tZW1yZW1hcC5jLTI2MS0vKlxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XG5tbS9tZW1yZW1hcC5jOjI2MzogKiBtZW11bm1hcF9wYWdlcygpLiAgUGxlYXNlIHVzZSBkZXZtX21lbXJlbWFwX3BhZ2VzIGlmIHlvdSBoYXZlIGEgc3RydWN0XG5tbS9tZW1yZW1hcC5jLTI2NC0gKiBkZXZpY2UgYXZhaWxhYmxlLlxubW0vbWVtcmVtYXAuYy0yNjUtICovXG5tbS9tZW1yZW1hcC5jOjI2Njp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxubW0vbWVtcmVtYXAuYy0yNjcte1xuLS1cbm1tL21lbXJlbWFwLmMtMzUxLX1cbm1tL21lbXJlbWFwLmM6MzUyOkVYUE9SVF9TWU1CT0xfR1BMKG1lbXJlbWFwX3BhZ2VzKTtcbm1tL21lbXJlbWFwLmMtMzUzLVxubW0vbWVtcmVtYXAuYy0zNTQtLyoqXG5tbS9tZW1yZW1hcC5jOjM1NTogKiBkZXZtX21lbXJlbWFwX3BhZ2VzIC0gcmVtYXAgYW5kIHByb3ZpZGUgbWVtbWFwIGJhY2tpbmcgZm9yIHRoZSBnaXZlbiByZXNvdXJjZVxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcbi0tXG5tbS9tZW1yZW1hcC5jLTM2Ny0gKiAgICAmIzM5O2xpdmUmIzM5OyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxubW0vbWVtcmVtYXAuYzozNjg6ICogICAgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlKCkgdGltZSwgb3IgaWYgdGhpcyByb3V0aW5lIGZhaWxzLlxubW0vbWVtcmVtYXAuYy0zNjktICpcbi0tXG5tbS9tZW1yZW1hcC5jLTM3My0gKi9cbm1tL21lbXJlbWFwLmM6Mzc0OnZvaWQgKmRldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxubW0vbWVtcmVtYXAuYy0zNzUte1xuLS1cbm1tL21lbXJlbWFwLmMtMzc4LVxubW0vbWVtcmVtYXAuYzozNzk6XHRyZXQgPSBtZW1yZW1hcF9wYWdlcyhwZ21hcCwgZGV2X3RvX25vZGUoZGV2KSk7XG5tbS9tZW1yZW1hcC5jLTM4MC1cdGlmIChJU19FUlIocmV0KSlcbi0tXG5tbS9tZW1yZW1hcC5jLTM4Mi1cbm1tL21lbXJlbWFwLmM6MzgzOlx0ZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsXG5tbS9tZW1yZW1hcC5jLTM4NC1cdFx0XHRwZ21hcCk7XG4tLVxubW0vbWVtcmVtYXAuYy0zODgtfVxubW0vbWVtcmVtYXAuYzozODk6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9tZW1yZW1hcF9wYWdlcyk7XG5tbS9tZW1yZW1hcC5jLTM5MC1cbm1tL21lbXJlbWFwLmM9MzkxPXZvaWQgZGV2bV9tZW11bm1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG5tbS9tZW1yZW1hcC5jLTM5Mi17XG5tbS9tZW1yZW1hcC5jOjM5MzpcdGRldm1fcmVsZWFzZV9hY3Rpb24oZGV2LCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2UsIHBnbWFwKTtcbm1tL21lbXJlbWFwLmMtMzk0LX1cbi0tXG5tbS9zcGFyc2Utdm1lbW1hcC5jPTQwMj1pbnQgX19tZW1pbml0IHZtZW1tYXBfcG9wdWxhdGVfaHVnZXBhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXG5tbS9zcGFyc2Utdm1lbW1hcC5jOjQ2MDogKiBOb3RlIHRoYXQgbWVtcmVtYXBfcGFnZXMoKSByZXNldHMgQG5yX3JhbmdlIHZhbHVlIGFuZCB3aWxsIGluY3JlbWVudFxubW0vc3BhcnNlLXZtZW1tYXAuYy00NjEtICogaXQgYWZ0ZXIgZWFjaCByYW5nZSBzdWNjZXNzZnVsIG9ubGluaW5nLiBUaHVzIHRoZSB2YWx1ZSBvciBAbnJfcmFuZ2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQ9MTM9bGRmbGFncy15ICYjNDM7PSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkOjE0OmxkZmxhZ3MteSAmIzQzOz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZC0xNS1sZGZsYWdzLXkgJiM0Mzs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2Vcbi0tXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM9MTA4PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNC1cbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYzoxMTU6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEyMS1cdGlmICghbmZpdF9yZXMpXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTIyOlx0XHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMjMtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmM6MTM1OkVYUE9SVF9TWU1CT0xfR1BMKF9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMzYtXG4tLVxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaD0yMTI9dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXAoc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaC0yMTMtXHRcdHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg6MjE0OnZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgd2l0aCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgd2lkZWx5IHVzZWQgYWNyb3NzIHZhcmlvdXMgZHJpdmVycy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgYnkgYGRyaXZlcnMvZGF4L2RldmljZS5jYCB3aXRoaW4gYGRldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9kYXgvZnNkZXYuY2AgZHVyaW5nIGBmc2Rldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBgcG1lbV9hdHRhY2hfZGlza2AsIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2Agd2l0aGluIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAsIGFuZCBhbHNvIGluIGBmcy9mdXNlL3ZpcnRpb19mcy5jYCBkdXJpbmcgYHZpcnRpb19mc19zZXR1cF9kYXhgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBTeXprYWxsZXIgYW5kIGl0cyBwb3RlbnRpYWwgdG8gZXhwbG9pdCB0aGlzIGNvZGUgcGF0aC4gSSYjMzk7bSBhbG1vc3QgY2VydGFpbiBJIGNhbiB0cmlnZ2VyIGVpdGhlciBgdmlydGlvX2ZzX3NldHVwX2RheGAsIGBkZXZfZGF4X3Byb2JlYCwgb3IgYHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlYCB3aXRoIGZ1enppbmcuCgpXYWl0LCBob2xkIG9uLiBUaGlzIHJlbWluZHMgbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkganVzdCB3YW50IHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNhbGxpbmcgb3JkZXIuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSB0aG91Z2h0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2FzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGFuZCBJJiMzOTttIHJpZ2h0LCB0aGF0JiMzOTtzIGl0LiBPay4gTm93LCBsZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtbWFwX2luaXRfY29tcG91bmQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW1faW5pdC5jPTExMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBvdW5kX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbm1tL21tX2luaXQuYy0xMTMwLVxubW0vbW1faW5pdC5jOjExMzE6c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG5tbS9tbV9pbml0LmMtMTEzMi1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxuLS1cbm1tL21tX2luaXQuYz0xMTcyPXZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbW1faW5pdC5jLTEyMjMtXG5tbS9tbV9pbml0LmM6MTIyNDpcdFx0bWVtbWFwX2luaXRfY29tcG91bmQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCxcbm1tL21tX2luaXQuYy0xMjI1LVx0XHRcdFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MTYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIEluaXRpYWxpemF0aW9uIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIFRoZSBjb3JlIGNoYW5nZSBpcyBzd2FwcGluZyBvdXQgdGhlIG9yaWdpbmFsIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBgbWVtY3B5X25vbnRlbXBvcmFsYCwgYW5kIG9uIHg4NiwgdGhhdCBtZWFucyB1c2luZyBgbWVtY3B5X2ZsdXNoY2FjaGVgLCB3aGljaCB1bHRpbWF0ZWx5IHRyYW5zbGF0ZXMgdG8gYG1vdm50aWAgaW5zdHJ1Y3Rpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgbWVtb3J5IHBhZ2VzIGFyZSBpbml0aWFsaXplZC4KClRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBBbnl0aW1lIHlvdSYjMzk7cmUgdG91Y2hpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBpbnRyb2R1Y2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCB5b3UmIzM5O3JlIHBvdGVudGlhbGx5IG9wZW5pbmcgdGhlIGRvb3IgdG8gc3VidGxlIGJ1dCBkZXZhc3RhdGluZyBidWdzLiBPcmRlcmluZyBpc3N1ZXMgd2l0aCBub24tdGVtcG9yYWwgc3RvcmVzLCBpbmNvcnJlY3Qgc2l6ZXMsIGFueSBkZXZpYXRpb24gZnJvbSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IsIGFuZCB0aGVyZSBjb3VsZCBiZSBhIHdpZGUgcmFuZ2Ugb2YgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gU28sIG9uIHg4NiwgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBpbXBsZW1lbnRlZCB3aXRoIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGZvciBkaWZmZXJlbnQgZGF0YSBzaXplcy4gT2theSwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhvc2UgaW5zdHJ1Y3Rpb25zLiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHBhdGNoIGFnYWluIGp1c3QgdG8gZG91YmxlIGNoZWNrIHRoYXQgSSBkaWRuJiMzOTt0IG1pc3Mgc29tZXRoaW5nLgoKYGBgYwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSgmIzM0O21vdm50aXEgJTEsICUwJiMzNDsKJiM0MzsJCSAgICAgOiAmIzM0Oz1tJiMzNDsoKih1NjQgKilkc3QpCiYjNDM7CQkgICAgIDogJiMzNDtyJiMzNDsoKihjb25zdCB1NjQgKilzcmMpCiYjNDM7CQkgICAgIDogJiMzNDttZW1vcnkmIzM0Oyk7CiYjNDM7fQpgYGAKCk9rYXksIHllcCwgdGhhdCYjMzk7cyB3aGF0IEkgdGhvdWdodC4gRnVuY3Rpb25hbGx5LCBpdCBpcyBleGFjdGx5IHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nLCBzbyB0aGF0JiMzOTtzIHRoZSByZWxldmFudCBjaGFuZ2UuCgpOb3csIGxldCBtZSBqdXN0IGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBXZSBrbm93IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGlzIG5lZWRlZCBmb3IgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gQW5kIHRvIHVzZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIG9uIHg4Niwgd2UgbmVlZCBgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRWAuIE9rYXksIHRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L0tjb25maWdgIHRvIHNlZSBleGFjdGx5IHdoYXQgdGhhdCBjb25maWcgZW50YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz0xOTIyPWNvbmZpZyBBUk02NF9QTUVNXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjQtXHRzZWxlY3QgQVJDSF9IQVNfUE1FTV9BUElcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1Olx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9LY29uZmlnLTE5MjYtXHRoZWxwXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaD00ND1leHRlcm4gdm9pZCAqX19tZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7XG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ1LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaDo0NjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9zdHJpbmcuaC00Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmg9NDc1PWV4dGVybiBfX211c3RfY2hlY2sgbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3Ni1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQ3NzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc4LWV4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfdXNlcl9mbHVzaGNhY2hlKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTtcbi0tXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XHRcdDo9IGNsZWFyX3VzZXIubyBkZWxheS5vIGNvcHlfZnJvbV91c2VyLm9cdFx0XFxcbi0tXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZS03LVxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6ODpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSAmIzQzOz0gdWFjY2Vzc19mbHVzaGNhY2hlLm9cbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTktXG4tLVxuYXJjaC9wb3dlcnBjL0tjb25maWc9MTE4PWNvbmZpZyBQUENcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNTgtXHRzZWxlY3QgQVJDSF9IQVNfVElDS19CUk9BRENBU1RcdFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1RcbmFyY2gvcG93ZXJwYy9LY29uZmlnOjE1OTpcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTE2MC1cdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jPTY0PUVYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaW52YWxpZGF0ZV9wbWVtKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02Ni0vKlxuYXJjaC9wb3dlcnBjL2xpYi9wbWVtLmM6Njc6ICogQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRSBzeW1ib2xzXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02OC0gKi9cbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cdHNlbGVjdCBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VOR1x0aWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gveDg2L0tjb25maWc6MTAzOlx0c2VsZWN0IEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVx0aWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTEwNC1cdHNlbGVjdCBBUkNIX0hBU19DT1BZX01DXHRcdFx0aWYgWDg2XzY0XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0Lmg9ODA9aW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDo4MjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmgtODMtI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4tLVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTctXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYzoxODojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTktLyoqXG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00OTMtXHRmdWEgPSBudmRpbW1faGFzX2ZsdXNoKG5kX3JlZ2lvbik7XG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NDk0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIHx8IGZ1YSBcdTAwM2MgMCkge1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTQ5NS1cdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDt1bmFibGUgdG8gZ3VhcmFudGVlIHBlcnNpc3RlbmNlIG9mIHdyaXRlc1xcblwmIzM0Oyk7XG4tLVxuaW5jbHVkZS9saW51eC91aW8uaD0yNjE9Ym9vbCBjb3B5X2Zyb21faXRlcl9mdWxsX25vY2FjaGUodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBzdHJ1Y3QgaW92X2l0ZXIgKmkpXG4tLVxuaW5jbHVkZS9saW51eC91aW8uaC0yNjktXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3MDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxuaW5jbHVkZS9saW51eC91aW8uaC0yNzEtLypcbi0tXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3My0gKiBfY29weV9mcm9tX2l0ZXJfZmx1c2hjYWNoZSgpIHRoYW4gX2NvcHlfZnJvbV9pdGVyX25vY2FjaGUoKSBtdXN0IGNoZWNrIGZvclxuaW5jbHVkZS9saW51eC91aW8uaDoyNzQ6ICogSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSBiZWZvcmUgYXNzdW1pbmcgdGhhdCB0aGVcbmluY2x1ZGUvbGludXgvdWlvLmgtMjc1LSAqIGRlc3RpbmF0aW9uIGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUgb24gcmV0dXJuLlxuLS1cbmxpYi9LY29uZmlnPTU0Mj1jb25maWcgVUFDQ0VTU19NRU1DUFlcbi0tXG5saWIvS2NvbmZpZy01NDQtXG5saWIvS2NvbmZpZzo1NDU6Y29uZmlnIEFSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL0tjb25maWctNTQ2LVx0Ym9vbFxuLS1cbmxpYi9pb3ZfaXRlci5jPTI5Mj1FWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKTtcbmxpYi9pb3ZfaXRlci5jLTI5My1cbmxpYi9pb3ZfaXRlci5jOjI5NDojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxubGliL2lvdl9pdGVyLmMtMjk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaXMgY2hvc2VuLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgc2ltcGxpZmllcyB0aGluZ3Mgc29tZXdoYXQuIE5vdywgSSBzZWUgdGhhdCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIHJlcXVpcmVzIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBIbW0sIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuIExldCBtZSBxdWlja2x5IGp1bXAgaW50byBgbW0vS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBgQ09ORklHX1pPTkVfREVWSUNFYCBhY3R1YWxseSBlbmFibGVzLCBhbmQgd2hhdCBpdHMgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5IHRvIGFzc2VzcyB0aGUgYnJvYWRlciBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU3OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDgxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgYW5kIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgd2l0aGluIGBtbS9tbV9pbml0LmNgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhleSYjMzk7cmUgY29yZSB0byBaT05FX0RFVklDRSBtZW1vcnkgaW5pdGlhbGl6YXRpb24uICBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNlZCBmdXp6aW5nLgoKTXkgbWluZCB0aGVuIHF1aWNrbHkganVtcHMgdG8gaG93IHdlIGNhbiBhY3R1YWxseSAqdHJpZ2dlciogdGhlc2UgZnVuY3Rpb25zLiAgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBnZXRzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHByb2JlLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBjYWxscyBsaWtlIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCB0aGlzIHZpYSBhIHN5c2NhbGwuIFllcywgdGhhdCYjMzk7cyB0aGUgYW5nbGUhIGBtbWFwYCBvZiBgL2Rldi9kYXhgIGlzIHRoZSBvYnZpb3VzIGZpcnN0IGNhbmRpZGF0ZSwgb3IgcGVyaGFwcyBhbiBgaW9jdGxgIHRoYXQgYWRkcyBtZW1vcnkuIEFsc28sIGBtZW1yZW1hcF9wYWdlc2AgaW4gc29tZSBkcml2ZXIgbWlnaHQgYmUgdnVsbmVyYWJsZSBhbmQgdHJpZ2dlcmFibGUgdmlhIHN5emthbGxlci4KCkZvciBleGFtcGxlLCBgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtYCBpbiBgZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmNgIGNhbGxzIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhpcyBpcyBhIHNvbGlkIGxlYWQuIEFsc28sIGB2aXJ0aW9fZnNfc2V0dXBfZGF4YCBpbiBgZnMvZnVzZS92aXJ0aW9fZnMuY2AgY2FsbHMgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiAgU28sIHdlJiMzOTt2ZSBnb3QgbXVsdGlwbGUgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gVGhpcyBsb29rcyBwcm9taXNpbmcuCgpOb3csIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGUgYWN0dWFsIGNvZGUuICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaXQmIzM5O3MgdXNlZCBpbiBgbW0vbW1faW5pdC5jYC4gVGhpcyBpcyBuZXcsIHdoaWNoIGlzIGEgZ29vZCBzaWduIGZvciB1bmNvdmVyaW5nIGJ1Z3MuIEl0JiMzOTtzIGFsc28gZGVmaW5lZCBpbiBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhgIHdpdGggdGhlIGBtb3ZudGlfKmAgZnVuY3Rpb25zLCBhbmQgYGluY2x1ZGUvbGludXgvbW0uaGAgd2l0aCBgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbmAsIGFuZCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAgZm9yIGZhbGxiYWNrLiAgVGhlc2UgYXJlIGNoYW5nZXMgd2UgbmVlZCB0byBrZWVwIGluIG1pbmQuCgpEaWdnaW5nIGRlZXBlciwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCB3aXRoaW4gYG1tL21tX2luaXQuY2Agc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdXNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhlIGZ1bmN0aW9uJiMzOTtzIHN0cnVjdHVyZSBpcyBhbHNvIGhlbHBmdWwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbWVtbWFwX2luaXRfY29tcG91bmRgIGFuZCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiAgQWhhISBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIHN0YXRpYywgd2hpY2ggbGltaXRzIGl0cyBleHBvc3VyZSwgYnV0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgZXhwb3J0ZWQuIFRoYXQmIzM5O3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIEZvY3VzU3ltYm9scyBhbmQgYWxzbyBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKRmluYWxseSwgY29uZmlndXJhdGlvbi4gV2UgbmVlZCBgQ09ORklHX1pPTkVfREVWSUNFYCBmb3Igc3VyZS4gVGhlIHg4Ni1zcGVjaWZpYyBgbW92bnRpYCBpbnN0cnVjdGlvbnMgYXJlIGltcGxpY2l0bHkgdGllZCB0byBgQ09ORklHX1g4Nl82NGAgYnV0IGBaT05FX0RFVklDRWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFdhaXQsIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBXZSBuZWVkIHRvIHZlcmlmeSB0aGF0IGluIGBtbS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTEyMzUtXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTEyMzctXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSAxMjM2IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSBkZWFsaW5nIHdpdGguIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZW50cmllcyByZXZlYWwgYWJvdXQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24uIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIHRoZSByZWxldmFudCBjb250ZXh0IGFuZCBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBkZXBlbmRlbmNpZXMgaW4gbWluZCBmb3Igc3Vic2VxdWVudCBhbmFseXNpcy4gSSYjMzk7bSBob3BpbmcgdG8gdW5jb3ZlciB0aGUgdW5kZXJseWluZyBsb2dpYyBmb3IgdGhpcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMzA6XHRcbjEyMzE6XHRjb25maWcgWk9ORV9ETUEzMlxuMTIzMjpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IERNQTMyIHpvbmVcJiMzNDsgaWYgQVJDSF9IQVNfWk9ORV9ETUFfU0VUXG4xMjMzOlx0XHRkZXBlbmRzIG9uICFYODZfMzJcbjEyMzQ6XHRcdGRlZmF1bHQgeSBpZiBBUk02NFxuMTIzNTpcdFxuMTIzNjpcdGNvbmZpZyBaT05FX0RFVklDRVxuMTIzNzpcdFx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG4xMjM4Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG4xMjM5Olx0XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbjEyNDA6XHRcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbjEyNDE6XHRcdHNlbGVjdCBYQVJSQVlfTVVMVElcbjEyNDI6XHRcbjEyNDM6XHRcdGhlbHBcbjEyNDQ6XHRcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcbjEyNDU6XHRcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcbjEyNDY6XHRcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXG4xMjQ3Olx0XHQgIFwmIzM0O2RldmljZS1waHlzaWNhbFwmIzM0OyBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxuMTI0ODpcdFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXG4xMjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFpPTkVfREVWSUNFYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZ1bmN0aW9uIGlzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kZW50IG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCB0aGF0IG1hY3JvIGlzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aGVuIGBYODZfNjRgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgaXQgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmUgSSYjMzk7bSBleGFtaW5pbmcuCgpUbyBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGZ1bmN0aW9uLiBJIHdpbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLCBpdCBzaG91bGQgYmUgaW4gYG1tL21tX2luaXQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZXBlciBjb250ZXh0IEkgcmVxdWlyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbi0tXG5tbS9tbV9pbml0LmMtMTE3MS1cbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9tbV9pbml0LmMtMTE3My1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE5OAoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWk9ORV9ERVZJQ0UgTWVtb3J5IE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dhaXQsIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgc3RhdGljLCBpc24mIzM5O3QgaXQ/JiMzNDsgVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXIgY2FuIHVzZSBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhleSYjMzk7cmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgd2hpY2ggdGhleSB1c3VhbGx5IGFyZSB1bmxlc3MgdGhleSYjMzk7cmUgaW5saW5lZC4gU28sIGxldCYjMzk7cyBjaGVjayBpZiBgbWVtbWFwX2luaXRfY29tcG91bmRgIGlzIGlubGluZWQuIFllcCwgaXQmIzM5O3MgZGVjbGFyZWQgYXMgYHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLCAuLi4pYCwgc28gbm8gZXhwbGljaXQgYGlubGluZWAga2V5d29yZC4KCk5vdywgd2hhdCBhYm91dCBgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGVgPyBJJiMzOTtsbCBjaGVjayB0aGF0IG9uZSB0b28uIE9rYXksIGl0JiMzOTtzIGFsc28gYHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKC4uLilgLiBObyBleHBsaWNpdCBgaW5saW5lYCB0aGVyZSBlaXRoZXIsIGJ1dCB0aGUgY29tcGlsZXIgKmNvdWxkKiBiZSBpbmxpbmluZyBpdC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCByZWxpYWJsZSwgSSYjMzk7bGwganVzdCBmb2N1cyBvbiB1c2luZyBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGFuZCBgbWVtbWFwX2luaXRfY29tcG91bmRgIGRpcmVjdGx5LgoKTGV0JiMzOTtzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbi4gQWggeWVzLCBpdCYjMzk7cyBvcHRpbWl6aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IHBhZ2VgIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3Jlcywgc3BlY2lmaWNhbGx5IGBtZW1jcHlfbm9udGVtcG9yYWxgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgaXQmIzM5O3Mgbm90IGp1c3QgY29zbWV0aWMuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIGlzIHJlYWNoYWJsZSB0aHJvdWdoIGRldmljZSBwcm9iZXMsIHRoaW5ncyBsaWtlIERBWCwgUE1FTSwgYW5kIHZpcnRpby1mcyBEQVguIFRoaXMgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpNeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBkaXJlY3RseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIFNpbmNlIGl0JiMzOTtzIHJlYWNoYWJsZSB0aHJvdWdoIGRldmljZSBwcm9iaW5nLCB3aGljaCBhcmUgcHJldHR5IGNvbW1vbiwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBuZWVkIHRvIGZ1enouCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gWWVzLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLgoKUmlnaHQsIGxldCYjMzk7cyBjYWxsIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHN0cnVjdHVyZXMgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiBwYXRocyBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIHRoYXQgdXNlIFpPTkVfREVWSUNFIG1lbW9yeSAoZS5nLiwgREFYLCBQTUVNLCB2aXJ0aW8tZnMgREFYKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1tYXBfaW5pdF96b25lX2RldmljZSYjMzQ7LAogICAgJiMzNDttZW1tYXBfaW5pdF9jb21wb3VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBvcHRpbWl6YXRpb24gZm9yIGluaXRpYWxpemluZyBgc3RydWN0IHBhZ2VgIHN0cnVjdHVyZXMgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzIChgbWVtY3B5X25vbnRlbXBvcmFsYCkuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBpbml0aWFsaXphdGlvbiBwYXRocyBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gSXQgaXMgcmVhY2hhYmxlIHdoZW4gcHJvYmluZyBkZXZpY2VzIHRoYXQgdXNlIFpPTkVfREVWSUNFIG1lbW9yeSAoZS5nLiwgREFYLCBQTUVNLCB2aXJ0aW8tZnMgREFYKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI4LjYxMjUzMTIxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NDU0NDUxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI4LjYxMjU0MjE3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExOTAyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTk1ZDk4NmY4ZjA3YjY0MDRmNmU2ZWRlOWUzMGRhMTc5YjRjNDAxN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNjoxMjoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWV9GTFVTSENBQ0hFIDFcXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcXG4tc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZShcXFwibW92bnRpcSAlMSwgJTBcXFwiXFxuK1xcdFxcdCAgICAgOiBcXFwiPW1cXFwiKCoodTY0ICopZHN0KVxcbitcXHRcXHQgICAgIDogXFxcInJcXFwiKCooY29uc3QgdTY0ICopc3JjKVxcbitcXHRcXHQgICAgIDogXFxcIm1lbW9yeVxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzE2KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxcbit7XFxuK1xcdG1vdm50aV84KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzE2KGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzE2KGRzdCArIDE2LCBzcmMgKyAxNik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfNjQodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXFxuK3tcXG4rXFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0bW92bnRpXzMyKGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGNudClcXG4ge1xcbiBcXHRpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY250KSkge1xcbiBcXHRcXHRzd2l0Y2ggKGNudCkge1xcbkBAIC05NiwxMCArMTI0LDQ4IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfZmx1c2hjYWNoZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKilkc3QpIDogXFxcInJcXFwiKCoodTY0ICopc3JjKSk7XFxuIFxcdFxcdFxcdFxcdGFzbSAoXFxcIm1vdm50aXEgJTEsICUwXFxcIiA6IFxcXCI9bVxcXCIoKih1NjQgKikoZHN0ICsgOCkpIDogXFxcInJcXFwiKCoodTY0ICopKHNyYyArIDgpKSk7XFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIHJlbGV2YW50IGZpeGVkLXNpemUgY29waWVzIGhlcmUgYXJlIHRoZVxcbitcXHRcXHRcXHQgKiB4ODZfNjQgc3RydWN0IHBhZ2Ugc2l6ZXM6IDY0LCA4MCwgYW5kIDk2IGJ5dGVzLlxcbitcXHRcXHRcXHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXFxuK1xcdFxcdFxcdCAqIGluc3RlYWQgb2Ygc2VuZGluZyB0aG9zZSBuZWFyYnkgZml4ZWQtc2l6ZVxcbitcXHRcXHRcXHQgKiBjYXNlcyBiYWNrIHRvIF9fbWVtY3B5X2ZsdXNoY2FjaGUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhc2UgMzI6XFxuK1xcdFxcdFxcdFxcdG1vdm50aV8zMihkc3QsIHNyYyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA0ODpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzMyKGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzE2KGRzdCArIDMyLCBzcmMgKyAzMik7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0Y2FzZSA2NDpcXG4rXFx0XFx0XFx0XFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDgwOlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMTYoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRjYXNlIDk2OlxcbitcXHRcXHRcXHRcXHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xcbitcXHRcXHRcXHRcXHRtb3ZudGlfMzIoZHN0ICsgNjQsIHNyYyArIDY0KTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XFxuIH1cXG4rXFxuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBSZXVzZSB0aGUgZXhpc3RpbmcgeDg2IGZsdXNoY2FjaGUgYmFja2VuZCBhcyB0aGUgbm9uLXRlbXBvcmFsIGNvcHlcXG4rICogcHJpbWl0aXZlLlxcbisgKi9cXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9ub250ZW1wb3JhbCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYyxcXG4rXFx0XFx0c2l6ZV90IGNudClcXG4re1xcbitcXHRtZW1jcHlfZmx1c2hjYWNoZShkc3QsIHNyYywgY250KTtcXG4rfVxcbitcXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19LRVJORUxfXyAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmhcXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbS5oXFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcXG4gXFx0cGFnZS1cXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcXHUwMDI2IFNFQ1RJT05TX01BU0spIFxcdTAwM2NcXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXFxuIHtcXG4gXFx0cmV0dXJuIChtZGYuZiBcXHUwMDNlXFx1MDAzZSBTRUNUSU9OU19QR1NISUZUKSBcXHUwMDI2IFNFQ1RJT05TX01BU0s7XFxuIH1cXG4gI2Vsc2UgLyogIVNFQ1RJT05fSU5fUEFHRV9GTEFHUyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWRlc2Nfc2VjdGlvbihtZW1kZXNjX2ZsYWdzX3QgbWRmKVxcbiB7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0yNzY4LDkgKzI3NzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfbGlua3Moc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV90eXBlIHpvbmUsXFxuIHtcXG4gXFx0c2V0X3BhZ2Vfem9uZShwYWdlLCB6b25lKTtcXG4gXFx0c2V0X3BhZ2Vfbm9kZShwYWdlLCBub2RlKTtcXG4tI2lmZGVmIFNFQ1RJT05fSU5fUEFHRV9GTEFHU1xcbi1cXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xcbi0jZW5kaWZcXG4rXFx0c2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihwYWdlLCBwZm4pO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmhcXG5AQCAtMjc4LDYgKzI3OCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIG1lbWNweV9ub250ZW1wb3JhbFxcbisvKlxcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXFxuKyAqIGFyY2hpdGVjdHVyZSBoYXMgYSBzdWl0YWJsZSBiYWNrZW5kLiBBcmNoaXRlY3R1cmVzIHdpdGhvdXQgYVxcbisgKiBzcGVjaWFsaXplZCBiYWNrZW5kIGZhbGwgYmFjayB0byBtZW1jcHkoKS4gS2VlcCB0aGlzIGFzIGEgbWFjcm8gYWxpYXNcXG4rICogc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmRcXG4rICogcHJlc2VydmUgdGhlIHVzdWFsIEZPUlRJRlkgY292ZXJhZ2Ugd2hlbiBvYmplY3Qgc2l6ZXMgcmVtYWluIHZpc2libGVcXG4rICogdGhlcmUuXFxuKyAqL1xcbisjZGVmaW5lIG1lbWNweV9ub250ZW1wb3JhbCBtZW1jcHlcXG4rI2VuZGlmXFxuK1xcbiB2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7XFxuIGNoYXIgKnN0cnJlcGxhY2UoY2hhciAqc3RyLCBjaGFyIG9sZCwgY2hhciBuZXcpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggMGY2NDkwOWU4ZDIwZTIuLmFlNDJhMTMxMWUxZDE4IDEwMDY0NFxcbi0tLSBhL21tL21tX2luaXQuY1xcbisrKyBiL21tL21tX2luaXQuY1xcbkBAIC0xMDA1LDExICsxMDA1LDM3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX1pPTkVfREVWSUNFXFxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4rLypcXG4rICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxcbisgKiB0aGUgZnJlZSBwYXRoLCB3aGlsZSB0aGUgcmVtYWluaW5nIFpPTkVfREVWSUNFIHR5cGVzIHN0YXJ0IGZyb20gMCBoZXJlXFxuKyAqIGFuZCByYWlzZSB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZVxcbisgKiBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluIHRoZSBmcmVlXFxuK1xcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXFxuK1xcdCAqIHRoZSBjb3VudCBhZ2FpbiB3aGVuIHRoZSBhbGxvY2F0b3Igb3IgZHJpdmVyIGhhbmRzIHRoZSBwYWdlIG91dC5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaCAocGdtYXAtXFx1MDAzZXR5cGUpIHtcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XFxuK1xcdGNhc2UgTUVNT1JZX0RFVklDRV9DT0hFUkVOVDpcXG4rXFx0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9fcmVmIF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxuIHtcXG4tXFxuIFxcdF9faW5pdF9zaW5nbGVfcGFnZShwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXFxuIFxcdCAqL1xcbiBcXHRwYWdlX2ZvbGlvKHBhZ2UpLVxcdTAwM2VwZ21hcCA9IHBnbWFwO1xcbiBcXHRwYWdlLVxcdTAwM2V6b25lX2RldmljZV9kYXRhID0gTlVMTDtcXG4rfVxcbiBcXG4tXFx0LypcXG4tXFx0ICogWk9ORV9ERVZJQ0UgcGFnZXMgb3RoZXIgdGhhbiBNRU1PUllfVFlQRV9HRU5FUklDIGFyZSByZWxlYXNlZFxcbi1cXHQgKiBkaXJlY3RseSB0byB0aGUgZHJpdmVyIHBhZ2UgYWxsb2NhdG9yIHdoaWNoIHdpbGwgc2V0IHRoZSBwYWdlIGNvdW50XFxuLVxcdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxcbi1cXHQgKlxcbi1cXHQgKiBNRU1PUllfVFlQRV9HRU5FUklDIGFuZCBNRU1PUllfVFlQRV9GU19EQVggcGFnZXMgYXV0b21hdGljYWxseSBoYXZlXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXFxuLVxcdCAqIHRoZWlyIHJlZmNvdW50IGRyb3BzIHRvIDApLlxcbi1cXHQgKi9cXG4tXFx0c3dpdGNoIChwZ21hcC1cXHUwMDNldHlwZSkge1xcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxcbi1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcXG4rc3RhdGljIHZvaWQgX19yZWYgem9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3coc3RydWN0IHBhZ2UgKnBhZ2UsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfaWR4LCBpbnQgbmlkLFxcbitcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbit7XFxuK1xcdF9fem9uZV9kZXZpY2VfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXApO1xcbitcXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXFxuIFxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbi1cXHRcXHRicmVhaztcXG4rfVxcbiBcXG4tXFx0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV90YWlsX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXFxuK1xcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGNvbnN0IHN0cnVjdCBwYWdlICpoZWFkLFxcbitcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuK1xcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcXG4rICogb2JqZWN0LiBNb3N0IFpPTkVfREVWSUNFIGZpZWxkcyBzdGF5IGNvbnN0YW50IGFjcm9zcyB0aGUgcGFnZXMgY292ZXJlZCBieVxcbisgKiB0aGUgY3VycmVudCB0ZW1wbGF0ZSwgYnV0IHNlY3Rpb24gYml0cyBhbmQgcGFnZS1cXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXFxuKyAqIG9uIHRoZSBQRk4uIFJlZnJlc2ggdGhvc2UgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhlIHRlbXBsYXRlIGJlZm9yZVxcbisgKiBjb3B5aW5nIGl0IGludG8gQHBhZ2UuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgem9uZV9kZXZpY2VfcGFnZV91cGRhdGVfdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnRlbXBsYXRlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbilcXG4re1xcbitcXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHRlbXBsYXRlLCBwZm4pO1xcbisjaWZkZWYgV0FOVF9QQUdFX1ZJUlRVQUxcXG4rXFx0aWYgKCFpc19oaWdobWVtX2lkeChaT05FX0RFVklDRSkpXFxuK1xcdFxcdHNldF9wYWdlX2FkZHJlc3ModGVtcGxhdGUsIF9fdmEocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHN0cnVjdCBwYWdlICpwYWdlLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHBhZ2UgKnRlbXBsYXRlKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcXG4rXFx0ICogcGFnZS4gVXBkYXRlIHRoZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiBwbGFjZSBiZWZvcmUgY29weWluZyBpdFxcbitcXHQgKiB0byB0aGUgZGVzdGluYXRpb24gcGFnZS5cXG4rXFx0ICovXFxuK1xcdHpvbmVfZGV2aWNlX3BhZ2VfdXBkYXRlX3RlbXBsYXRlKHRlbXBsYXRlLCBwZm4pO1xcbitcXHRtZW1jcHlfbm9udGVtcG9yYWwocGFnZSwgdGVtcGxhdGUsIHNpemVvZigqcGFnZSkpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xMDgzLDYgKzExMzYsNyBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbiwgZW5kX3BmbiA9IGhlYWRfcGZuICsgbnJfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGludCBvcmRlciA9IHBnbWFwLVxcdTAwM2V2bWVtbWFwX3NoaWZ0O1xcbitcXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXFxuQEAgLTEwOTEsMTIgKzExNDUsMjYgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuIFxcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cXG4gXFx0ICovXFxuIFxcdF9fU2V0UGFnZUhlYWQoaGVhZCk7XFxuK1xcbiBcXHRmb3IgKHBmbiA9IGhlYWRfcGZuICsgMTsgcGZuIFxcdTAwM2MgZW5kX3BmbjsgcGZuKyspIHtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuLVxcdFxcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XFxuLVxcdFxcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xcbitcXHRcXHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBBbGwgdGFpbHMgb2YgdGhlIHNhbWUgY29tcG91bmQgcGFnZSBzaGFyZSB0aGVcXG4rXFx0XFx0XFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXFxuK1xcdFxcdFxcdCAqIG9uZSB0YWlsIHRlbXBsYXRlIGZvciB0aGUgd2hvbGUgcmFuZ2UgYW5kXFxuK1xcdFxcdFxcdCAqIHJlZnJlc2ggb25seSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gdGhhdFxcbitcXHRcXHRcXHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfdGFpbF9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xcbitcXHRcXHRcXHQvKiBpbml0IHRlbXBsYXRlIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKHBhZ2UsIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZ0ZW1wbGF0ZSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRwcmVwX2NvbXBvdW5kX2hlYWQoaGVhZCwgb3JkZXIpO1xcbiB9XFxuQEAgLTExMTMsNiArMTE4MSw3IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7XFxuIFxcdGludCBuaWQgPSBwZ2RhdC1cXHUwMDNlbm9kZV9pZDtcXG4rXFx0c3RydWN0IHBhZ2UgdGVtcGxhdGU7XFxuIFxcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFwZ21hcCB8fCB6b25lX2lkeCAhPSBaT05FX0RFVklDRSkpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTEzMCw3ICsxMTk5LDIxIEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIFxcdGZvciAocGZuID0gc3RhcnRfcGZuOyBwZm4gXFx1MDAzYyBlbmRfcGZuOyBwZm4gKz0gcGZuc19wZXJfY29tcG91bmQpIHtcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pO1xcbiBcXG4tXFx0XFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFNlZWQgdGhlIHJldXNhYmxlIGhlYWQtcGFnZSB0ZW1wbGF0ZSBmcm9tIHRoZVxcbitcXHRcXHRcXHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xcbitcXHRcXHRcXHQgKiBwYWdlLWluaXQgYW5kIHBhZ2VibG9jayBoZWxwZXJzIGV4cGVjdCBhIHJlYWxcXG4rXFx0XFx0XFx0ICogbWVtbWFwIGVudHJ5IHJhdGhlciB0aGFuIGEgc3RhY2sgb2JqZWN0LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X3Nsb3cocGFnZSwgcGZuLCB6b25lX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbmlkLCBwZ21hcCk7XFxuK1xcdFxcdFxcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnRlbXBsYXRlLCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnRlbXBsYXRlKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKElTX0FMSUdORUQocGZuLCBQQUdFU19QRVJfU0VDVElPTikpXFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjoyOS4xMjUyNzA5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjczOTQxNjk4NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTk1ZDk4NmY4ZjA3YjY0MDRmNmU2ZWRlOWUzMGRhMTc5YjRjNDAxN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDIwIDE2OjEyOjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaFxuaW5kZXggNDYzNTYxNjg2M2Y1M2QuLmJjNmE5ZjM0YjM0NmFmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RyaW5nXzY0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oXG5AQCAtODIsNyArODIsMzUgQEAgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpO1xuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1DUFlfRkxVU0hDQUNIRSAxXG4gdm9pZCBfX21lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY250KTtcbi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1vdm50aV84KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdGFzbSB2b2xhdGlsZShcIm1vdm50aXEgJTEsICUwXCJcbitcdFx0ICAgICA6IFwiPW1cIigqKHU2NCAqKWRzdClcbitcdFx0ICAgICA6IFwiclwiKCooY29uc3QgdTY0ICopc3JjKVxuK1x0XHQgICAgIDogXCJtZW1vcnlcIik7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzgoZHN0LCBzcmMpO1xuK1x0bW92bnRpXzgoZHN0ICsgOCwgc3JjICsgOCk7XG4rfVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfMzIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpXG4re1xuK1x0bW92bnRpXzE2KGRzdCwgc3JjKTtcbitcdG1vdm50aV8xNihkc3QgKyAxNiwgc3JjICsgMTYpO1xuK31cbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW92bnRpXzY0KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKVxuK3tcbitcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRtb3ZudGlfMzIoZHN0ICsgMzIsIHNyYyArIDMyKTtcbit9XG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNweV9mbHVzaGNhY2hlKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLFxuK1x0XHRcdFx0XHQgICAgICBzaXplX3QgY250KVxuIHtcbiBcdGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChjbnQpKSB7XG4gXHRcdHN3aXRjaCAoY250KSB7XG5AQCAtOTYsMTAgKzEyNCw0OCBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdFxuIFx0XHRcdFx0YXNtIChcIm1vdm50aXEgJTEsICUwXCIgOiBcIj1tXCIoKih1NjQgKilkc3QpIDogXCJyXCIoKih1NjQgKilzcmMpKTtcbiBcdFx0XHRcdGFzbSAoXCJtb3ZudGlxICUxLCAlMFwiIDogXCI9bVwiKCoodTY0ICopKGRzdCArIDgpKSA6IFwiclwiKCoodTY0ICopKHNyYyArIDgpKSk7XG4gXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LypcbitcdFx0XHQgKiBUaGUgcmVsZXZhbnQgZml4ZWQtc2l6ZSBjb3BpZXMgaGVyZSBhcmUgdGhlXG4rXHRcdFx0ICogeDg2XzY0IHN0cnVjdCBwYWdlIHNpemVzOiA2NCwgODAsIGFuZCA5NiBieXRlcy5cbitcdFx0XHQgKiBLZWVwIDMyLWJ5dGUgYW5kIDQ4LWJ5dGUgY29waWVzIGlubGluZSBhcyB3ZWxsXG4rXHRcdFx0ICogaW5zdGVhZCBvZiBzZW5kaW5nIHRob3NlIG5lYXJieSBmaXhlZC1zaXplXG4rXHRcdFx0ICogY2FzZXMgYmFjayB0byBfX21lbWNweV9mbHVzaGNhY2hlKCkuXG4rXHRcdFx0ICovXG4rXHRcdFx0Y2FzZSAzMjpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0Y2FzZSA0ODpcbitcdFx0XHRcdG1vdm50aV8zMihkc3QsIHNyYyk7XG4rXHRcdFx0XHRtb3ZudGlfMTYoZHN0ICsgMzIsIHNyYyArIDMyKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDY0OlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHRjYXNlIDgwOlxuK1x0XHRcdFx0bW92bnRpXzY0KGRzdCwgc3JjKTtcbitcdFx0XHRcdG1vdm50aV8xNihkc3QgKyA2NCwgc3JjICsgNjQpO1xuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdGNhc2UgOTY6XG4rXHRcdFx0XHRtb3ZudGlfNjQoZHN0LCBzcmMpO1xuK1x0XHRcdFx0bW92bnRpXzMyKGRzdCArIDY0LCBzcmMgKyA2NCk7XG4rXHRcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbitcbiBcdF9fbWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4gfVxuK1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweV9ub250ZW1wb3JhbFxuKy8qXG4rICogUmV1c2UgdGhlIGV4aXN0aW5nIHg4NiBmbHVzaGNhY2hlIGJhY2tlbmQgYXMgdGhlIG5vbi10ZW1wb3JhbCBjb3B5XG4rICogcHJpbWl0aXZlLlxuKyAqL1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtZW1jcHlfbm9udGVtcG9yYWwodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsXG4rXHRcdHNpemVfdCBjbnQpXG4re1xuK1x0bWVtY3B5X2ZsdXNoY2FjaGUoZHN0LCBzcmMsIGNudCk7XG4rfVxuK1xuICNlbmRpZlxuIFxuICNlbmRpZiAvKiBfX0tFUk5FTF9fICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oXG5pbmRleCA0ODVkZjljMmRiZGRiMy4uNDMzNDNiZmNlNDkzNmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW0uaFxuQEAgLTI1NDEsMTEgKzI1NDEsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3NlY3Rpb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgc2VjdGlvbilcbiBcdHBhZ2UtXHUwMDNlZmxhZ3MuZiB8PSAoc2VjdGlvbiBcdTAwMjYgU0VDVElPTlNfTUFTSykgXHUwMDNjXHUwMDNjIFNFQ1RJT05TX1BHU0hJRlQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHRzZXRfcGFnZV9zZWN0aW9uKHBhZ2UsIHBmbl90b19zZWN0aW9uX25yKHBmbikpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIChtZGYuZiBcdTAwM2VcdTAwM2UgU0VDVElPTlNfUEdTSElGVCkgXHUwMDI2IFNFQ1RJT05TX01BU0s7XG4gfVxuICNlbHNlIC8qICFTRUNUSU9OX0lOX1BBR0VfRkxBR1MgKi9cbitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2Vfc2VjdGlvbl9mcm9tX3BmbihzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4pXG4re1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtZGVzY19zZWN0aW9uKG1lbWRlc2NfZmxhZ3NfdCBtZGYpXG4ge1xuIFx0cmV0dXJuIDA7XG5AQCAtMjc2OCw5ICsyNzc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2xpbmtzKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHpvbmVfdHlwZSB6b25lLFxuIHtcbiBcdHNldF9wYWdlX3pvbmUocGFnZSwgem9uZSk7XG4gXHRzZXRfcGFnZV9ub2RlKHBhZ2UsIG5vZGUpO1xuLSNpZmRlZiBTRUNUSU9OX0lOX1BBR0VfRkxBR1Ncbi1cdHNldF9wYWdlX3NlY3Rpb24ocGFnZSwgcGZuX3RvX3NlY3Rpb25fbnIocGZuKSk7XG4tI2VuZGlmXG4rXHRzZXRfcGFnZV9zZWN0aW9uX2Zyb21fcGZuKHBhZ2UsIHBmbik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5pbmRleCA1NzAyZGFjYTQzMjZiNy4uOTgxNWMwODg2N2Q3MjkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oXG5AQCAtMjc4LDYgKzI3OCwxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2ZsdXNoY2FjaGUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjbnQpXG4gfVxuICNlbmRpZlxuIFxuKyNpZm5kZWYgbWVtY3B5X25vbnRlbXBvcmFsXG4rLypcbisgKiBtZW1jcHlfbm9udGVtcG9yYWwoKSByZXF1ZXN0cyBhIG5vbi10ZW1wb3JhbCBjb3B5IHdoZW4gdGhlXG4rICogYXJjaGl0ZWN0dXJlIGhhcyBhIHN1aXRhYmxlIGJhY2tlbmQuIEFyY2hpdGVjdHVyZXMgd2l0aG91dCBhXG4rICogc3BlY2lhbGl6ZWQgYmFja2VuZCBmYWxsIGJhY2sgdG8gbWVtY3B5KCkuIEtlZXAgdGhpcyBhcyBhIG1hY3JvIGFsaWFzXG4rICogc28gdGhlIGNvbXBpbGVyIGNhbiBzdGlsbCBzZWUgdGhlIG9yaWdpbmFsIG1lbWNweSgpIGNhbGwgc2l0ZSBhbmRcbisgKiBwcmVzZXJ2ZSB0aGUgdXN1YWwgRk9SVElGWSBjb3ZlcmFnZSB3aGVuIG9iamVjdCBzaXplcyByZW1haW4gdmlzaWJsZVxuKyAqIHRoZXJlLlxuKyAqL1xuKyNkZWZpbmUgbWVtY3B5X25vbnRlbXBvcmFsIG1lbWNweVxuKyNlbmRpZlxuK1xuIHZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTtcbiBjaGFyICpzdHJyZXBsYWNlKGNoYXIgKnN0ciwgY2hhciBvbGQsIGNoYXIgbmV3KTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDBmNjQ5MDllOGQyMGUyLi5hZTQyYTEzMTFlMWQxOCAxMDA2NDRcbi0tLSBhL21tL21tX2luaXQuY1xuKysrIGIvbW0vbW1faW5pdC5jXG5AQCAtMTAwNSwxMSArMTAwNSwzNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19aT05FX0RFVklDRVxuLXN0YXRpYyB2b2lkIF9fcmVmIF9faW5pdF96b25lX2RldmljZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHBmbixcbisvKlxuKyAqIFJldHVybiB0cnVlIHdoZW4gbWVtbWFwX2luaXRfem9uZV9kZXZpY2UoKSBtdXN0IGluaXRpYWxpemUgdGhlIHBhZ2VcbisgKiByZWZjb3VudCB0byAwLiBNRU1PUllfREVWSUNFX0dFTkVSSUMgcGFnZXMgcmVnYWluIGEgcmVmY291bnQgb2YgMSBpblxuKyAqIHRoZSBmcmVlIHBhdGgsIHdoaWxlIHRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmVcbisgKiBhbmQgcmFpc2UgdGhlIGNvdW50IGFnYWluIHdoZW4gdGhlIGFsbG9jYXRvciBvciBkcml2ZXIgaGFuZHMgdGhlIHBhZ2VcbisgKiBvdXQuXG4rICovXG4rc3RhdGljIGlubGluZSBib29sIHBhZ2VtYXBfcmVxdWlyZXNfcmVmY291bnRfcmVzZXQoY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbit7XG4rXHQvKlxuK1x0ICogTUVNT1JZX0RFVklDRV9HRU5FUklDIHBhZ2VzIHJlZ2FpbiBhIHJlZmNvdW50IG9mIDEgaW4gdGhlIGZyZWVcbitcdCAqIHBhdGguIFRoZSByZW1haW5pbmcgWk9ORV9ERVZJQ0UgdHlwZXMgc3RhcnQgZnJvbSAwIGhlcmUgYW5kIHJhaXNlXG4rXHQgKiB0aGUgY291bnQgYWdhaW4gd2hlbiB0aGUgYWxsb2NhdG9yIG9yIGRyaXZlciBoYW5kcyB0aGUgcGFnZSBvdXQuXG4rXHQgKi9cbitcdHN3aXRjaCAocGdtYXAtXHUwMDNldHlwZSkge1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0ZTX0RBWDpcbitcdGNhc2UgTUVNT1JZX0RFVklDRV9QUklWQVRFOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0NPSEVSRU5UOlxuK1x0Y2FzZSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0Y2FzZSBNRU1PUllfREVWSUNFX0dFTkVSSUM6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19yZWYgX196b25lX2RldmljZV9wYWdlX2luaXQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuIFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbiB7XG4tXG4gXHRfX2luaXRfc2luZ2xlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkKTtcbiBcbiBcdC8qXG5AQCAtMTAyOCwyNyArMTA1NCw1NCBAQCBzdGF0aWMgdm9pZCBfX3JlZiBfX2luaXRfem9uZV9kZXZpY2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXHQgKi9cbiBcdHBhZ2VfZm9saW8ocGFnZSktXHUwMDNlcGdtYXAgPSBwZ21hcDtcbiBcdHBhZ2UtXHUwMDNlem9uZV9kZXZpY2VfZGF0YSA9IE5VTEw7XG4rfVxuIFxuLVx0Lypcbi1cdCAqIFpPTkVfREVWSUNFIHBhZ2VzIG90aGVyIHRoYW4gTUVNT1JZX1RZUEVfR0VORVJJQyBhcmUgcmVsZWFzZWRcbi1cdCAqIGRpcmVjdGx5IHRvIHRoZSBkcml2ZXIgcGFnZSBhbGxvY2F0b3Igd2hpY2ggd2lsbCBzZXQgdGhlIHBhZ2UgY291bnRcbi1cdCAqIHRvIDEgd2hlbiBhbGxvY2F0aW5nIHRoZSBwYWdlLlxuLVx0ICpcbi1cdCAqIE1FTU9SWV9UWVBFX0dFTkVSSUMgYW5kIE1FTU9SWV9UWVBFX0ZTX0RBWCBwYWdlcyBhdXRvbWF0aWNhbGx5IGhhdmVcbi1cdCAqIHRoZWlyIHJlZmNvdW50IHJlc2V0IHRvIG9uZSB3aGVuZXZlciB0aGV5IGFyZSBmcmVlZCAoaWUuIGFmdGVyXG4tXHQgKiB0aGVpciByZWZjb3VudCBkcm9wcyB0byAwKS5cbi1cdCAqL1xuLVx0c3dpdGNoIChwZ21hcC1cdTAwM2V0eXBlKSB7XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfRlNfREFYOlxuLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfQ09IRVJFTlQ6XG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQTpcbitzdGF0aWMgdm9pZCBfX3JlZiB6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSxcbitcdFx0dW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgem9uZV9pZHgsIGludCBuaWQsXG4rXHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXG4re1xuK1x0X196b25lX2RldmljZV9wYWdlX2luaXQocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRpZiAocGFnZW1hcF9yZXF1aXJlc19yZWZjb3VudF9yZXNldChwZ21hcCkpXG4gXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuLVx0XHRicmVhaztcbit9XG4gXG4tXHRjYXNlIE1FTU9SWV9ERVZJQ0VfR0VORVJJQzpcbi1cdFx0YnJlYWs7XG4tXHR9XG4rc3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHN0cnVjdCBwYWdlICpwYWdlLFxuK1x0XHR1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB6b25lX2lkeCwgaW50IG5pZCxcbitcdFx0c3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgY29uc3Qgc3RydWN0IHBhZ2UgKmhlYWQsXG4rXHRcdHVuc2lnbmVkIGludCBvcmRlcilcbit7XG4rXHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LCBuaWQsIHBnbWFwKTtcbitcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4rXHRzZXRfcGFnZV9jb3VudChwYWdlLCAwKTtcbit9XG4rXG4rLypcbisgKiAndGVtcGxhdGUnIGlzIGEgcmV1c2FibGUgcGFnZSBwcm90b3R5cGUgcmF0aGVyIHRoYW4gYSBzdHJpY3RseSBpbW11dGFibGVcbisgKiBvYmplY3QuIE1vc3QgWk9ORV9ERVZJQ0UgZmllbGRzIHN0YXkgY29uc3RhbnQgYWNyb3NzIHRoZSBwYWdlcyBjb3ZlcmVkIGJ5XG4rICogdGhlIGN1cnJlbnQgdGVtcGxhdGUsIGJ1dCBzZWN0aW9uIGJpdHMgYW5kIHBhZ2UtXHUwMDNldmlydHVhbCBtYXkgc3RpbGwgZGVwZW5kXG4rICogb24gdGhlIFBGTi4gUmVmcmVzaCB0aG9zZSBQRk4tZGVwZW5kZW50IGZpZWxkcyBpbiB0aGUgdGVtcGxhdGUgYmVmb3JlXG4rICogY29weWluZyBpdCBpbnRvIEBwYWdlLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZShzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuKVxuK3tcbitcdHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm4odGVtcGxhdGUsIHBmbik7XG4rI2lmZGVmIFdBTlRfUEFHRV9WSVJUVUFMXG4rXHRpZiAoIWlzX2hpZ2htZW1faWR4KFpPTkVfREVWSUNFKSlcbitcdFx0c2V0X3BhZ2VfYWRkcmVzcyh0ZW1wbGF0ZSwgX192YShwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbisjZW5kaWZcbit9XG4rXG4rc3RhdGljIHZvaWQgem9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXG4rXHRcdHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZSAqdGVtcGxhdGUpXG4re1xuK1x0LypcbitcdCAqICd0ZW1wbGF0ZScgY2FycmllcyB0aGUgaW52YXJpYW50IHBvcnRpb24gb2YgYSBaT05FX0RFVklDRSBzdHJ1Y3RcbitcdCAqIHBhZ2UuIFVwZGF0ZSB0aGUgUEZOLWRlcGVuZGVudCBmaWVsZHMgaW4gcGxhY2UgYmVmb3JlIGNvcHlpbmcgaXRcbitcdCAqIHRvIHRoZSBkZXN0aW5hdGlvbiBwYWdlLlxuK1x0ICovXG4rXHR6b25lX2RldmljZV9wYWdlX3VwZGF0ZV90ZW1wbGF0ZSh0ZW1wbGF0ZSwgcGZuKTtcbitcdG1lbWNweV9ub250ZW1wb3JhbChwYWdlLCB0ZW1wbGF0ZSwgc2l6ZW9mKCpwYWdlKSk7XG4gfVxuIFxuIC8qXG5AQCAtMTA4Myw2ICsxMTM2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm4gPSBoZWFkX3BmbiArIG5yX3BhZ2VzO1xuIFx0dW5zaWduZWQgaW50IG9yZGVyID0gcGdtYXAtXHUwMDNldm1lbW1hcF9zaGlmdDtcbitcdHN0cnVjdCBwYWdlIHRlbXBsYXRlO1xuIFxuIFx0LypcbiBcdCAqIFdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGFnZXMsIGluY2x1ZGluZyBzZXR0aW5nIHVwIHBhZ2UgbGlua3MuXG5AQCAtMTA5MSwxMiArMTE0NSwyNiBAQCBzdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcbiBcdCAqIHRoZSBwYWdlcyBpbiB0aGUgc2FtZSBnby5cbiBcdCAqL1xuIFx0X19TZXRQYWdlSGVhZChoZWFkKTtcbitcbiBcdGZvciAocGZuID0gaGVhZF9wZm4gKyAxOyBwZm4gXHUwMDNjIGVuZF9wZm47IHBmbisrKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4tXHRcdHByZXBfY29tcG91bmRfdGFpbChwYWdlLCBoZWFkLCBvcmRlcik7XG4tXHRcdHNldF9wYWdlX2NvdW50KHBhZ2UsIDApO1xuK1x0XHRpZiAocGZuID09IGhlYWRfcGZuICsgMSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQWxsIHRhaWxzIG9mIHRoZSBzYW1lIGNvbXBvdW5kIHBhZ2Ugc2hhcmUgdGhlXG4rXHRcdFx0ICogc3RhdGUgZXN0YWJsaXNoZWQgYnkgcHJlcF9jb21wb3VuZF90YWlsKCkuIFJldXNlXG4rXHRcdFx0ICogb25lIHRhaWwgdGVtcGxhdGUgZm9yIHRoZSB3aG9sZSByYW5nZSBhbmRcbitcdFx0XHQgKiByZWZyZXNoIG9ubHkgdGhlIFBGTi1kZXBlbmRlbnQgZmllbGRzIGluIHRoYXRcbitcdFx0XHQgKiB0ZW1wbGF0ZSBiZWZvcmUgZWFjaCBjb3B5LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHpvbmVfZGV2aWNlX3RhaWxfcGFnZV9pbml0KHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCxcbitcdFx0XHRcdFx0XHQgICBwZ21hcCwgaGVhZCwgb3JkZXIpO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFx0fVxuIFx0cHJlcF9jb21wb3VuZF9oZWFkKGhlYWQsIG9yZGVyKTtcbiB9XG5AQCAtMTExMyw2ICsxMTgxLDcgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9pZHggPSB6b25lX2lkeCh6b25lKTtcbiBcdHVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzO1xuIFx0aW50IG5pZCA9IHBnZGF0LVx1MDAzZW5vZGVfaWQ7XG4rXHRzdHJ1Y3QgcGFnZSB0ZW1wbGF0ZTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoIXBnbWFwIHx8IHpvbmVfaWR4ICE9IFpPTkVfREVWSUNFKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTExMzAsNyArMTE5OSwyMSBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxuIFx0Zm9yIChwZm4gPSBzdGFydF9wZm47IHBmbiBcdTAwM2MgZW5kX3BmbjsgcGZuICs9IHBmbnNfcGVyX2NvbXBvdW5kKSB7XG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTtcbiBcbi1cdFx0X19pbml0X3pvbmVfZGV2aWNlX3BhZ2UocGFnZSwgcGZuLCB6b25lX2lkeCwgbmlkLCBwZ21hcCk7XG4rXHRcdGlmIChwZm4gPT0gc3RhcnRfcGZuKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBTZWVkIHRoZSByZXVzYWJsZSBoZWFkLXBhZ2UgdGVtcGxhdGUgZnJvbSB0aGVcbitcdFx0XHQgKiBmaXJzdCByZWFsIHN0cnVjdCBwYWdlLCBiZWNhdXNlIHRoZSBleGlzdGluZ1xuK1x0XHRcdCAqIHBhZ2UtaW5pdCBhbmQgcGFnZWJsb2NrIGhlbHBlcnMgZXhwZWN0IGEgcmVhbFxuK1x0XHRcdCAqIG1lbW1hcCBlbnRyeSByYXRoZXIgdGhhbiBhIHN0YWNrIG9iamVjdC5cbitcdFx0XHQgKi9cbitcdFx0XHR6b25lX2RldmljZV9wYWdlX2luaXRfc2xvdyhwYWdlLCBwZm4sIHpvbmVfaWR4LFxuK1x0XHRcdFx0XHRcdCAgIG5pZCwgcGdtYXApO1xuK1x0XHRcdC8qIGluaXQgdGVtcGxhdGUgcGFnZSAqL1xuK1x0XHRcdG1lbWNweShcdTAwMjZ0ZW1wbGF0ZSwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0em9uZV9kZXZpY2VfcGFnZV9pbml0X2Zyb21fdGVtcGxhdGUocGFnZSwgcGZuLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNnRlbXBsYXRlKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIFBBR0VTX1BFUl9TRUNUSU9OKSlcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjI5LjEyNTI3Mjk5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY0MzA3MzAwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgWk9ORV9ERVZJQ0UgTWVtb3J5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgc2V2ZXJhbCBrZXkgZmlsZXM6IGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIGBpbmNsdWRlL2xpbnV4L21tLmhgLCBgaW5jbHVkZS9saW51eC9zdHJpbmcuaGAsIGFuZCBgbW0vbW1faW5pdC5jYC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYSBgbWVtY3B5X25vbnRlbXBvcmFsYCBmdW5jdGlvbiwgYW5kIHRoZW4gdXNpbmcgaXQgd2l0aGluIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyBhbGwgYWJvdXQgaW5pdGlhbGl6aW5nIGBzdHJ1Y3QgcGFnZWAgc3RydWN0dXJlcyBzcGVjaWZpY2FsbHkgZm9yIFpPTkVfREVWSUNFIG1lbW9yeS4gSXQgYWxzbyBpbmNsdWRlcyBhZGRpbmcgYG1vdm50aV84YCwgYG1vdm50aV8xNmAsIGBtb3ZudGlfMzJgLCBhbmQgYG1vdm50aV82NGAgdG8gYHg4NiBzdHJpbmdfNjQuaGAuXG5cblRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gd2UgYWN0dWFsbHkgKmhpdCogdGhpcyBjb2RlIHBhdGggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB1c2VkIGZvciBaT05FX0RFVklDRSBtZW1vcnksIHdoaWNoIGlzIGNvbW1vbmx5IGFzc29jaWF0ZWQgd2l0aCBEQVgsIFBNRU0sIGFuZCBzaW1pbGFyIHRlY2hub2xvZ2llcy4gU3VyZSwgd2UgY2FuIGVtdWxhdGUgTlZESU1NIG9yIFBNRU0gZGV2aWNlcyB3aXRoaW4gUUVNVSwgb3IgdXNlIGBtZW1tYXA9Li4uIXNvbWV0aGluZ2AgdG8gZm9yY2UgdGhlIGNyZWF0aW9uIG9mIFpPTkVfREVWSUNFIG1lbW9yeS4gQnV0IHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgYmUgdHJpZ2dlcmVkIGJ5IHN5emthbGxlcj9cblxuU3l6a2FsbGVyIGNhbiB3b3JrIHdpdGggYC9kZXYvZGF4YCBpZiBwcm9wZXJseSBjb25maWd1cmVkLCBidXQgZG9lcyBpdCBkaXJlY3RseSBjYWxsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgb24gaXRzIG93bj8gTWF5YmUgaXQgaXMgY2FsbGVkIGR1cmluZyBtZW1vcnkgaG90cGx1Zy4gTm8sIHdhaXQsIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgaXMgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcHJvYmVkLiBTbyB3aGVuIGEgcG1lbSBvciBkYXggZGV2aWNlIGlzIGluaXRpYWxpemVkLlxuXG5TeXprYWxsZXIgdXN1YWxseSBkb2Vzbid0IGhvdHBsdWcgcG1lbSBkZXZpY2VzIGR5bmFtaWNhbGx5IHVubGVzcyBpdCdzIHRocm91Z2ggc29tZSBzcGVjaWZpYyBkcml2ZXJzIChsaWtlIG5kY3RsL252ZGltbSkuIEhtbW0sIGludGVyZXN0aW5nLiBTbywgaXMgaXQgZXZlbiAqd29ydGgqIGZ1enppbmcgdGhpcz9cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgb3B0aW1pemluZyBgc3RydWN0IHBhZ2VgIGluaXRpYWxpemF0aW9uIGZvciBaT05FX0RFVklDRSBieSBsZXZlcmFnaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKGBtb3ZudGlgKS4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBNTSBhbmQgeDg2IHN0cmluZyByb3V0aW5lcy4gVGhpcyBjb3VsZCBiZSB1c2VmdWwgZm9yIHNwZWVkaW5nIHVwIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZSBpZiB0aGVzZSBub24tdGVtcG9yYWwgc3RvcmVzIGFyZSBmYXN0ZXIuXG5cbk9rYXksIEknbGwgbmVlZCB0byBnbyBkZWVwZXIgYW5kIHNlYXJjaCBmb3IgZnVydGhlciB1c2FnZXMgb2YgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGNhbGxlZCBhbmQgaG93IGl0J3MgdXNlZC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjozNS43NjgzNDkzODJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3MDcxNjQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1tYXBfaW5pdF96b25lX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tem9uZS5oPTEzMTE9c3RhdGljIGlubGluZSBib29sIHpvbmVfZGV2aWNlX3BhZ2VzX2hhdmVfc2FtZV9wZ21hcChjb25zdCBzdHJ1Y3QgcGFnZSAqYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTMyMC1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjEzMjE6ZXh0ZXJuIHZvaWQgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKiwgdW5zaWduZWQgbG9uZyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTEzMjItXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBkZXZfcGFnZW1hcCAqKTtcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yNDEtXFx0ICovXFxubW0vbWVtcmVtYXAuYzoyNDI6XFx0bWVtbWFwX2luaXRfem9uZV9kZXZpY2UoXFx1MDAyNk5PREVfREFUQShuaWQpLVxcdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXSxcXG5tbS9tZW1yZW1hcC5jLTI0My1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbi0tXFxubW0vbW1faW5pdC5jPTk2OD1zdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0xMDA4LS8qXFxubW0vbW1faW5pdC5jOjEwMDk6ICogUmV0dXJuIHRydWUgd2hlbiBtZW1tYXBfaW5pdF96b25lX2RldmljZSgpIG11c3QgaW5pdGlhbGl6ZSB0aGUgcGFnZVxcbm1tL21tX2luaXQuYy0xMDEwLSAqIHJlZmNvdW50IHRvIDAuIE1FTU9SWV9ERVZJQ0VfR0VORVJJQyBwYWdlcyByZWdhaW4gYSByZWZjb3VudCBvZiAxIGluXFxuLS1cXG5tbS9tbV9pbml0LmM9MTEzMT1zdGF0aWMgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF9jb21wb3VuZChzdHJ1Y3QgcGFnZSAqaGVhZCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMTcxLVxcbm1tL21tX2luaXQuYzoxMTcyOnZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vbW1faW5pdC5jLTExNzMtXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjM4LjgzOTA3OTM1NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzQ3NzI5MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBPcmlnaW5zIG9mIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKipcblxuT2theSwgc28gYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBpcyB0aGUgdGFyZ2V0LCBhbmQgaXQgbG9va3MgbGlrZSBpdCdzIGJlaW5nIGludm9rZWQgZnJvbSBgcGFnZW1hcF9yYW5nZWAgd2l0aGluIGBtbS9tZW1yZW1hcC5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgd2UgZ290ICpoZXJlKiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgcGFnZW1hcF9yYW5nZWAuIEkgd2FudCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgcGFnZW1hcF9yYW5nZWAuIEtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBvZiBgcGFnZW1hcF9yYW5nZWAgd2lsbCBnaXZlIG1lIGNyaXRpY2FsIGluc2lnaHRzIGludG8gdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuIEknbGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgdG8gZGlnIHVwIGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgcGFnZW1hcF9yYW5nZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0Mi4wMTM4NTQ0MzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5MDgzMDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXJlbWFwLmM9MTM3PXN0YXRpYyB2b2lkIGRldl9wYWdlbWFwX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTE0My1cXG5tbS9tZW1yZW1hcC5jOjE0NDpzdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG5tbS9tZW1yZW1hcC5jLTE0NS1cXHRcXHRpbnQgcmFuZ2VfaWQsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy0zMzctXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX3JhbmdlOyBpKyspIHtcXG5tbS9tZW1yZW1hcC5jOjMzODpcXHRcXHRlcnJvciA9IHBhZ2VtYXBfcmFuZ2UocGdtYXAsIFxcdTAwMjZwYXJhbXMsIGksIG5pZCk7XFxubW0vbWVtcmVtYXAuYy0zMzktXFx0XFx0aWYgKGVycm9yKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0NC4yMDQ3MDQxMjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ1MjEwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIG1lbXJlbWFwX3BhZ2VzKipcblxuUmlnaHQsIHNvIGBtZW1yZW1hcF9wYWdlc2AgaXMgYmVpbmcgY2FsbGVkIGJ5ICpkcml2ZXJzKi4gVGhhdCdzIHRoZSBrZXkgc3RhcnRpbmcgcG9pbnQuIEl0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBoYXJkd2FyZSBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzdGVtJ3MgbWVtb3J5IHNwYWNlLiBEcml2ZXJzLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgYXJlIHJlc3BvbnNpYmxlIGZvciBpbnRlcmZhY2luZyB3aXRoIHBoeXNpY2FsIGRldmljZXMsIGFuZCBvZnRlbiBuZWVkIHRvIG1hcCBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBpbnRvIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGtlcm5lbCwgb3IgcG90ZW50aWFsbHkgZXZlbiB1c2VyIHNwYWNlLCBmb3IgRE1BIG9wZXJhdGlvbnMgb3IgZGlyZWN0IGFjY2Vzcy5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGlja2luZyB0aHJvdWdoIHRoZSBpbXBsaWNhdGlvbnM6IFdoYXQga2luZCBvZiBkcml2ZXJzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBuZXR3b3JrIGFkYXB0ZXJzIG1hcHBpbmcgYnVmZmVycywgZ3JhcGhpY3MgY2FyZHMgaGFuZGxpbmcgZnJhbWVidWZmZXJzLCBvciBzdG9yYWdlIGNvbnRyb2xsZXJzIGRlYWxpbmcgd2l0aCBkaXNrIHNlY3RvcnM/IFRoZSBzcGVjaWZpY3MgbWF0dGVyIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuIElzIHRoaXMgYSBjb21tb24gb3BlcmF0aW9uIG9yIHNvbWV0aGluZyByZWxhdGl2ZWx5IHJhcmU/IFRoZSBmcmVxdWVuY3kgb2YgaXRzIHVzZSB3aWxsIGdpdmUgYSBjbHVlIGFzIHRvIGl0cyBjcml0aWNhbGl0eSBmb3Igb3B0aW1pemF0aW9uLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMuIEhvdyBsYXJnZSBhcmUgdGhlIG1lbW9yeSByZWdpb25zIGJlaW5nIG1hcHBlZD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc2luZ2xlIHBhZ2VzLCBvciBwb3RlbnRpYWxseSBodWdlIGJsb2Nrcz8gTGFyZ2VyIHJlZ2lvbnMgaW1wbHkgcG90ZW50aWFsIGZvciBtb3JlIGNvbXBsZXggcGFnZSB0YWJsZSBtYW5pcHVsYXRpb25zIGFuZCByZXNvdXJjZSBjb250ZW50aW9uLiBBbmQgaXMgaXQgYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiB1c2VyIGFuZCBrZXJuZWwsIG9yIGlzIHRoaXMgbWFwcGluZyBwdXJlbHkga2VybmVsIHNwYWNlPyBTaGFyZWQgcmVnaW9ucyBjYW4gb3BlbiB1cCB2dWxuZXJhYmlsaXRpZXMgaWYgbm90IGhhbmRsZWQgY29ycmVjdGx5LlxuXG5JJ20gYWxzbyBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBlcnJvcnMuIFdoYXQgZXJyb3IgaGFuZGxpbmcgaXMgaW4gcGxhY2U/IEFyZSB3ZSBjaGVja2luZyBmb3IgdmFsaWQgcGh5c2ljYWwgYWRkcmVzc2VzPyBXaGF0IGhhcHBlbnMgaWYgdGhlIG1hcHBpbmcgZmFpbHMg4oCTIGRvZXMgaXQgZ3JhY2VmdWxseSBkZWdyYWRlLCBvciBjb3VsZCBpdCBsZWFkIHRvIHN5c3RlbSBpbnN0YWJpbGl0eT8gU2VjdXJpdHkgaW1wbGljYXRpb25zIGFyZSBhbm90aGVyIGltcG9ydGFudCBhc3BlY3QgdG8gY29uc2lkZXIgaGVyZSAtIGFyZSB0aGVyZSBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGRyaXZlciBjYW4gYWN0dWFsbHkgYWNjZXNzIHRoZSByZXF1ZXN0ZWQgbWVtb3J5PyBJcyB0aGVyZSBhIHJpc2sgb2YgbWVtb3J5IGxlYWtzIGlmIG1hcHBpbmdzIGFyZSBub3QgcHJvcGVybHkgdW5tYXBwZWQ/IFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Fc3NlbnRpYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSAqd2h5KiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGRyaXZlciBpcyB0cnlpbmcgdG8gKmFjaGlldmUqIHdpdGggYG1lbXJlbWFwX3BhZ2VzYC4gS25vd2luZyB0aGF0IHdpbGwgZW5hYmxlIG1lIHRvIHNlZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBmb2xsb3ctdXAgcXVlc3Rpb25zOiB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBOVU1BIHN5c3RlbXMsIGFuZCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBwYWdlIGNhY2hpbmcgYW5kIGNvaGVyZW5jZT8gVGltZSB0byBkaWcgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMjo0OC44NDk5NDE2MzVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NjI5NTUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1yZW1hcF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjc0PVRoZXNlIGNhbiBiZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIHdpdGg6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI4NS0gICAgcGFnZW1hcC5vcHMgPSBcXHUwMDI2ZGV2aWNlX2Rldm1lbV9vcHM7XFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI4NjogICAgbWVtcmVtYXBfcGFnZXMoXFx1MDAyNnBhZ2VtYXAsIG51bWFfbm9kZV9pZCgpKTtcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjg3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTI5MC1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MjkxOlRoZXJlIGFyZSBhbHNvIGRldm1fcmVxdWVzdF9mcmVlX21lbV9yZWdpb24oKSwgZGV2bV9tZW1yZW1hcF9wYWdlcygpLFxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0yOTItZGV2bV9tZW11bm1hcF9wYWdlcygpLCBhbmQgZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oKSB3aGVuIHRoZSByZXNvdXJjZXMgY2FuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q9MTQxPXRvIGtlZXAgdGhlIG1lbW9yeSBwaW5uZWQgZm9yIGFjdGl2ZSB1c2UuIGBaT05FX0RFVklDRWAsIHZpYVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdDoxNDI6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2AsIHBlcmZvcm1zIGp1c3QgZW5vdWdoIG1lbW9yeSBob3RwbHVnIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTE0My10dXJuIG9uIDpjOmZ1bmM6YHBmbl90b19wYWdlYCwgOmM6ZnVuYzpgcGFnZV90b19wZm5gLCBhbmRcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD0xNTc9bWVtb3J5IGhvdHBsdWcuIFN1Yi1zZWN0aW9uIHN1cHBvcnQgYWxsb3dzIGZvciAyTUIgYXMgdGhlIGNyb3NzLWFyY2hcXG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6MTU4OmNvbW1vbiBhbGlnbm1lbnQgZ3JhbnVsYXJpdHkgZm9yIDpjOmZ1bmM6YGRldm1fbWVtcmVtYXBfcGFnZXNgLlxcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC0xNTktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIyMD1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMzYtICAgIHBhZ2VtYXAub3BzID0gXFx1MDAyNmRldmljZV9kZXZtZW1fb3BzO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjM3OiAgICBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjM4LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDEtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNDI66L+Y5pyJZGV2bV9yZXF1ZXN0X2ZyZWVfbWVtX3JlZ2lvbigpLCBkZXZtX21lbXJlbWFwX3BhZ2VzKCksXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNDMtZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MTA3PVpPTkVfREVWSUNFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0LTExMS3kuovlrp7mnInlhbPvvJrov5nkupvlnLDlnYDojIPlm7TnmoTpobXpnaLlr7nosaHku47mnKrooqvlnKjnur/moIforrDov4fvvIzogIzkuJTlv4Xpobvlr7norr7lpIfov5vooYzlvJXnlKjvvIzogIzkuI3ku4Xku4VcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjExMjrmmK/pobXpnaLvvIzku6Xkv53mjIHlhoXlrZjooqvigJzplIHlrprigJ3ku6Xkvr/kvb/nlKjjgIIgYFpPTkVfREVWSUNFYCDvvIzpgJrov4cgOmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMTMt5Li657uZ5a6a55qEcGZuc+iMg+WbtOaJp+ihjOi2s+Wkn+eahOWGheWtmOeDreaPkuaLlOadpeW8gOWQryA6YzpmdW5jOmBwZm5fdG9fcGFnZWDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtMTIyLTpjOmZ1bmM6YGFyY2hfYWRkX21lbW9yeWAg77yM5Y2z5YaF5a2Y54Ot5o+S5ouU55qE5LiK5Y2K6YOo5YiG44CC5a2Q5q615pSv5oyB5YWB6K64Mk1C5L2c5Li6XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDoxMjM6OmM6ZnVuYzpgZGV2bV9tZW1yZW1hcF9wYWdlc2Ag55qE6Leo5p625p6E6YCa55So5a+56b2Q6aKX57KS5bqm44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC0xMjQtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTExNTg9aW50IGt2bXBwY191dm1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTExODktXFx0a3ZtcHBjX3V2bWVtX3BnbWFwLm93bmVyID0gXFx1MDAyNmt2bXBwY191dm1lbV9wZ21hcDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjExOTA6XFx0YWRkciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZrdm1wcGNfdXZtZW1fcGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYy0xMTkxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYz05NjQ9aW50IGFkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbmFyY2gveDg2L21tL2luaXRfNjQuYy05NzYtXFx0LypcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmM6OTc3OlxcdCAqIFNwZWNpYWwgY2FzZTogYWRkX3BhZ2VzKCkgaXMgY2FsbGVkIGJ5IG1lbXJlbWFwX3BhZ2VzKCkgZm9yIGFkZGluZyBkZXZpY2VcXG5hcmNoL3g4Ni9tbS9pbml0XzY0LmMtOTc4LVxcdCAqIHByaXZhdGUgcGFnZXMuIERvIG5vdCBidW1wIHVwIG1heF9wZm4gaW4gdGhlIGRldmljZSBwcml2YXRlIHBhdGgsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYz0zODA9c3RhdGljIGludCBkZXZfZGF4X3Byb2JlKHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4KVxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM0LVxcdFxcdFxcdG9yZGVyX2Jhc2VfMihkZXZfZGF4LVxcdTAwM2VhbGlnbiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYzo0MzU6XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtNDM2LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2RheC9mc2Rldi5jPTIwNz1zdGF0aWMgaW50IGZzZGV2X2RheF9wcm9iZShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheClcXG4tLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjczLVxcbmRyaXZlcnMvZGF4L2ZzZGV2LmM6Mjc0OlxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKGRldiwgcGdtYXApO1xcbmRyaXZlcnMvZGF4L2ZzZGV2LmMtMjc1LVxcdGlmIChJU19FUlIoYWRkcikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTEwMjY9aW50IGtnZDJrZmRfaW5pdF96b25lX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtMTA2Ny1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjEwNjg6XFx0ciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoYWRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy0xMDY5LVxcdGlmIChJU19FUlIocikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTI5Nj1ub3V2ZWF1X2RtZW1fY2h1bmtfYWxsb2Moc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sIHN0cnVjdCBwYWdlICoqcHBhZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYy0zMzItXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MzMzOlxcdHB0ciA9IG1lbXJlbWFwX3BhZ2VzKFxcdTAwMjZjaHVuay1cXHUwMDNlcGFnZW1hcCwgbnVtYV9ub2RlX2lkKCkpO1xcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTMzNC1cXHRpZiAoSVNfRVJSKHB0cikpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYz0xNzYwPXN0YXRpYyBzdHJ1Y3QgeGVfcGFnZW1hcCAqeGVfcGFnZW1hcF9jcmVhdGUoc3RydWN0IHhlX2RldmljZSAqeGUsIHN0cnVjdCB4ZV92cmFtX3JlZ2lvbiAqdnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmMtMTgwMS1cXHRwYWdlbWFwLVxcdTAwM2VvcHMgPSBkcm1fcGFnZW1hcF9wYWdlbWFwX29wc19nZXQoKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfc3ZtLmM6MTgwMjpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBhZ2VtYXApO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9zdm0uYy0xODAzLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jPTM4MT1zdGF0aWMgaW50IG1zaHZfdnRsX2lvY3RsX2FkZF92dGwwX21lbShzdHJ1Y3QgbXNodl92dGwgKnZ0bCwgdm9pZCBfX3VzZXIgKmFyZylcXG4tLVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQxMC1cXHQgKiBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgcmFuZ2UgaXMgYWxpZ25lZDsgaS5lLiBib3RoIHRoZSBzdGFydCBhbmQgdGhlIGxlbmd0aC5cXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MTE6XFx0ICogQ2xhbXAgdG8gTUFYX0ZPTElPX09SREVSIHRvIGF2b2lkIGEgV0FSTiBpbiBtZW1yZW1hcF9wYWdlcygpIHdoZW4gdGhlIHJhbmdlXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDEyLVxcdCAqIGFsaWdubWVudCBleGNlZWRzIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBmb2xpbyBvcmRlciBmb3IgdGhpcyBrZXJuZWwgY29uZmlnLlxcbi0tXFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDE5LVxcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jOjQyMDpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhtZW1fZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmMtNDIxLVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG5kcml2ZXJzL2h2L21zaHZfdnRsX21haW4uYzo0MjI6XFx0XFx0ZGV2X2Vycih2dGwtXFx1MDAzZW1vZHVsZV9kZXYsIFxcXCJkZXZtX21lbXJlbWFwX3BhZ2VzIGVycm9yOiAlbGRcXFxcblxcXCIsIFBUUl9FUlIoYWRkcikpO1xcbmRyaXZlcnMvaHYvbXNodl92dGxfbWFpbi5jLTQyMy1cXHRcXHRrZnJlZShwZ21hcCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9LY29uZmlnPTE0Mz1jb25maWcgTlZESU1NX1RFU1RfQlVJTERcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL0tjb25maWctMTUxLVxcdCAgb3RoZXJ3aXNlIGhlbHBzIGNhdGNoIGJ1aWxkIGVycm9ycyBpbmR1Y2VkIGJ5IGNoYW5nZXMgdG8gdGhlXFxuZHJpdmVycy9udmRpbW0vS2NvbmZpZzoxNTI6XFx0ICBjb3JlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBpbXBsZW1lbnRhdGlvbiBhbmQgb3RoZXJcXG5kcml2ZXJzL252ZGltbS9LY29uZmlnLTE1My1cXHQgIGluZnJhc3RydWN0dXJlLlxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTQ0OD1zdGF0aWMgaW50IHBtZW1fYXR0YWNoX2Rpc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxNy1cXHRcXHRwbWVtLVxcdTAwM2VwZ21hcC5vcHMgPSBcXHUwMDI2ZnNkYXhfcGFnZW1hcF9vcHM7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjUxODpcXHRcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIFxcdTAwMjZwbWVtLVxcdTAwM2VwZ21hcCk7XFxuZHJpdmVycy9udmRpbW0vcG1lbS5jLTUxOS1cXHRcXHRwZm5fc2IgPSBuZF9wZm4tXFx1MDAzZXBmbl9zYjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzAtXFx0XFx0cG1lbS1cXHUwMDNlcGdtYXAub3BzID0gXFx1MDAyNmZzZGF4X3BhZ2VtYXBfb3BzO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1MzE6XFx0XFx0YWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoZGV2LCBcXHUwMDI2cG1lbS1cXHUwMDNlcGdtYXApO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01MzItXFx0XFx0YmJfcmFuZ2UgPSBwbWVtLVxcdTAwM2VwZ21hcC5yYW5nZTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM9OTM0PUVYUE9SVF9TWU1CT0wobmRfcmVnaW9uX3JlbGVhc2VfbGFuZSk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9yZWdpb25fZGV2cy5jLTkzNi0vKlxcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmM6OTM3OiAqIFBvd2VyUEMgcmVxdWlyZXMgdGhpcyBhbGlnbm1lbnQgZm9yIG1lbXJlbWFwX3BhZ2VzKCkuIEFsbCBvdGhlciBhcmNoc1xcbmRyaXZlcnMvbnZkaW1tL3JlZ2lvbl9kZXZzLmMtOTM4LSAqIHNob3VsZCBiZSBvayB3aXRoIFNVQlNFQ1RJT05fU0laRSAoc2VlIG1lbXJlbWFwX2NvbXBhdF9hbGlnbigpKS5cXG4tLVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jPTM4Nz1pbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLFxcbi0tXFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM2LVxcbmRyaXZlcnMvcGNpL3AycGRtYS5jOjQzNzpcXHRhZGRyID0gZGV2bV9tZW1yZW1hcF9wYWdlcyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwZ21hcCk7XFxuZHJpdmVycy9wY2kvcDJwZG1hLmMtNDM4LVxcdGlmIChJU19FUlIoYWRkcikpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM9NTUzPWRjc3NibGtfYWRkX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYy02OTYtXFx0XFx0ZGV2X2luZm8tXFx1MDAzZXBnbWFwLm5yX3JhbmdlXFx0PSAxO1xcbmRyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmM6Njk3OlxcdFxcdGFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZkZXZfaW5mby1cXHUwMDNlZGV2LCBcXHUwMDI2ZGV2X2luZm8tXFx1MDAzZXBnbWFwKTtcXG5kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jLTY5OC1cXHRcXHRpZiAoSVNfRVJSKGFkZHIpKSB7XFxuLS1cXG5kcml2ZXJzL3hlbi91bnBvcHVsYXRlZC1hbGxvYy5jPTM3PXN0YXRpYyBpbnQgZmlsbF9saXN0KHVuc2lnbmVkIGludCBucl9wYWdlcylcXG4tLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmMtMTIzLVxcbmRyaXZlcnMveGVuL3VucG9wdWxhdGVkLWFsbG9jLmM6MTI0OlxcdHZhZGRyID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIE5VTUFfTk9fTk9ERSk7XFxuZHJpdmVycy94ZW4vdW5wb3B1bGF0ZWQtYWxsb2MuYy0xMjUtXFx0aWYgKElTX0VSUih2YWRkcikpIHtcXG4tLVxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM9MTA3Nj1zdGF0aWMgaW50IHZpcnRpb19mc19zZXR1cF9kYXgoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYsIHN0cnVjdCB2aXJ0aW9fZnMgKmZzKVxcbi0tXFxuZnMvZnVzZS92aXJ0aW9fZnMuYy0xMTE2LVxcdC8qIElkZWFsbHkgd2Ugd291bGQgZGlyZWN0bHkgdXNlIHRoZSBQQ0kgQkFSIHJlc291cmNlIGJ1dFxcbmZzL2Z1c2UvdmlydGlvX2ZzLmM6MTExNzpcXHQgKiBkZXZtX21lbXJlbWFwX3BhZ2VzKCkgd2FudHMgaXRzIG93biBjb3B5IGluIHBnbWFwLiAgU29cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMTgtXFx0ICogaW5pdGlhbGl6ZSBhIHN0cnVjdCByZXNvdXJjZSBmcm9tIHNjcmF0Y2ggKG9ubHkgdGhlIHN0YXJ0XFxuLS1cXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjYtXFxuZnMvZnVzZS92aXJ0aW9fZnMuYzoxMTI3OlxcdGZzLVxcdTAwM2V3aW5kb3dfa2FkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKFxcdTAwMjZ2ZGV2LVxcdTAwM2VkZXYsIHBnbWFwKTtcXG5mcy9mdXNlL3ZpcnRpb19mcy5jLTExMjgtXFx0aWYgKElTX0VSUihmcy1cXHUwMDNld2luZG93X2thZGRyKSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD03Nz1zdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xMTUtICogQGFsdG1hcDogcHJlLWFsbG9jYXRlZC9yZXNlcnZlZCBtZW1vcnkgZm9yIHZtZW1tYXAgYWxsb2NhdGlvbnNcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MTE2OiAqIEByZWY6IHJlZmVyZW5jZSBjb3VudCB0aGF0IHBpbnMgdGhlIGRldm1fbWVtcmVtYXBfcGFnZXMoKSBtYXBwaW5nXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTExNy0gKiBAZG9uZTogY29tcGxldGlvbiBmb3IgQHJlZlxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oPTIyNz12b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCxcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjI4LVxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcik7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIyOTp2b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjMwLXZvaWQgbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oOjIzMTp2b2lkICpkZXZtX21lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCk7XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTIzMi12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0yNDc9c3RhdGljIGlubGluZSB2b2lkIHpvbmVfZGV2aWNlX3ByaXZhdGVfc3BsaXRfY2Ioc3RydWN0IGZvbGlvICpvcmlnaW5hbF9mb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yNjQtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg6MjY1OnN0YXRpYyBpbmxpbmUgdm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2Ni1cXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI2OC1cXHQvKlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyNjk6XFx0ICogRmFpbCBhdHRlbXB0cyB0byBjYWxsIGRldm1fbWVtcmVtYXBfcGFnZXMoKSB3aXRob3V0XFxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTI3MC1cXHQgKiBaT05FX0RFVklDRSBzdXBwb3J0IGVuYWJsZWQsIHRoaXMgcmVxdWlyZXMgY2FsbGVycyB0byBmYWxsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBwZ21hcF9wZm5fdmFsaWQoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgdW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMjkxLVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoyOTI6Lyogd2hlbiBtZW1yZW1hcF9wYWdlcygpIGlzIGRpc2FibGVkIGFsbCBhcmNocyBjYW4gcmVtYXAgYSBzaW5nbGUgcGFnZSAqL1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0yOTMtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbXJlbWFwX2NvbXBhdF9hbGlnbih2b2lkKVxcbi0tXFxubGliL3Rlc3RfaG1tLmM9NTU4PXN0YXRpYyBpbnQgZG1pcnJvcl9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UsXFxuLS1cXG5saWIvdGVzdF9obW0uYy02MTUtXFx0fVxcbmxpYi90ZXN0X2htbS5jOjYxNjpcXHRwdHIgPSBtZW1yZW1hcF9wYWdlcyhcXHUwMDI2ZGV2bWVtLVxcdTAwM2VwYWdlbWFwLCBudW1hX25vZGVfaWQoKSk7XFxubGliL3Rlc3RfaG1tLmMtNjE3LVxcdGlmIChJU19FUlJfT1JfTlVMTChwdHIpKSB7XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE3PXN0YXRpYyBERUZJTkVfWEFSUkFZKHBnbWFwX2FycmF5KTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMTktLypcXG5tbS9tZW1yZW1hcC5jOjIwOiAqIFRoZSBtZW1yZW1hcCgpIGFuZCBtZW1yZW1hcF9wYWdlcygpIGludGVyZmFjZXMgYXJlIGFsdGVybmF0ZWx5IHVzZWRcXG5tbS9tZW1yZW1hcC5jLTIxLSAqIHRvIG1hcCBwZXJzaXN0ZW50IG1lbW9yeSBuYW1lc3BhY2VzLiBUaGVzZSBpbnRlcmZhY2VzIHBsYWNlIGRpZmZlcmVudFxcbm1tL21lbXJlbWFwLmMtMjItICogY29uc3RyYWludHMgb24gdGhlIGFsaWdubWVudCBhbmQgc2l6ZSBvZiB0aGUgbWFwcGluZyAobmFtZXNwYWNlKS5cXG5tbS9tZW1yZW1hcC5jOjIzOiAqIG1lbXJlbWFwKCkgY2FuIG1hcCBpbmRpdmlkdWFsIFBBR0VfU0laRSBwYWdlcy4gbWVtcmVtYXBfcGFnZXMoKSBjYW5cXG5tbS9tZW1yZW1hcC5jLTI0LSAqIG9ubHkgbWFwIHN1YnNlY3Rpb25zICgyTUIpLCBhbmQgYXQgbGVhc3Qgb25lIGFyY2hpdGVjdHVyZSAoUG93ZXJQQylcXG5tbS9tZW1yZW1hcC5jOjI1OiAqIHRoZSBtaW5pbXVtIG1hcHBpbmcgZ3JhbnVsYXJpdHkgb2YgbWVtcmVtYXBfcGFnZXMoKSBpcyAxNk1CLlxcbm1tL21lbXJlbWFwLmMtMjYtICpcXG4tLVxcbm1tL21lbXJlbWFwLmM9MTMwPUVYUE9SVF9TWU1CT0xfR1BMKG1lbXVubWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTEzMS1cXG5tbS9tZW1yZW1hcC5jOjEzMjpzdGF0aWMgdm9pZCBkZXZtX21lbXJlbWFwX3BhZ2VzX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG5tbS9tZW1yZW1hcC5jLTEzMy17XFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjYxLS8qXFxubW0vbWVtcmVtYXAuYzoyNjI6ICogTm90IGRldmljZSBtYW5hZ2VkIHZlcnNpb24gb2YgZGV2bV9tZW1yZW1hcF9wYWdlcywgdW5kb25lIGJ5XFxubW0vbWVtcmVtYXAuYzoyNjM6ICogbWVtdW5tYXBfcGFnZXMoKS4gIFBsZWFzZSB1c2UgZGV2bV9tZW1yZW1hcF9wYWdlcyBpZiB5b3UgaGF2ZSBhIHN0cnVjdFxcbm1tL21lbXJlbWFwLmMtMjY0LSAqIGRldmljZSBhdmFpbGFibGUuXFxubW0vbWVtcmVtYXAuYy0yNjUtICovXFxubW0vbWVtcmVtYXAuYzoyNjY6dm9pZCAqbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IG5pZClcXG5tbS9tZW1yZW1hcC5jLTI2Ny17XFxuLS1cXG5tbS9tZW1yZW1hcC5jLTM1MS19XFxubW0vbWVtcmVtYXAuYzozNTI6RVhQT1JUX1NZTUJPTF9HUEwobWVtcmVtYXBfcGFnZXMpO1xcbm1tL21lbXJlbWFwLmMtMzUzLVxcbm1tL21lbXJlbWFwLmMtMzU0LS8qKlxcbm1tL21lbXJlbWFwLmM6MzU1OiAqIGRldm1fbWVtcmVtYXBfcGFnZXMgLSByZW1hcCBhbmQgcHJvdmlkZSBtZW1tYXAgYmFja2luZyBmb3IgdGhlIGdpdmVuIHJlc291cmNlXFxubW0vbWVtcmVtYXAuYy0zNTYtICogQGRldjogaG9zdGluZyBkZXZpY2UgZm9yIEByZXNcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzY3LSAqICAgICdsaXZlJyBvbiBlbnRyeSBhbmQgd2lsbCBiZSBraWxsZWQgYW5kIHJlYXBlZCBhdFxcbm1tL21lbXJlbWFwLmM6MzY4OiAqICAgIGRldm1fbWVtcmVtYXBfcGFnZXNfcmVsZWFzZSgpIHRpbWUsIG9yIGlmIHRoaXMgcm91dGluZSBmYWlscy5cXG5tbS9tZW1yZW1hcC5jLTM2OS0gKlxcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzMtICovXFxubW0vbWVtcmVtYXAuYzozNzQ6dm9pZCAqZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxubW0vbWVtcmVtYXAuYy0zNzUte1xcbi0tXFxubW0vbWVtcmVtYXAuYy0zNzgtXFxubW0vbWVtcmVtYXAuYzozNzk6XFx0cmV0ID0gbWVtcmVtYXBfcGFnZXMocGdtYXAsIGRldl90b19ub2RlKGRldikpO1xcbm1tL21lbXJlbWFwLmMtMzgwLVxcdGlmIChJU19FUlIocmV0KSlcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzgyLVxcbm1tL21lbXJlbWFwLmM6MzgzOlxcdGVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLFxcbm1tL21lbXJlbWFwLmMtMzg0LVxcdFxcdFxcdHBnbWFwKTtcXG4tLVxcbm1tL21lbXJlbWFwLmMtMzg4LX1cXG5tbS9tZW1yZW1hcC5jOjM4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX21lbXJlbWFwX3BhZ2VzKTtcXG5tbS9tZW1yZW1hcC5jLTM5MC1cXG5tbS9tZW1yZW1hcC5jPTM5MT12b2lkIGRldm1fbWVtdW5tYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbm1tL21lbXJlbWFwLmMtMzkyLXtcXG5tbS9tZW1yZW1hcC5jOjM5MzpcXHRkZXZtX3JlbGVhc2VfYWN0aW9uKGRldiwgZGV2bV9tZW1yZW1hcF9wYWdlc19yZWxlYXNlLCBwZ21hcCk7XFxubW0vbWVtcmVtYXAuYy0zOTQtfVxcbi0tXFxubW0vc3BhcnNlLXZtZW1tYXAuYz00MDI9aW50IF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX2h1Z2VwYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3NwYXJzZS12bWVtbWFwLmMtNDU5LSAqXFxubW0vc3BhcnNlLXZtZW1tYXAuYzo0NjA6ICogTm90ZSB0aGF0IG1lbXJlbWFwX3BhZ2VzKCkgcmVzZXRzIEBucl9yYW5nZSB2YWx1ZSBhbmQgd2lsbCBpbmNyZW1lbnRcXG5tbS9zcGFyc2Utdm1lbW1hcC5jLTQ2MS0gKiBpdCBhZnRlciBlYWNoIHJhbmdlIHN1Y2Nlc3NmdWwgb25saW5pbmcuIFRodXMgdGhlIHZhbHVlIG9yIEBucl9yYW5nZVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vS2J1aWxkPTEzPWxkZmxhZ3MteSArPSAtLXdyYXA9X19yZWxlYXNlX3JlZ2lvblxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL0tidWlsZDoxNDpsZGZsYWdzLXkgKz0gLS13cmFwPWRldm1fbWVtcmVtYXBfcGFnZXNcXG50b29scy90ZXN0aW5nL252ZGltbS9LYnVpbGQtMTUtbGRmbGFncy15ICs9IC0td3JhcD1pbnNlcnRfcmVzb3VyY2VcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYz0xMDg9c3RhdGljIHZvaWQgZGV2X3BhZ2VtYXBfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJlZilcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvaW9tYXAuYy0xMTQtXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjExNTp2b2lkICpfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXApXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTExNi17XFxuLS1cXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIxLVxcdGlmICghbmZpdF9yZXMpXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEyMjpcXHRcXHRyZXR1cm4gZGV2bV9tZW1yZW1hcF9wYWdlcyhkZXYsIHBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L2lvbWFwLmMtMTIzLVxcbi0tXFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNC19XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jOjEzNTpFWFBPUlRfU1lNQk9MX0dQTChfX3dyYXBfZGV2bV9tZW1yZW1hcF9wYWdlcyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9pb21hcC5jLTEzNi1cXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbnZkaW1tL3Rlc3QvbmZpdF90ZXN0Lmg9MjEyPXZvaWQgKl9fd3JhcF9kZXZtX21lbXJlbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxMy1cXHRcXHRzaXplX3Qgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7XFxudG9vbHMvdGVzdGluZy9udmRpbW0vdGVzdC9uZml0X3Rlc3QuaDoyMTQ6dm9pZCAqX193cmFwX2Rldm1fbWVtcmVtYXBfcGFnZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKTtcXG50b29scy90ZXN0aW5nL252ZGltbS90ZXN0L25maXRfdGVzdC5oLTIxNS12b2lkICpfX3dyYXBfbWVtcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEyOjUwLjgwNjI0NTQ4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMDI1MTkyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBBdHRhY2sgU3VyZmFjZXMgd2l0aCBgZGV2bV9tZW1yZW1hcF9wYWdlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gTXkgaW5pdGlhbCBzY2FuIHNob3dzIHRoaXMgZnVuY3Rpb24gaXMgcHJldHR5IHdpZGVseSB1c2VkIGFjcm9zcyB2YXJpb3VzIGRyaXZlcnMuIFNwZWNpZmljYWxseSwgSSBzZWUgaXQncyBjYWxsZWQgYnkgYGRyaXZlcnMvZGF4L2RldmljZS5jYCB3aXRoaW4gYGRldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9kYXgvZnNkZXYuY2AgZHVyaW5nIGBmc2Rldl9kYXhfcHJvYmVgLCBgZHJpdmVycy9udmRpbW0vcG1lbS5jYCBpbiBgcG1lbV9hdHRhY2hfZGlza2AsIGBkcml2ZXJzL3BjaS9wMnBkbWEuY2Agd2l0aGluIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAsIGFuZCBhbHNvIGluIGBmcy9mdXNlL3ZpcnRpb19mcy5jYCBkdXJpbmcgYHZpcnRpb19mc19zZXR1cF9kYXhgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IFN5emthbGxlciBhbmQgaXRzIHBvdGVudGlhbCB0byBleHBsb2l0IHRoaXMgY29kZSBwYXRoLiBJJ20gYWxtb3N0IGNlcnRhaW4gSSBjYW4gdHJpZ2dlciBlaXRoZXIgYHZpcnRpb19mc19zZXR1cF9kYXhgLCBgZGV2X2RheF9wcm9iZWAsIG9yIGBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZWAgd2l0aCBmdXp6aW5nLlxuXG5XYWl0LCBob2xkIG9uLiBUaGlzIHJlbWluZHMgbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuIEkganVzdCB3YW50IHRvIGJlIHN1cmUgYWJvdXQgdGhlIGNhbGxpbmcgb3JkZXIuIExldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSB0aG91Z2h0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgd2FzIGNhbGxlZCBmcm9tIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIGFuZCBJJ20gcmlnaHQsIHRoYXQncyBpdC4gT2suIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTI6NTYuMTA4NzY4MDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzYzOTgyNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTE1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb21wb3VuZF9ucl9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbm1tL21tX2luaXQuYy0xMTMwLVxcbm1tL21tX2luaXQuYzoxMTMxOnN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLFxcbm1tL21tX2luaXQuYy0xMTMyLVxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGhlYWRfcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jPTExNzI9dm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21tX2luaXQuYy0xMjIzLVxcbm1tL21tX2luaXQuYzoxMjI0OlxcdFxcdG1lbW1hcF9pbml0X2NvbXBvdW5kKHBhZ2UsIHBmbiwgem9uZV9pZHgsIG5pZCwgcGdtYXAsXFxubW0vbW1faW5pdC5jLTEyMjUtXFx0XFx0XFx0XFx0ICAgICBjb21wb3VuZF9ucl9wYWdlcyhwZm4sIGFsdG1hcCwgcGdtYXApKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTI6NTcuODcyNzYyODIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MzY2MTc3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYWdlIEluaXRpYWxpemF0aW9uIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYG1lbW1hcF9pbml0X2NvbXBvdW5kYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHN3YXBwaW5nIG91dCB0aGUgb3JpZ2luYWwgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIGBtZW1jcHlfbm9udGVtcG9yYWxgLCBhbmQgb24geDg2LCB0aGF0IG1lYW5zIHVzaW5nIGBtZW1jcHlfZmx1c2hjYWNoZWAsIHdoaWNoIHVsdGltYXRlbHkgdHJhbnNsYXRlcyB0byBgbW92bnRpYCBpbnN0cnVjdGlvbnMuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IG1lbW9yeSBwYWdlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cblRoZSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1enppbmcuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBBbnl0aW1lIHlvdSdyZSB0b3VjaGluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGludHJvZHVjaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMsIHlvdSdyZSBwb3RlbnRpYWxseSBvcGVuaW5nIHRoZSBkb29yIHRvIHN1YnRsZSBidXQgZGV2YXN0YXRpbmcgYnVncy4gT3JkZXJpbmcgaXNzdWVzIHdpdGggbm9uLXRlbXBvcmFsIHN0b3JlcywgaW5jb3JyZWN0IHNpemVzLCBhbnkgZGV2aWF0aW9uIGZyb20gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhlcmUgY291bGQgYmUgYSB3aWRlIHJhbmdlIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy5cblxuV2FpdCwgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gU28sIG9uIHg4NiwgYG1lbWNweV9mbHVzaGNhY2hlYCBpcyBpbXBsZW1lbnRlZCB3aXRoIGBtb3ZudGlfOGAsIGBtb3ZudGlfMTZgLCBgbW92bnRpXzMyYCwgYW5kIGBtb3ZudGlfNjRgIGZvciBkaWZmZXJlbnQgZGF0YSBzaXplcy4gT2theSwgdGhhdCBjb25maXJtcyB0aGUgY29yZSBjaGFuZ2UgaW52b2x2ZXMgdGhvc2UgaW5zdHJ1Y3Rpb25zLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgcGF0Y2ggYWdhaW4ganVzdCB0byBkb3VibGUgY2hlY2sgdGhhdCBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy5cblxuYGBgY1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtb3ZudGlfOCh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYylcbit7XG4rXHRhc20gdm9sYXRpbGUoXCJtb3ZudGlxICUxLCAlMFwiXG4rXHRcdCAgICAgOiBcIj1tXCIoKih1NjQgKilkc3QpXG4rXHRcdCAgICAgOiBcInJcIigqKGNvbnN0IHU2NCAqKXNyYylcbitcdFx0ICAgICA6IFwibWVtb3J5XCIpO1xuK31cbmBgYFxuXG5Pa2F5LCB5ZXAsIHRoYXQncyB3aGF0IEkgdGhvdWdodC4gRnVuY3Rpb25hbGx5LCBpdCBpcyBleGFjdGx5IHRoZSBgbW92bnRpYCBpbnN0cnVjdGlvbnMgdGhhdCB0aGUgcGF0Y2ggaXMgaW1wbGVtZW50aW5nLCBzbyB0aGF0J3MgdGhlIHJlbGV2YW50IGNoYW5nZS5cblxuTm93LCBsZXQgbWUganVzdCBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2Uga25vdyBgQ09ORklHX1pPTkVfREVWSUNFYCBpcyBuZWVkZWQgZm9yIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAuIEFuZCB0byB1c2UgYG1lbWNweV9mbHVzaGNhY2hlYCBvbiB4ODYsIHdlIG5lZWQgYENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVgLiBPa2F5LCB0aW1lIHRvIGNoZWNrIGBhcmNoL3g4Ni9LY29uZmlnYCB0byBzZWUgZXhhY3RseSB3aGF0IHRoYXQgY29uZmlnIGVudGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjA1LjQwOTM4NTc1M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwODc3NDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTE5MjI9Y29uZmlnIEFSTTY0X1BNRU1cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xOTI0LVxcdHNlbGVjdCBBUkNIX0hBU19QTUVNX0FQSVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxOTI1OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L0tjb25maWctMTkyNi1cXHRoZWxwXFxuLS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oPTQ0PWV4dGVybiB2b2lkICpfX21lbXNldCh2b2lkICosIGludCwgX19rZXJuZWxfc2l6ZV90KTtcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ1LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3RyaW5nLmg6NDY6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N0cmluZy5oLTQ3LSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEVcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oPTQ3NT1leHRlcm4gX19tdXN0X2NoZWNrIGxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzdHIsIGxvbmcgbik7XFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91YWNjZXNzLmgtNDc2LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oOjQ3NzojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWFjY2Vzcy5oLTQ3OC1leHRlcm4gdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jb3B5X3VzZXJfZmx1c2hjYWNoZSh2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7XFxuLS1cXG5hcmNoL2FybTY0L2xpYi9NYWtlZmlsZT0yPWxpYi15XFx0XFx0Oj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIub1xcdFxcdFxcXFxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTctXFxuYXJjaC9hcm02NC9saWIvTWFrZWZpbGU6ODpsaWItJChDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFKSArPSB1YWNjZXNzX2ZsdXNoY2FjaGUub1xcbmFyY2gvYXJtNjQvbGliL01ha2VmaWxlLTktXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0xMTg9Y29uZmlnIFBQQ1xcbi0tXFxuYXJjaC9wb3dlcnBjL0tjb25maWctMTU4LVxcdHNlbGVjdCBBUkNIX0hBU19USUNLX0JST0FEQ0FTVFxcdFxcdGlmIEdFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUXFxuYXJjaC9wb3dlcnBjL0tjb25maWc6MTU5OlxcdHNlbGVjdCBBUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0xNjAtXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYz02ND1FWFBPUlRfU1lNQk9MX0dQTChhcmNoX2ludmFsaWRhdGVfcG1lbSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3BtZW0uYy02Ni0vKlxcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jOjY3OiAqIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUgc3ltYm9sc1xcbmFyY2gvcG93ZXJwYy9saWIvcG1lbS5jLTY4LSAqL1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTEwMi1cXHRzZWxlY3QgQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkdcXHRpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3g4Ni9LY29uZmlnOjEwMzpcXHRzZWxlY3QgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFx0aWYgWDg2XzY0XFxuYXJjaC94ODYvS2NvbmZpZy0xMDQtXFx0c2VsZWN0IEFSQ0hfSEFTX0NPUFlfTUNcXHRcXHRcXHRpZiBYODZfNjRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oPTgwPWludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaC04MS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaDo4MjojaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1VBQ0NFU1NfRkxVU0hDQUNIRVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oLTgzLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZX0ZMVVNIQ0FDSEUgMVxcbi0tXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmMtMTctXFxuYXJjaC94ODYvbGliL3VzZXJjb3B5XzY0LmM6MTg6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5hcmNoL3g4Ni9saWIvdXNlcmNvcHlfNjQuYy0xOS0vKipcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy00OTMtXFx0ZnVhID0gbnZkaW1tX2hhc19mbHVzaChuZF9yZWdpb24pO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo0OTQ6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIHx8IGZ1YSBcXHUwMDNjIDApIHtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNDk1LVxcdFxcdGRldl93YXJuKGRldiwgXFxcInVuYWJsZSB0byBndWFyYW50ZWUgcGVyc2lzdGVuY2Ugb2Ygd3JpdGVzXFxcXG5cXFwiKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdWlvLmg9MjYxPWJvb2wgY29weV9mcm9tX2l0ZXJfZnVsbF9ub2NhY2hlKHZvaWQgKmFkZHIsIHNpemVfdCBieXRlcywgc3RydWN0IGlvdl9pdGVyICppKVxcbi0tXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNjktXFxuaW5jbHVkZS9saW51eC91aW8uaDoyNzA6I2lmZGVmIENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEVcXG5pbmNsdWRlL2xpbnV4L3Vpby5oLTI3MS0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC91aW8uaC0yNzMtICogX2NvcHlfZnJvbV9pdGVyX2ZsdXNoY2FjaGUoKSB0aGFuIF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKCkgbXVzdCBjaGVjayBmb3JcXG5pbmNsdWRlL2xpbnV4L3Vpby5oOjI3NDogKiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19VQUNDRVNTX0ZMVVNIQ0FDSEUpIGJlZm9yZSBhc3N1bWluZyB0aGF0IHRoZVxcbmluY2x1ZGUvbGludXgvdWlvLmgtMjc1LSAqIGRlc3RpbmF0aW9uIGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUgb24gcmV0dXJuLlxcbi0tXFxubGliL0tjb25maWc9NTQyPWNvbmZpZyBVQUNDRVNTX01FTUNQWVxcbi0tXFxubGliL0tjb25maWctNTQ0LVxcbmxpYi9LY29uZmlnOjU0NTpjb25maWcgQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxubGliL0tjb25maWctNTQ2LVxcdGJvb2xcXG4tLVxcbmxpYi9pb3ZfaXRlci5jPTI5Mj1FWFBPUlRfU1lNQk9MKF9jb3B5X2Zyb21faXRlcl9ub2NhY2hlKTtcXG5saWIvaW92X2l0ZXIuYy0yOTMtXFxubGliL2lvdl9pdGVyLmM6Mjk0OiNpZmRlZiBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFXFxubGliL2lvdl9pdGVyLmMtMjk1LXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MDcuNDE4MTc5MzM0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjEzNjQ5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIHdoZW4gdGhlIHg4Nl82NCBhcmNoaXRlY3R1cmUgaXMgY2hvc2VuLiBUaGF0J3MgZ29vZCB0byBrbm93LCBzaW1wbGlmaWVzIHRoaW5ncyBzb21ld2hhdC4gTm93LCBJIHNlZSB0aGF0IGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgcmVxdWlyZXMgYENPTkZJR19aT05FX0RFVklDRWAuIEhtbSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdC4gTGV0IG1lIHF1aWNrbHkganVtcCBpbnRvIGBtbS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFjdHVhbGx5IGVuYWJsZXMsIGFuZCB3aGF0IGl0cyBkZXBlbmRlbmNpZXMgbWlnaHQgYmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVsbHkgdG8gYXNzZXNzIHRoZSBicm9hZGVyIGltcGFjdCBvbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI3MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjEwLjUzOTU0ODE1OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk3ODAxMzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTEyMzUtXFxubW0vS2NvbmZpZzoxMjM2OmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoxMi41MTc1OTE0OTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MTY1ODY1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFpPTkVfREVWSUNFIE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCB3aXRoaW4gYG1tL21tX2luaXQuY2AuIFRoZSBwYXRjaCBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGNvcmUgdG8gWk9ORV9ERVZJQ0UgbWVtb3J5IGluaXRpYWxpemF0aW9uLiAgVGhhdCdzIG91ciBzdGFydGluZyBwb2ludCBmb3IgZm9jdXNlZCBmdXp6aW5nLlxuXG5NeSBtaW5kIHRoZW4gcXVpY2tseSBqdW1wcyB0byBob3cgd2UgY2FuIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGVzZSBmdW5jdGlvbnMuICBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGdldHMgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUsIHNwZWNpZmljYWxseSB0aHJvdWdoIGNhbGxzIGxpa2UgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiBUaGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIHJlYWNoIHRoaXMgdmlhIGEgc3lzY2FsbC4gWWVzLCB0aGF0J3MgdGhlIGFuZ2xlISBgbW1hcGAgb2YgYC9kZXYvZGF4YCBpcyB0aGUgb2J2aW91cyBmaXJzdCBjYW5kaWRhdGUsIG9yIHBlcmhhcHMgYW4gYGlvY3RsYCB0aGF0IGFkZHMgbWVtb3J5LiBBbHNvLCBgbWVtcmVtYXBfcGFnZXNgIGluIHNvbWUgZHJpdmVyIG1pZ2h0IGJlIHZ1bG5lcmFibGUgYW5kIHRyaWdnZXJhYmxlIHZpYSBzeXprYWxsZXIuXG5cbkZvciBleGFtcGxlLCBgbXNodl92dGxfaW9jdGxfYWRkX3Z0bDBfbWVtYCBpbiBgZHJpdmVycy9odi9tc2h2X3Z0bF9tYWluLmNgIGNhbGxzIGBkZXZtX21lbXJlbWFwX3BhZ2VzYC4gVGhpcyBpcyBhIHNvbGlkIGxlYWQuIEFsc28sIGB2aXJ0aW9fZnNfc2V0dXBfZGF4YCBpbiBgZnMvZnVzZS92aXJ0aW9fZnMuY2AgY2FsbHMgYGRldm1fbWVtcmVtYXBfcGFnZXNgLiAgU28sIHdlJ3ZlIGdvdCBtdWx0aXBsZSBwb3RlbnRpYWwgZW50cnkgcG9pbnRzLiBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byB0aGUgYWN0dWFsIGNvZGUuICBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYCBhbmQgaXQncyB1c2VkIGluIGBtbS9tbV9pbml0LmNgLiBUaGlzIGlzIG5ldywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHVuY292ZXJpbmcgYnVncy4gSXQncyBhbHNvIGRlZmluZWQgaW4gYGFyY2gveDg2L2luY2x1ZGUvYXNtL3N0cmluZ182NC5oYCB3aXRoIHRoZSBgbW92bnRpXypgIGZ1bmN0aW9ucywgYW5kIGBpbmNsdWRlL2xpbnV4L21tLmhgIHdpdGggYHNldF9wYWdlX3NlY3Rpb25fZnJvbV9wZm5gLCBhbmQgYGluY2x1ZGUvbGludXgvc3RyaW5nLmhgIGZvciBmYWxsYmFjay4gIFRoZXNlIGFyZSBjaGFuZ2VzIHdlIG5lZWQgdG8ga2VlcCBpbiBtaW5kLlxuXG5EaWdnaW5nIGRlZXBlciwgYHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlYCB3aXRoaW4gYG1tL21tX2luaXQuY2Agc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgaXQgdXNlcyBgbWVtY3B5X25vbnRlbXBvcmFsYC4gVGhlIGZ1bmN0aW9uJ3Mgc3RydWN0dXJlIGlzIGFsc28gaGVscGZ1bCBhbmQgaXQncyBjYWxsZWQgYnkgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYC4gIEFoYSEgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBzdGF0aWMsIHdoaWNoIGxpbWl0cyBpdHMgZXhwb3N1cmUsIGJ1dCBgbWVtbWFwX2luaXRfem9uZV9kZXZpY2VgIGlzIGV4cG9ydGVkLiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIEZvY3VzU3ltYm9scyBhbmQgYWxzbyBgbWVtbWFwX2luaXRfY29tcG91bmRgLlxuXG5GaW5hbGx5LCBjb25maWd1cmF0aW9uLiBXZSBuZWVkIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGZvciBzdXJlLiBUaGUgeDg2LXNwZWNpZmljIGBtb3ZudGlgIGluc3RydWN0aW9ucyBhcmUgaW1wbGljaXRseSB0aWVkIHRvIGBDT05GSUdfWDg2XzY0YCBidXQgYFpPTkVfREVWSUNFYCBzaG91bGQgYmUgc3VmZmljaWVudC4gV2FpdCwgYFpPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaW4gYG1tL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU3OSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyMy4yMzQxODI3MzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjk4ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxcbi0tXFxubW0vS2NvbmZpZy0xMjM1LVxcbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyMzctXFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MjMuMzA0NDkxMjI2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1OTg2MDY0OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBtbS9LY29uZmlnYC4gSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEyMzYgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2Ygd2hhdCBJJ20gZGVhbGluZyB3aXRoLiBJIGhhdmUgYSBodW5jaCBpdCdzIHJlbGF0ZWQgdG8gc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBlbnRyaWVzIHJldmVhbCBhYm91dCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGRlcGVuZGVuY2llcywgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbnRleHQgYW5kIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGRlcGVuZGVuY2llcyBpbiBtaW5kIGZvciBzdWJzZXF1ZW50IGFuYWx5c2lzLiBJJ20gaG9waW5nIHRvIHVuY292ZXIgdGhlIHVuZGVybHlpbmcgbG9naWMgZm9yIHRoaXMgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkxODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyOC45MDMxMDMwODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXG4xMjMxOlxcdGNvbmZpZyBaT05FX0RNQTMyXFxuMTIzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMzM6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxuMTIzNDpcXHRcXHRkZWZhdWx0IHkgaWYgQVJNNjRcXG4xMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzoyOC45MDMyOTYyNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwNTA5NDY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFpPTkVfREVWSUNFYCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGV2YW50IGNvbmZpZ3MgSSBzaG91bGQgYmUgY29uc2lkZXJpbmc/IFRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdHJpbmdfNjQuaGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBzbyBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuIFRoZSBgbWVtY3B5X2ZsdXNoY2FjaGVgIGZ1bmN0aW9uIGlzIGRlZmluZWQgY29uZGl0aW9uYWxseSwgZGVwZW5kZW50IG9uIGBDT05GSUdfQVJDSF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFYC4gTm93LCBsZXQgbWUgc2VlLi4uIGFuZCB0aGF0IG1hY3JvIGlzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aGVuIGBYODZfNjRgIGlzIGVuYWJsZWQuIFRoZXJlZm9yZSwgaXQgY29uZmlybXMgdGhhdCBgWk9ORV9ERVZJQ0VgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZyB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmUgSSdtIGV4YW1pbmluZy5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlYCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgdGhhdCBmdW5jdGlvbiwgaXQgc2hvdWxkIGJlIGluIGBtbS9tbV9pbml0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWVwZXIgY29udGV4dCBJIHJlcXVpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTY6MTM6MzQuMzA4Mzk1MDQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgwMDAyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbV9pbml0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbW1faW5pdC5jPTExMzE9c3RhdGljIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfY29tcG91bmQoc3RydWN0IHBhZ2UgKmhlYWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTE3MS1cXG5tbS9tbV9pbml0LmM6MTE3Mjp2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL21tX2luaXQuYy0xMTczLVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNjoxMzozNC44MDY0MDk1NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTc5NTQ4ODg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFpPTkVfREVWSUNFIE1lbW9yeSBPcHRpbWl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2FpdCwgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBzdGF0aWMsIGlzbid0IGl0P1wiIFRoZW4sIEkgcmVtZW1iZXIgc3l6a2FsbGVyIGNhbiB1c2Ugc3RhdGljIGZ1bmN0aW9ucyBhcyBsb25nIGFzIHRoZXkncmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgd2hpY2ggdGhleSB1c3VhbGx5IGFyZSB1bmxlc3MgdGhleSdyZSBpbmxpbmVkLiBTbywgbGV0J3MgY2hlY2sgaWYgYG1lbW1hcF9pbml0X2NvbXBvdW5kYCBpcyBpbmxpbmVkLiBZZXAsIGl0J3MgZGVjbGFyZWQgYXMgYHN0YXRpYyB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X2NvbXBvdW5kKHN0cnVjdCBwYWdlICpoZWFkLCAuLi4pYCwgc28gbm8gZXhwbGljaXQgYGlubGluZWAga2V5d29yZC5cblxuTm93LCB3aGF0IGFib3V0IGB6b25lX2RldmljZV9wYWdlX2luaXRfZnJvbV90ZW1wbGF0ZWA/IEknbGwgY2hlY2sgdGhhdCBvbmUgdG9vLiBPa2F5LCBpdCdzIGFsc28gYHN0YXRpYyB2b2lkIHpvbmVfZGV2aWNlX3BhZ2VfaW5pdF9mcm9tX3RlbXBsYXRlKC4uLilgLiBObyBleHBsaWNpdCBgaW5saW5lYCB0aGVyZSBlaXRoZXIsIGJ1dCB0aGUgY29tcGlsZXIgKmNvdWxkKiBiZSBpbmxpbmluZyBpdC4gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGFuZCByZWxpYWJsZSwgSSdsbCBqdXN0IGZvY3VzIG9uIHVzaW5nIGBtZW1tYXBfaW5pdF96b25lX2RldmljZWAgYW5kIGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgZGlyZWN0bHkuXG5cbkxldCdzIHF1aWNrbHkgcmV2aWV3IHRoZSBwYXRjaCBhZ2Fpbi4gQWggeWVzLCBpdCdzIG9wdGltaXppbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgcGFnZWAgZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBzcGVjaWZpY2FsbHkgYG1lbWNweV9ub250ZW1wb3JhbGAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBpdCdzIG5vdCBqdXN0IGNvc21ldGljLiBBbmQsIGNydWNpYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBkZXZpY2UgcHJvYmVzLCB0aGluZ3MgbGlrZSBEQVgsIFBNRU0sIGFuZCB2aXJ0aW8tZnMgREFYLiBUaGlzIG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggb3B0aW1pemVzIGBzdHJ1Y3QgcGFnZWAgaW5pdGlhbGl6YXRpb24gZm9yIFpPTkVfREVWSUNFIG1lbW9yeSB1c2luZyBub24tdGVtcG9yYWwgc3RvcmVzLCBkaXJlY3RseSBhZmZlY3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIFNpbmNlIGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggZGV2aWNlIHByb2JpbmcsIHdoaWNoIGFyZSBwcmV0dHkgY29tbW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gZnV6ei5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjayB0aGF0IGBtZW1tYXBfaW5pdF9jb21wb3VuZGAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gWWVzLCBgbWVtbWFwX2luaXRfY29tcG91bmRgLlxuXG5SaWdodCwgbGV0J3MgY2FsbCB0aGUgc2V0LXJlc3VsdHMgdG9vbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxOTgsIk91dHB1dFRva2VucyI6MTI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE2OjEzOjQyLjk4NTk2MTk0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDAyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lbW1hcF9pbml0X3pvbmVfZGV2aWNlXCIsXG4gICAgXCJtZW1tYXBfaW5pdF9jb21wb3VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIG9wdGltaXphdGlvbiBmb3IgaW5pdGlhbGl6aW5nIGBzdHJ1Y3QgcGFnZWAgc3RydWN0dXJlcyBmb3IgWk9ORV9ERVZJQ0UgbWVtb3J5IHVzaW5nIG5vbi10ZW1wb3JhbCBzdG9yZXMgKGBtZW1jcHlfbm9udGVtcG9yYWxgKS4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIHBhdGhzIGFuZCB4ODYgc3RyaW5nIHJvdXRpbmVzLiBJdCBpcyByZWFjaGFibGUgd2hlbiBwcm9iaW5nIGRldmljZXMgdGhhdCB1c2UgWk9ORV9ERVZJQ0UgbWVtb3J5IChlLmcuLCBEQVgsIFBNRU0sIHZpcnRpby1mcyBEQVgpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtbWFwX2luaXRfem9uZV9kZXZpY2VcIixcbiAgICBcIm1lbW1hcF9pbml0X2NvbXBvdW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgb3B0aW1pemF0aW9uIGZvciBpbml0aWFsaXppbmcgYHN0cnVjdCBwYWdlYCBzdHJ1Y3R1cmVzIGZvciBaT05FX0RFVklDRSBtZW1vcnkgdXNpbmcgbm9uLXRlbXBvcmFsIHN0b3JlcyAoYG1lbWNweV9ub250ZW1wb3JhbGApLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gcGF0aHMgYW5kIHg4NiBzdHJpbmcgcm91dGluZXMuIEl0IGlzIHJlYWNoYWJsZSB3aGVuIHByb2JpbmcgZGV2aWNlcyB0aGF0IHVzZSBaT05FX0RFVklDRSBtZW1vcnkgKGUuZy4sIERBWCwgUE1FTSwgdmlydGlvLWZzIERBWCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[1] Phase: Succeeded StartedAt: 2026-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 16:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 16:13:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2] Phase: Succeeded StartedAt: 2026-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 16:14:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:13:55 +0000 UTC FinishedAt: 2026-07-20 16:14:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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-workflowfg8zx/series-workflowfg8zx-convert-artifact-860682542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:14:06 +0000 UTC FinishedAt: 2026-07-20 17:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:14:06 +0000 UTC FinishedAt: 2026-07-20 17:00:50 +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:*fac81552-b270-4e5a-a080-5b5dcc4370ab,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-workflowfg8zx/series-workflowfg8zx-convert-artifact-860682542/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": "35011053-2d3e-46ca-9715-fa65286e0129", "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-workflowfg8zx/series-workflowfg8zx-build-action-2488999060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 16:14:06 +0000 UTC FinishedAt: 2026-07-20 17:00:40 +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:*fac81552-b270-4e5a-a080-5b5dcc4370ab,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-workflowfg8zx/series-workflowfg8zx-convert-artifact-860682542/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": "35011053-2d3e-46ca-9715-fa65286e0129", "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-workflowfg8zx/series-workflowfg8zx-build-action-2488999060/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:00:50 +0000 UTC FinishedAt: 2026-07-20 17:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:00:50 +0000 UTC FinishedAt: 2026-07-20 17:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:00:50 +0000 UTC FinishedAt: 2026-07-20 17:01:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:00:50 +0000 UTC FinishedAt: 2026-07-20 17:00:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-workflowfg8zx/series-workflowfg8zx-convert-artifact-1752339233/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:01:00 +0000 UTC FinishedAt: 2026-07-20 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:01:00 +0000 UTC FinishedAt: 2026-07-20 17:02:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35011053-2d3e-46ca-9715-fa65286e0129,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-workflowfg8zx/series-workflowfg8zx-build-action-2488999060/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-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:03:18 +0000 UTC FinishedAt: 2026-07-20 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:03:18 +0000 UTC FinishedAt: 2026-07-20 17:03:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:03:18 +0000 UTC FinishedAt: 2026-07-20 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:03:18 +0000 UTC FinishedAt: 2026-07-20 17:43:06 +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:*fac81552-b270-4e5a-a080-5b5dcc4370ab,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-workflowfg8zx/series-workflowfg8zx-convert-artifact-1752339233/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": "cecc374c-36a0-45d5-bacf-953123f66733", "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-workflowfg8zx/series-workflowfg8zx-build-action-3740057133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:03:18 +0000 UTC FinishedAt: 2026-07-20 17:42:56 +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:*fac81552-b270-4e5a-a080-5b5dcc4370ab,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-workflowfg8zx/series-workflowfg8zx-convert-artifact-1752339233/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": "cecc374c-36a0-45d5-bacf-953123f66733", "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-workflowfg8zx/series-workflowfg8zx-build-action-3740057133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:43:06 +0000 UTC FinishedAt: 2026-07-20 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:43:06 +0000 UTC FinishedAt: 2026-07-20 17:43:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:43:06 +0000 UTC FinishedAt: 2026-07-20 17:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:43:06 +0000 UTC FinishedAt: 2026-07-20 17:45:22 +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:*cecc374c-36a0-45d5-bacf-953123f66733,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-workflowfg8zx/series-workflowfg8zx-build-action-3740057133/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-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +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":["memmap_init_zone_device","memmap_init_compound"],"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:*35011053-2d3e-46ca-9715-fa65286e0129,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cecc374c-36a0-45d5-bacf-953123f66733,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-workflowfg8zx/series-workflowfg8zx-build-action-2488999060/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-workflowfg8zx/series-workflowfg8zx-build-action-3740057133/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 17:45:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 17:45:39 +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":["memmap_init_zone_device","memmap_init_compound"],"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-workflowfg8zx/series-workflowfg8zx-convert-artifact-3692849334/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 17:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 17:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:32 +0000 UTC FinishedAt: 2026-07-20 17:45:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:42 +0000 UTC FinishedAt: 2026-07-20 20:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfg8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"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":["memmap_init_zone_device","memmap_init_compound"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e57d6e9e20b551e4910d7a6331a81775c3ad6693","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZONE_DEVICE"],"series_id":"fbc3bdd3-b12c-4ac7-983c-9e60cfa820a2","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-07-20 17:45:42 +0000 UTC FinishedAt: 2026-07-20 20:48:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35011053-2d3e-46ca-9715-fa65286e0129,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cecc374c-36a0-45d5-bacf-953123f66733,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-workflowfg8zx/series-workflowfg8zx-build-action-2488999060/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-workflowfg8zx/series-workflowfg8zx-build-action-3740057133/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-workflowfg8zx/series-workflowfg8zx-convert-artifact-3692849334/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,}