Name: series-workflow6lpjs Phase: Succeeded StartedAt: 2026-08-13 10:57:59 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[0] Phase: Succeeded StartedAt: 2026-08-13 10:57:59 +0000 UTC FinishedAt: 2026-08-13 11:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 10:57:59 +0000 UTC FinishedAt: 2026-08-13 11:55:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BCMA", "BCMA_HOST_SOC", "BCMA_HOST_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BCMA", "BCMA_HOST_SOC", "BCMA_HOST_PCI" ], "series_id": "94e4f2c4-1ace-484d-b7b6-17c257273211" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bcma_bus_register", "bcma_unregister_cores", "bcma_host_soc_probe", "bcma_host_pci_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JDTUEmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1NPQyYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7YmNtYV91bnJlZ2lzdGVyX2NvcmVzJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9zb2NfcHJvYmUmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCQ01BIGJ1cyByZWdpc3RyYXRpb24gcGF0aC4gSXQgZW5zdXJlcyB0aGF0IGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoKWAgZmFpbHMsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLCBhbmQgaW4gdGhlIGhvc3QgU29DIHByb2JlIGVycm9yIHBhdGgsIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoKWAgaXMgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlZ2lzdGVyZWQgY29yZXMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBvbiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcGF0aCBkdXJpbmcgQkNNQSBidXMgcmVnaXN0cmF0aW9uLiBJZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgcHJvcGVybHkgcHJvcGFnYXRlcyB0aGUgZXJyb3IgYW5kIGNsZWFucyB1cCB0aGUgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGRldmljZSBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlIGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWQ0ZjI2NDE5NDFjMDY4Yzk5MjgwN2Y2YWRlYThiMTk2NWFjNWQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICYjNDM7MjM2LDcgQEAgc3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycl91bm1hcF9tbWlvOlxuJiM0MztcdGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpO1xuIFx0aW91bm1hcChidXMtXHUwMDNlbW1pbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uY1xuaW5kZXggNzJmMDQ1ZTZlZDUxMy4uNTVkMTc1NDZjNzk3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbkBAIC00NzcsOCAmIzQzOzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbiYjNDM7XHRlcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwmIzM0O0J1cyByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQ01BJiMzNDssCiAgICAmIzM0O0JDTUFfSE9TVF9TT0MmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JjbWFfYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2JjbWFfdW5yZWdpc3Rlcl9jb3JlcyYjMzQ7LAogICAgJiMzNDtiY21hX2hvc3Rfc29jX3Byb2JlJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9wY2lfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcGF0aCBkdXJpbmcgQkNNQSBidXMgcmVnaXN0cmF0aW9uLiBJZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgcHJvcGVybHkgcHJvcGFnYXRlcyB0aGUgZXJyb3IgYW5kIGNsZWFucyB1cCB0aGUgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGRldmljZSBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlIGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWQ0ZjI2NDE5NDFjMDY4Yzk5MjgwN2Y2YWRlYThiMTk2NWFjNWQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCmluZGV4IDIwYjE4MTZjNTcwYjIuLjBiZWMwZDAwNWI4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCkBAIC0yMzYsNiAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbnQgYmNtYV9ob3N0X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXJldHVybiBlcnI7CiAKIGVycl91bm1hcF9tbWlvOgomIzQzOwliY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTsKIAlpb3VubWFwKGJ1cy0mZ3Q7bW1pbyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9tYWluLmMgYi9kcml2ZXJzL2JjbWEvbWFpbi5jCmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtNDc3LDggJiM0Mzs0NzcsOSBAQCBpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpCiAJfQogCiAJLyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi8KLQliY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTsKLQomIzQzOwllcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJYmNtYV9pbmZvKGJ1cywgJiMzNDtCdXMgcmVnaXN0ZXJlZFxuJiMzNDspOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCQ01BIFBhdGNoIGZvciBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jYCBhbmQgYGRyaXZlcnMvYmNtYS9tYWluLmNgLiBUaGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIEJDTUEgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgbm93IHVucmVnaXN0ZXJzIGNvcmVzIG9uIGFuIGVycm9yIHBhdGggYnkgY2FsbGluZyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLiBBbHNvLCBgYmNtYV9idXNfcmVnaXN0ZXJgIG5vdyBleHBsaWNpdGx5IHJldHVybnMgYW4gZXJyb3IgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYCBmYWlscy4gVGhlIGNvbmNlcm4sIGFzIGFsd2F5cyB3aXRoIGFueSBrZXJuZWwgcGF0Y2gsIGlzIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBtb2RpZmllZCBlcnJvciBwYXRoIGFuZCB0aGUgY29kZSB1bmRlciB0ZXN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZXNlIEJDTUEgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudD8gVGhpcyBpcyBCcm9hZGNvbSYjMzk7cyBzcGVjaWZpYyBidXMgKEFNQkEtYmFzZWQpLCB3aGljaCBpcyB0aGUgZmlyc3QgY2hhbGxlbmdlLiBIb3cgZWFzeSBpcyBpdCB0byBlbXVsYXRlIG9yIGV2ZW4gcHJvcGVybHkgcHJvYmUgc3VjaCBhIGJ1cz8gVGhlIHBhdGNoIGZvY3VzZXMgb24gcGxhdGZvcm0gZGV2aWNlcyBhbmQgdGhlIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZS4KCkhtbSwgcGxhdGZvcm0gZGV2aWNlc+KApiB0aG9zZSBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIG1hbnVhbGx5LiBDYW4gc3l6a2FsbGVyIGluamVjdCBvciBtYW5pcHVsYXRlIHRoZSBkZXZpY2UgdHJlZT8gIEFuZCBpcyB0aGVyZSBhIHdheSB0byBmb3JjZSBhIHBsYXRmb3JtIGRldmljZSB0byBiZSBjcmVhdGVkIHZpYSBgc3l6X2dlbmV0bGlua2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/ICBXYWl0LCBubywgYHN5emthbGxlcmAgZG9lc24mIzM5O3QgcHJvdmlkZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGNyZWF0b3IsIHVubGVzcyBpdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgcHNldWRvLWRldmljZSBvciBhIGRyaXZlciBhbGxvd3MgZm9yIGEgY3VzdG9tIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHpvb20gb3V0IGEgYml0LiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqYW5kKiBwb3RlbnRpYWxseSBvdGhlciBwcm9iZSBmdW5jdGlvbnMgbGlrZSBgYmNtYV9ob3N0X3BjaV9wcm9iZWAuIFRoaXMgZ2l2ZXMgYSBzZWNvbmQgcG90ZW50aWFsIHJvdXRlIHRvIHRlc3QgdGhlIGNoYW5nZXMuIENhbiB3ZSByZWFjaCBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IFNpbmNlIFBDSSBkZXZpY2VzIGNhbiBiZSBlbXVsYXRlZCB0byBzb21lIGV4dGVudCwgYW5kIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHRoaXMgbWlnaHQgYmUgYSBwb3NzaWJpbGl0eS4gQnV0IFBDSSBmdXp6aW5nIGlzIG1vcmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHNldHVwLgoKVWx0aW1hdGVseSwgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgdGVzdGFibGUgd2l0aCBmdXp6aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIHdvcmtzIGludGVybmFsbHkgYXMgd2VsbC4gVGhhdCBpcyB0aGUgdHJ1ZSBsaW5jaHBpbiBhbmQgaXMgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3JlZ2lzdGVyX2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmM9Mjc4PXN0YXRpYyB2b2lkIGJjbWFfcmVnaXN0ZXJfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxuZHJpdmVycy9iY21hL21haW4uYzoyOTE6c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0zODg9aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ4MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBwcmltYXJ5IHB1cnBvc2UuIEkmIzM5O20gZ3Vlc3NpbmcsIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgQnJvYWRjb20gZGV2aWNlIGluc3RhbmNlcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgcHJvYmluZyBmb3IgaGFyZHdhcmUsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRldmljZSBzdHJ1Y3R1cmVzIGZvciB0aGUgZHJpdmVyIHRvIGludGVyYWN0IHdpdGggdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQkNNQSBidXMgYW5kIHdoaWNoIGRldmljZSB0eXBlcyBpdCBzdXBwb3J0cy4gRG9lcyBpdCBoYW5kbGUgZGlmZmVyZW50IHJldmlzaW9ucyBvZiB0aGUgc2FtZSBjaGlwPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGZ1bmN0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGRldmljZSBlbnVtZXJhdGlvbiBpcyBiZWluZyB0cmlnZ2VyZWQgYXN5bmNocm9ub3VzbHk/IEtub3dpbmcgd2hpY2gga2VybmVsIHN1YnN5c3RlbXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBpcyBhbHNvIGltcG9ydGFudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gdGhpbmdzIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGBidXNfcmVnaXN0ZXJgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBiY21hIHN0YWNrIGlzIHByZXR0eSBnb29kLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkga2V5IHRvIGEgcmVsaWFibGUsIHN0YWJsZSBzeXN0ZW0uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyByZWdpc3RyYXRpb24gcHJvY2Vzcy4gQW55IGZhaWxlZCBhdHRlbXB0cyB0byByZWdpc3RlciBhIGRldmljZSBjb3VsZCBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLCBsZWFkaW5nIHRvIGRldmljZSBtYWxmdW5jdGlvbiBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSXQgd2lsbCBhbHNvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBhdCBydW50aW1lIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdHN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuIDI5MjpcdHtcbiAyOTM6XHRcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZTtcbiAyOTQ6XHRcdGludCBlcnI7XG4gMjk1Olx0XG4gMjk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvcmUsIFx1MDAyNmJ1cy1cdTAwM2Vjb3JlcywgbGlzdCkge1xuIDI5NzpcdFx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuIDI5ODpcdFxuIDI5OTpcdFx0XHQvKiBXZSBzdXBwb3J0IHRoYXQgY29yZSBvdXJzZWx2ZXMgKi9cbiAzMDA6XHRcdFx0c3dpdGNoIChjb3JlLVx1MDAzZWlkLmlkKSB7XG4gMzAxOlx0XHRcdGNhc2UgQkNNQV9DT1JFXzQ3MDZfQ0hJUENPTU1PTjpcbiAzMDI6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfQ0hJUENPTU1PTjpcbiAzMDM6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfTlNfQ0hJUENPTU1PTl9COlxuIDMwNDpcdFx0XHRjYXNlIEJDTUFfQ09SRV9QQ0k6XG4gMzA1Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSUU6XG4gMzA2Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSUUyOlxuIDMwNzpcdFx0XHRjYXNlIEJDTUFfQ09SRV9NSVBTXzc0SzpcbiAzMDg6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9NQUNfR0JJVF9DT01NT046XG4gMzA5Olx0XHRcdFx0Y29udGludWU7XG4gMzEwOlx0XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdFx0LyogRWFybHkgY29yZXMgd2VyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgKi9cbiAzMTM6XHRcdFx0aWYgKGJjbWFfaXNfY29yZV9uZWVkZWRfZWFybHkoY29yZS1cdTAwM2VpZC5pZCkpXG4gMzE0Olx0XHRcdFx0Y29udGludWU7XG4gMzE1Olx0XG4gMzE2Olx0XHRcdG5wID0gY29yZS1cdTAwM2VkZXYub2Zfbm9kZTtcbiAzMTc6XHRcdFx0aWYgKG5wIFx1MDAyNlx1MDAyNiAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpXG4gMzE4Olx0XHRcdFx0Y29udGludWU7XG4gMzE5Olx0XG4gMzIwOlx0XHRcdC8qIE9ubHkgZmlyc3QgR01BQyBjb3JlIG9uIEJDTTQ3MDYgaXMgY29ubmVjdGVkIGFuZCB3b3JraW5nICovXG4gMzIxOlx0XHRcdGlmIChjb3JlLVx1MDAzZWlkLmlkID09IEJDTUFfQ09SRV80NzA2X01BQ19HQklUIFx1MDAyNlx1MDAyNlxuIDMyMjpcdFx0XHQgICAgY29yZS1cdTAwM2Vjb3JlX3VuaXQgXHUwMDNlIDApXG4gMzIzOlx0XHRcdFx0Y29udGludWU7XG4gMzI0Olx0XG4gMzI1Olx0XHRcdGJjbWFfcmVnaXN0ZXJfY29yZShidXMsIGNvcmUpO1xuIDMyNjpcdFx0fVxuIDMyNzpcdFxuIDMyODpcdCNpZmRlZiBDT05GSUdfQkNNQV9QRkxBU0hcbiAzMjk6XHRcdGlmIChidXMtXHUwMDNlZHJ2X2NjLnBmbGFzaC5wcmVzZW50KSB7XG4gMzMwOlx0XHRcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcdTAwMjZiY21hX3BmbGFzaF9kZXYpO1xuIDMzMTpcdFx0XHRpZiAoZXJyKVxuIDMzMjpcdFx0XHRcdGJjbWFfZXJyKGJ1cywgXCYjMzQ7RXJyb3IgcmVnaXN0ZXJpbmcgcGFyYWxsZWwgZmxhc2hcXG5cJiMzNDspO1xuIDMzMzpcdFx0fVxuIDMzNDpcdCNlbmRpZlxuIDMzNTpcdFxuIDMzNjpcdCNpZmRlZiBDT05GSUdfQkNNQV9TRkxBU0hcbiAzMzc6XHRcdGlmIChidXMtXHUwMDNlZHJ2X2NjLnNmbGFzaC5wcmVzZW50KSB7XG4gMzM4Olx0XHRcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcdTAwMjZiY21hX3NmbGFzaF9kZXYpO1xuIDMzOTpcdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRXJyb3IgSGFuZGxpbmcgaW4gYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyByZXR1cm5pbmcgYW4gYGludGAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4gQnV0IHRoZSB3YXkgSSYjMzk7bSBzZWVpbmcgaXQgdXNlZCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgSSYjMzk7bSBnZXR0aW5nIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSBpZ25vcmVkIHBvdGVudGlhbCBmYWlsdXJlIG9mIHRoYXQgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgY2FsbCBzb21laG93LCBvciBtYXliZSBpdCBkaWRuJiMzOTt0LiBJIG5lZWQgdG8gYmUgc3VyZSBvbiB0aGlzLiBJZiB3ZSYjMzk7cmUgbm90IGNoZWNraW5nIHRoZSByZXR1cm4gZnJvbSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCBwcm9wZXJseSBhZnRlciBjYWxsaW5nIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLCB0aGVuIHdlIGFyZSBsaWtlbHkgbWlzc2luZyBlcnJvcnMuIEkgbmVlZCB0byBrbm93LgoKSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBiYWNrIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgaXQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgcHJvcGVybHksIG9yIGlmIGl0IG1hc2tzIGl0LCBtYXliZSBieSBhc3N1bWluZyBhIGRlZmF1bHQgcmV0dXJuLiBBIG1pc3NlZCBlcnJvciBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3VlcyB3aXRoIGRldmljZSBlbnVtZXJhdGlvbiBvciBldmVuIGNyYXNoZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdFx0XHRiY21hX2VycihidXMsIFwmIzM0O0Vycm9yIHJlZ2lzdGVyaW5nIHNlcmlhbCBmbGFzaFxcblwmIzM0Oyk7XG4gMzQxOlx0XHR9XG4gMzQyOlx0I2VuZGlmXG4gMzQzOlx0XG4gMzQ0Olx0I2lmZGVmIENPTkZJR19CQ01BX05GTEFTSFxuIDM0NTpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2MubmZsYXNoLnByZXNlbnQpIHtcbiAzNDY6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfbmZsYXNoX2Rldik7XG4gMzQ3Olx0XHRcdGlmIChlcnIpXG4gMzQ4Olx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBOQU5EIGZsYXNoXFxuXCYjMzQ7KTtcbiAzNDk6XHRcdH1cbiAzNTA6XHQjZW5kaWZcbiAzNTE6XHRcdGVyciA9IGJjbWFfZ3Bpb19pbml0KFx1MDAyNmJ1cy1cdTAwM2VkcnZfY2MpO1xuIDM1MjpcdFx0aWYgKGVyciA9PSAtRU5PVFNVUFApXG4gMzUzOlx0XHRcdGJjbWFfZGVidWcoYnVzLCBcJiMzNDtHUElPIGRyaXZlciBub3QgYWN0aXZhdGVkXFxuXCYjMzQ7KTtcbiAzNTQ6XHRcdGVsc2UgaWYgKGVycikge1xuIDM1NTpcdFx0XHRiY21hX2VycihidXMsIFwmIzM0O0Vycm9yIHJlZ2lzdGVyaW5nIEdQSU8gZHJpdmVyOiAlaVxcblwmIzM0OywgZXJyKTtcbiAzNTY6XHRcdFx0cmV0dXJuIGVycjtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcbiAzNTk6XHRcdGlmIChidXMtXHUwMDNlaG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpIHtcbiAzNjA6XHRcdFx0ZXJyID0gYmNtYV9jaGlwY29fd2F0Y2hkb2dfcmVnaXN0ZXIoXHUwMDI2YnVzLVx1MDAzZWRydl9jYyk7XG4gMzYxOlx0XHRcdGlmIChlcnIpXG4gMzYyOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyB3YXRjaGRvZyBkcml2ZXJcXG5cJiMzNDspO1xuIDM2MzpcdFx0fVxuIDM2NDpcdFxuIDM2NTpcdFx0cmV0dXJuIDA7XG4gMzY2Olx0fVxuIDM2NzpcdFxuIDM2ODpcdHZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuIDM2OTpcdHtcbiAzNzA6XHRcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgKnRtcDtcbiAzNzE6XHRcbiAzNzI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb3JlLCB0bXAsIFx1MDAyNmJ1cy1cdTAwM2Vjb3JlcywgbGlzdCkge1xuIDM3MzpcdFx0XHRpZiAoIWNvcmUtXHUwMDNlZGV2X3JlZ2lzdGVyZWQpXG4gMzc0Olx0XHRcdFx0Y29udGludWU7XG4gMzc1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvcmUtXHUwMDNlbGlzdCk7XG4gMzc2Olx0XHRcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmNvcmUtXHUwMDNlZGV2KTtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcdGlmIChidXMtXHUwMDNlaG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpXG4gMzc5Olx0XHRcdHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJ1cy1cdTAwM2VkcnZfY2Mud2F0Y2hkb2cpO1xuIDM4MDpcdFxuIDM4MTpcdFx0LyogTm93IG5vIG9uZSB1c2VzIGludGVybmFsbHktaGFuZGxlZCBjb3Jlcywgd2UgY2FuIGZyZWUgdGhlbSAqL1xuIDM4MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvcmUsIHRtcCwgXHUwMDI2YnVzLVx1MDAzZWNvcmVzLCBsaXN0KSB7XG4gMzgzOlx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvcmUtXHUwMDNlbGlzdCk7XG4gMzg0Olx0XHRcdHB1dF9kZXZpY2UoXHUwMDI2Y29yZS1cdTAwM2VkZXYpO1xuIDM4NTpcdFx0fVxuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXG4gMzg5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJDTUEgQnVzIFJlZ2lzdHJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBjaGFuZ2U6IGBiY21hX2J1c19yZWdpc3RlcmAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYC4gSWYgdGhhdCBmYWlscywgYGJjbWFfYnVzX3JlZ2lzdGVyYCB3aWxsIHJldHVybiBhbiBlcnJvciBpdHNlbGYuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgZ29vZC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3cgbGV2ZWwgZHJpdmVycy4KClRoZW4sIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBiY21hX2hvc3Rfc29jX3Byb2JlYC4gU3BlY2lmaWNhbGx5LCBvbiBhbiBlcnJvciBwYXRoLCB0aGUgY29kZSBub3cgY2FsbHMgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpYC4gVGhhdCYjMzk7cyBzbWFydC4gSXQmIzM5O3MgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHByb3Blcmx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgcHJvYmUuIE1ha2VzIHNlbnNlLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgeW91JiMzOTtyZSBub3QgbGVhdmluZyBhbnkgZGFuZ2xpbmcgcmVzb3VyY2VzIGJlaGluZC4gSW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzLCBvciBvdGhlciBwbGF0Zm9ybSBpc3N1ZXMuCgpOb3cgSSYjMzk7bSB0aGlua2luZywgaXMgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGV2ZW4gKnJlYWNoYWJsZSo/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodC4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBkcml2ZXIgbGlmZWN5Y2xlLCBhbmQgdGhlIHBhdGNoIG1ha2VzIHNlbnNlIGluIHRoYXQgY29udGV4dC4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIGFuZCBkZXZpY2UgZW51bWVyYXRpb24gYXJlIGhhbmRsZWQgc2FmZWx5LCB3aXRoIGdyYWNlZnVsIGVycm9yIHJlY292ZXJ5IGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgc2V0dXAuIEdvb2Qgc3R1ZmYsIGdvb2Qgc3R1ZmYuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoaXMgd29ya3Mgb24gdGhlIFNPQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtYV9ob3N0X3NvY19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MTg5PWludCBfX2luaXQgYmNtYV9ob3N0X3NvY19pbml0KHN0cnVjdCBiY21hX3NvYyAqc29jKVxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIwMi0jaWZkZWYgQ09ORklHX09GXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMDM6c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jPTI1OT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21hX2hvc3Rfc29jX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjMtXHR9LFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0Olx0LnByb2JlXHRcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTI2NS1cdC5yZW1vdmVcdFx0PSBiY21hX2hvc3Rfc29jX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmNtYV9ob3N0X3NvY19kcml2ZXIgUHJvYmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYmNtYV9ob3N0X3NvY19kcml2ZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgY2FuIHN5emthbGxlciwgb3VyIGZ1enplciwgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uPyBUaGUgb2J2aW91cyB3YXkgdG8gdHJpZ2dlciBgcHJvYmVgIGlzIGJ5IGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhIG1hdGNoaW5nIGRldmljZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBuYW1lIG9yIG1hdGNoaW5nIHRhYmxlIHRvIHNlZSB3aGF0IGNoYXJhY3RlcmlzdGljcyBpdCYjMzk7cyBleHBlY3RpbmcgaW4gYSBwbGF0Zm9ybSBkZXZpY2UgdG8gY29uc2lkZXIgaXRzZWxmIGEgZ29vZCBmaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYHN5emthbGxlcmAsIHRoZSBkZXZpY2UsIGFuZCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIDI1MTpcdH1cbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hX2hvc3Rfc29jX29mX21hdGNoW10gPSB7XG4gMjU0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxidXMtYXhpXCYjMzQ7LCB9LFxuIDI1NTpcdFx0e30sXG4gMjU2Olx0fTtcbiAyNTc6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21hX2hvc3Rfc29jX29mX21hdGNoKTtcbiAyNTg6XHRcbiAyNTk6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21hX2hvc3Rfc29jX2RyaXZlciA9IHtcbiAyNjA6XHRcdC5kcml2ZXIgPSB7XG4gMjYxOlx0XHRcdC5uYW1lID0gXCYjMzQ7YmNtYS1ob3N0LXNvY1wmIzM0OyxcbiAyNjI6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gYmNtYV9ob3N0X3NvY19vZl9tYXRjaCxcbiAyNjM6XHRcdH0sXG4gMjY0Olx0XHQucHJvYmVcdFx0PSBiY21hX2hvc3Rfc29jX3Byb2JlLFxuIDI2NTpcdFx0LnJlbW92ZVx0XHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxuIDI2NjpcdH07XG4gMjY3Olx0XG4gMjY4Olx0aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX3JlZ2lzdGVyX2RyaXZlcih2b2lkKVxuIDI2OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBTeXprYWxsZXIgRGV2aWNlIENyZWF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHBsYXRmb3JtIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCBkb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWA/JiMzNDsgTm9wZSwgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBTeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgKmdlbmVyaWMqIHBsYXRmb3JtIGRldmljZSBjcmVhdG9yIGJha2VkIGluLiBJIHN0YXJ0ZWQgd29uZGVyaW5nIGlmIG1heWJlIGl0IGxldmVyYWdlcyBkZXZpY2UgdHJlZSBvdmVybGF5cyB3aGVuIGl0IGhhcyB0aGUgY2FwYWJpbGl0eSwgYnV0IGdlbmVyYWxseSwgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIAoKVGhlbiBJIHdhcyBsaWtlLCB3YWl0IGEgbWludXRlLCBkb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWV0aGluZyB3aXRoIGBzeXpfZ2VuZXRsaW5rYD8gQnV0IG5vLCB0aGF0JiMzOTtzIE5ldGxpbmstc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHN5el91c2JfY29ubmVjdGA/IEFoLCB0aGF0JiMzOTtzIG9idmlvdXNseSBqdXN0IFVTQi4KCkhvbGQgb24uLi4gY2FuIEkgcmVhY2ggYGJjbWFfYnVzX3JlZ2lzdGVyYCBzb21laG93IHRocm91Z2ggUENJPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdCBhdmVudWUuIFRoaXMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oPTI4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKTtcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaDoyOTppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oLTMwLXZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XG4tLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MTYwPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTIyMi1cdC8qIFJlZ2lzdGVyICovXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYzoyMjM6XHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjI0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0yMDM9c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjI5LVx0LyogUmVnaXN0ZXIgKi9cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIzMDpcdGVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMzEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9MzY4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg3LVxuZHJpdmVycy9iY21hL21haW4uYzozODg6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuZHJpdmVycy9iY21hL21haW4uYy0zODkte1xuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9NjM4PXN0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ3LVxuZHJpdmVycy9iY21hL21haW4uYzo2NDg6c3RhdGljIHVuc2lnbmVkIGludCBiY21hX2J1c19yZWdpc3RlcmVkO1xuZHJpdmVycy9iY21hL21haW4uYy02NDktXG4tLVxuZHJpdmVycy9iY21hL21haW4uYz02NTU9c3RhdGljIGludCBfX2luaXQgYmNtYV9pbml0X2J1c19yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNjU4LVxuZHJpdmVycy9iY21hL21haW4uYzo2NTk6XHRpZiAoYmNtYV9idXNfcmVnaXN0ZXJlZClcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjYwLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2My1cdGlmICghZXJyKVxuZHJpdmVycy9iY21hL21haW4uYzo2NjQ6XHRcdGJjbWFfYnVzX3JlZ2lzdGVyZWQgPSAxO1xuZHJpdmVycy9iY21hL21haW4uYy02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gQkNNQSBhbmQgUENJIERldmljZSBGdXp6aW5nKioKCk9rYXksIHNvIGBiY21hX2J1c19yZWdpc3RlcmAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGBiY21hX2hvc3RfcGNpX3Byb2JlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgQnJvYWRjb20gUENJIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBnb2VzIHRvIGZ1enppbmcgdGhlc2UgUENJIGRldmljZXMuICBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIFBDSSBjYXBhYmlsaXRpZXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJIHJlY2FsbCBzZWVpbmcgUENJIGZ1enppbmcgbWVudGlvbmVkLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uLiAKCkhvbGQgb24sIEkgd2FzIHRoaW5raW5nIG9mIHNwZWNpZmljIHN5c3RlbSBjYWxscyB0byBhZGQgZGV2aWNlcywgYnV0IEkgcmVtZW1iZXIgaXQmIzM5O3MgYSBiaXQgbW9yZSBudWFuY2VkLiBBY3R1YWxseSwgSSB3YXMgZ2V0dGluZyB0aGF0IGNvbmZ1c2VkIHdpdGggb3RoZXIgZGV2aWNlIHR5cGVzIGxpa2UgVVNCLiBTeXprYWxsZXIgc3VwcG9ydHMgUENJIGZ1enppbmcgdGhyb3VnaCB0aGUgdmZpbyBpbnRlcmZhY2UuIE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gTGV0IG1lIGNoZWNrIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbjsgaXNuJiMzOTt0IHRoZXJlIGEgYHN5cy9saW51eC9kZXZfcGNpLnR4dGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgdGhpcywgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLgoKUmlnaHQsIHRoZSBwcm9tcHQgaXMgYWJvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuICBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoaW5ncyB0aGF0IGxpa2VseSBuZWVkICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyByZWFkaWx5IGVtdWxhdGVkLiBBaCwgYGJjbWFfaG9zdF9wY2lfcHJvYmVgIGlzIGZvciBCcm9hZGNvbSBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIGFuZCAqdGhhdCogaXMgdGhlIGtleSBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiBgYmNtYV9ob3N0X3BjaV9wcm9iZWAgdG8gdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgZGV2aWNlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBPa2F5LCBjaGVja2luZyB0aGUgUENJIElEcyBpcyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3BjaV9icmlkZ2VfdGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvaG9zdF9wY2kuYz0yNzM9c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGJjbWFfcG1fb3BzLCBiY21hX2hvc3RfcGNpX3N1c3BlbmQsXG4tLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjgyLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiY21hX3BjaV9icmlkZ2VfdGJsW10gPSB7XG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yODQtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwNTc2KSB9LFxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwNS19O1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzA2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwNy1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jPTMwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmNtYV9wY2lfYnJpZGdlX2RyaXZlciA9IHtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwOS1cdC5uYW1lID0gXCYjMzQ7YmNtYS1wY2ktYnJpZGdlXCYjMzQ7LFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzEwOlx0LmlkX3RhYmxlID0gYmNtYV9wY2lfYnJpZGdlX3RibCxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMxMS1cdC5wcm9iZSA9IGJjbWFfaG9zdF9wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgUENJIERldmljZSoqCgpPa2F5LCBzbyB0aGVzZSBhcmUgZGVmaW5pdGVseSBCcm9hZGNvbSBQQ0kgZGV2aWNlcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBwcm9wZXJseSBlbXVsYXRlcyB0aGVtLiBJIGtub3cgUUVNVSBoYXMgc29tZSBCcm9hZGNvbSBuZXR3b3JrIGNhcmQgc3VwcG9ydCwgYnV0IEkmIzM5O20gbm90IHN1cmUgYWJvdXQgdGhlc2Ugc3BlY2lmaWMgZGV2aWNlcy4gVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYXMgaXQgYWxsb3dzIHRoZSBpbmplY3Rpb24gb2YgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBpcyBsZXZlcmFnaW5nIFBDSSBmdXp6aW5nLCB3aGljaCBtaWdodCBwcm92aWRlIGEgY2x1ZSBvbiBob3cgdG8gYXBwcm9hY2ggdGhpcy4KCldhaXQsIG5vdyBJIHJlcmVhZCB0aGUgcHJvbXB0LiBJdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgY29udGFpbnMgZHJpdmVycyBzdWNoIGFzIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIE15IHRob3VnaHRzIHJhY2UgYWhlYWQ6IGlzIGBCQ01BYCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqYWxzbyogcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3csIGBCQ01BYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdGhlIEJyb2FkY29tIEFNQkEgYnVzIHVzZWQgaW4gQnJvYWRjb20gd2lyZWxlc3MgY2FyZHMgbGlrZSBgYjQzYCBhbmQgYGJyY21zbWFjYCwgYW5kIGluIFNvQ3MuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LgoKQ2FuIHN5emthbGxlciBldmVuIHJlYWNoIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBvciBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IEhvbGQgb24uLi4gdGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBXYWl0IGEgbWludXRlLCB0aGF0IG1lYW5zIHN5emthbGxlciAqZGlkKiBmaW5kIGEgYnVnIGhlcmUsIGFuZCBnZW5lcmF0ZWQgYSBwYXRjaCEgVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZSEgSWYgaXQgZm91bmQgYSBidWcsIGl0IGhhcyB0byBiZSByZWFjaGFibGUgd2l0aGluIGl0cyBlbnZpcm9ubWVudC4gTm93IEkmIzM5O20gZm9jdXNlZDogaG93IGRpZCBzeXprYWxsZXIgcmVhY2ggYGJjbWFfaG9zdF9zb2NfcHJvYmVgPwoKTGV0IG1lIHRoaW5rLiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyBmb3Igc29tZSBraW5kIG9mIG1lY2hhbmlzbSBmb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uIHRvIHRyaWdnZXIgdGhlIHByb2JlLCBvciBpZiBpdCYjMzk7cyBiZWluZyB0cmlnZ2VyZWQgdmlhIGFub3RoZXIgc3Vic3lzdGVtLiBPa2F5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9jcmVhdGVgPyBObywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGFwcGVhciB0byBsZXZlcmFnZSB0aGF0LgoKV2FpdC4uLiBjb3VsZCBgYmNtYWAgYmUgYSB2aXJ0dWFsIGRldmljZSBvciBtYXliZSBiZSBpbnN0YW50aWF0ZWQgdGhyb3VnaCBhIG5ldGxpbmsgaW50ZXJmYWNlPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX2hvc3Rfc29jX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjAyLSNpZmRlZiBDT05GSUdfT0ZcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIwNC17XG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTI2My1cdH0sXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyNjQ6XHQucHJvYmVcdFx0PSBiY21hX2hvc3Rfc29jX3Byb2JlLFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjY1LVx0LnJlbW92ZVx0XHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQkNNQSBFcnJvciBQYXRoOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcyBjb2RlPyYjMzQ7IEkga25vdyBpdCBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGRldmljZSB0cmVlIG92ZXJsYXlzPyBPciBwZXJoYXBzIGl0IHVzZXMgc29tZSBraW5kIG9mIHBzZXVkby1zeXNjYWxsLiBObywgbm8gYHN5el9nZW5ldGxpbmtgLCB0aGF0JiMzOTtzIG5vdCBpdC4KCkkmIzM5O2QgbGlrZSB0byBjaGVjayBpZiBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IHJlYWNoIHRoZSBgYmNtYV9ob3N0X3NvY19wcm9iZWAgZnVuY3Rpb24gYnkgbG9va2luZyBpdCB1cCBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgYnV0IEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBjYXBhYmlsaXR5IGhlcmUuIEhvd2V2ZXIsIEkgY2FuIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3l6a2FsbGVyIGZ1bmN0aW9uIHRoYXQgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHJlY2FsbCB0aGF0IHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZXMgdmlhIGBzeXNmc2AsIGBjb25maWdmc2AsIG9yIGBuZXRsaW5rYC4gQnV0LCB0aGVyZSYjMzk7cyBgYnRzZGlvYCBvciBgbWFjODAyMTFfaHdzaW1gLCB0b28uCgpUaGVuIEkgc2F3IHRoZSBhdXRob3I6IGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0ICptZWFucyogc3l6a2FsbGVyIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUhCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmc/IEl0IGxvb2tzIGxpa2UgaXQgbW9kaWZpZXMgZXJyb3IgcGF0aHMgaW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGFuZCBgYmNtYV9idXNfcmVnaXN0ZXJgLiBTcGVjaWZpY2FsbHksIGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZhaWxzLCB0aGVyZSYjMzk7cyBhIG5ldyBlcnJvciByZXR1cm4uIFRoZSBmYWlsdXJlIHByb3BhZ2F0ZXMgdXAgdG8gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgYW5kIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBub3cgaGFuZGxlcyB0aGlzIGVycm9yLCB1bnJlZ2lzdGVyaW5nIGNvcmVzIGFuZCB1bm1hcHBpbmcgTU1JTy4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiB1bmNvdmVyIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgb2NjdXIgd2hlbiBlcnJvcnMgYXJlIGhhbmRsZWQuCgpOb3csIHdhaXQsIHRoZSBwcm9tcHQgc2F5cyBub3QgdG8gcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIHVucmVhY2hhYmxlIGNvZGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLgoKU28sIGlzIEJDTUEgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IHN5emthbGxlciYjMzk7cyBQQ0kgY2FwYWJpbGl0aWVzLiBObywgbm90IHRoYXQuIEkga25vdyBzeXprYWxsZXIgaGFzIHZpcnR1YWwgUENJIGZ1enppbmcgc3VwcG9ydCB2aWEgYSBtb2R1bGUgb3IgdXNlcmZhdWx0ZmQuIEJ1dCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciBwcm9iZS4gSG93IHdvdWxkIHN5emthbGxlciByZWFjaCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmb3Igc29tZXRoaW5nIGxpa2UgJiMzNDticmNtLGJ1cy1heGkmIzM0Oz8KCkNvdWxkIGl0IGJlIERldmljZSBUcmVlIG92ZXJsYXkgaW5qZWN0aW9uPyBBaGEhIFN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG5vLCBubywgbm90IHRoYXQuIEJ1dCB3YWl0LCBzeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgdGhyb3VnaCBgc3lzZnNgISBTcGVjaWZpY2FsbHksIGAvc3lzL2tlcm5lbC9jb25maWcvZGV2aWNlLXRyZWUvb3ZlcmxheXMvYC4gSSByZW1lbWJlciBgQ09ORklHX09GX09WRVJMQVlgIGlzIGEgdGhpbmcuCgpTbywgc3l6a2FsbGVyICpjYW4qIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIGJ5IGxvYWRpbmcgRFQgb3ZlcmxheXMhIFRoaXMgbWVhbnMgYW55IHBsYXRmb3JtIGRyaXZlciB3aXRoIGFuIGBvZl9tYXRjaF90YWJsZWAgaXMgcmVhY2hhYmxlISBUaGUgYGJjbWFfaG9zdF9zb2NfZHJpdmVyYCBoYXMgYG9mX21hdGNoX3RhYmxlID0gYmNtYV9ob3N0X3NvY19vZl9tYXRjaGAuIEFuZCB0aGF0IGBvZl9tYXRjaF90YWJsZWAgaGFzIGAuY29tcGF0aWJsZSA9ICYjMzQ7YnJjbSxidXMtYXhpJiMzNDtgLiBCcmlsbGlhbnQhIFN5emthbGxlciBjYW4gbG9hZCBhIERUIG92ZXJsYXkgd2l0aCB0aGF0IGNvbXBhdGlibGUgc3RyaW5nLCBhbmQgdHJpZ2dlciBgYmNtYV9ob3N0X3NvY19wcm9iZWAuCgpZZXMsIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLgoKTGV0JiMzOTtzIG1vdmUgb24gYW5kIGZpZ3VyZSBvdXQgd2hhdCBjb25maWdzIGFyZSBuZWVkZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJDTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9iY21hL0tjb25maWc6Mjpjb25maWcgQkNNQV9QT1NTSUJMRVxuZHJpdmVycy9iY21hL0tjb25maWctMy1cdGJvb2xcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02LVxuZHJpdmVycy9iY21hL0tjb25maWc6NzptZW51Y29uZmlnIEJDTUFcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBzcGVjaWZpYyBBTUJBXCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWc9MTQ9aWYgQkNNQVxuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE2LSMgU3VwcG9ydCBmb3IgQmxvY2stSS9PLiBTRUxFQ1QgdGhpcyBmcm9tIHRoZSBkcml2ZXIgdGhhdCBuZWVkcyBpdC5cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjE3OmNvbmZpZyBCQ01BX0JMT0NLSU9cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE4LVx0Ym9vbFxuZHJpdmVycy9iY21hL0tjb25maWctMTktXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyMDpjb25maWcgQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxuZHJpdmVycy9iY21hL0tjb25maWctMjEtXHRib29sXG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctMjQtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyNTpjb25maWcgQkNNQV9IT1NUX1BDSVxuZHJpdmVycy9iY21hL0tjb25maWctMjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgb24gUENJLWhvc3QgYnVzXCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctMzAtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzozMTpjb25maWcgQkNNQV9IT1NUX1NPQ1xuZHJpdmVycy9iY21hL0tjb25maWctMzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgaW4gYSBTb0NcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy00MC1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjQxOmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTU2LVxuZHJpdmVycy9iY21hL0tjb25maWc6NTc6Y29uZmlnIEJDTUFfRFJJVkVSX1BDSV9IT1NUTU9ERVxuZHJpdmVycy9iY21hL0tjb25maWctNTgtXHRib29sIFwmIzM0O0RyaXZlciBmb3IgUENJIGNvcmUgd29ya2luZyBpbiBob3N0bW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTYyLVxuZHJpdmVycy9iY21hL0tjb25maWc6NjM6Y29uZmlnIEJDTUFfRFJJVkVSX01JUFNcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTY0LVx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIE1JUFMgY29yZSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy03MS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjcyOmNvbmZpZyBCQ01BX1BGTEFTSFxuZHJpdmVycy9iY21hL0tjb25maWctNzMtXHRib29sXG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctNzYtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo3Nzpjb25maWcgQkNNQV9TRkxBU0hcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtDaGlwQ29tbW9uLWF0dGFjaGVkIHNlcmlhbCBmbGFzaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctODgtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo4OTpjb25maWcgQkNNQV9ORkxBU0hcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTkwLVx0Ym9vbFxuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTkzLVxuZHJpdmVycy9iY21hL0tjb25maWc6OTQ6Y29uZmlnIEJDTUFfRFJJVkVSX0dNQUNfQ01OXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7QkNNQSBCcm9hZGNvbSBHQklUIE1BQyBDT01NT04gY29yZSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMDI6Y29uZmlnIEJDTUFfRFJJVkVSX0dQSU9cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTEwMy1cdGJvb2wgXCYjMzQ7QkNNQSBHUElPIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTExMC1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjExMTpjb25maWcgQkNNQV9ERUJVR1xuZHJpdmVycy9iY21hL0tjb25maWctMTEyLVx0Ym9vbCBcJiMzNDtCQ01BIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgb24gQkNNQSBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGBCQ01BYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBgQkNNQV9IT1NUX1NPQ2AuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGF0IGBCQ01BX0hPU1RfU09DYCBwYXJ0LCBhcyBpdHMgYmVoYXZpb3Igd2lsbCBsaWtlbHkgZGljdGF0ZSBob3cgYEJDTUFgIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBpZWNlcyB0aGlzIGhvc3Qgc2lkZSBTT0MgZWxlbWVudCByZXF1aXJlcyBvciByZWxpZXMgdXBvbiwgYXMgdGhpcyB3aWxsIGRpcmVjdGx5IGluZmx1ZW5jZSBteSBpbXBsZW1lbnRhdGlvbiBwbGFuIGZvciB0aGUgYnJvYWRlciBgQkNNQWAgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgYW55IGFyY2hpdGVjdHVyYWwgaW1wYWN0IHRoYXQgdGhlc2UgY29uc3RyYWludHMgaGF2ZSBvbiB0aGUgYEJDTUFgIG1vZHVsZSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdGNvbmZpZyBCQ01BX0hPU1RfUENJXG4gIDI2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgb24gUENJLWhvc3QgYnVzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEVcbiAgMjg6XHRcdHNlbGVjdCBCQ01BX0RSSVZFUl9QQ0lcbiAgMjk6XHRcdGRlZmF1bHQgeVxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCQ01BX0hPU1RfU09DXG4gIDMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgaW4gYSBTb0NcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIEhvc3QgaW50ZXJmYWNlIGZvciBhIEJyb2FkY29tIEFJWCBidXMgZGlyZWN0bHkgbWFwcGVkIGludG9cbiAgMzY6XHRcdCAgdGhlIG1lbW9yeS4gVGhpcyBvbmx5IHdvcmtzIHdpdGggdGhlIEJyb2FkY29tIFNvQ3MgZnJvbSB0aGVcbiAgMzc6XHRcdCAgQkNNNDdYWCBsaW5lLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJDTUFfRFJJVkVSX1BDSVxuICA0MjpcdFx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBCQ01BX0hPU1RfU09DYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgaGF2ZSBgSEFTX0lPTUVNYCBlbmFibGVkLiBNYWtlcyBzZW5zZTsgdHlwaWNhbGx5LCB5b3UgbmVlZCBkaXJlY3QgSS9PIG1lbW9yeSBhY2Nlc3MgZm9yIHRoYXQga2luZCBvZiBsb3ctbGV2ZWwgU09DIGludGVyYWN0aW9uLiBOb3csIHRoZSBgQkNNQWAgZHJpdmVyIGl0c2VsZiBhbHNvIGhpbmdlcyBvbiBgSEFTX0lPTUVNYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZXBlbmRlbmN5LiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgc2hhcmVkLCBmdW5kYW1lbnRhbCByZXNvdXJjZSBiZXR3ZWVuIHRob3NlIHR3byBtb2R1bGVzIHRoYXQgaGFzIHRoZSBtZW1vcnkgbWFwcGluZyByZXF1aXJlbWVudCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBCQ01BYCBhbHNvIG5lZWRzIGRpcmVjdCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJDTUFgIHRvIGVuc3VyZSBub3RoaW5nIGlzIG1pc3NpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgQkNNQV9QT1NTSUJMRVxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlZmF1bHQgeVxuICAgNjpcdFxuICAgNzpcdG1lbnVjb25maWcgQkNNQVxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gc3BlY2lmaWMgQU1CQVwmIzM0O1xuICAgOTpcdFx0ZGVwZW5kcyBvbiBCQ01BX1BPU1NJQkxFXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIEJ1cyBkcml2ZXIgZm9yIEJyb2FkY29tIHNwZWNpZmljIEFkdmFuY2VkIE1pY3JvY29udHJvbGxlciBCdXNcbiAgMTI6XHRcdCAgQXJjaGl0ZWN0dXJlLlxuICAxMzpcdFxuICAxNDpcdGlmIEJDTUFcbiAgMTU6XHRcbiAgMTY6XHQjIFN1cHBvcnQgZm9yIEJsb2NrLUkvTy4gU0VMRUNUIHRoaXMgZnJvbSB0aGUgZHJpdmVyIHRoYXQgbmVlZHMgaXQuXG4gIDE3Olx0Y29uZmlnIEJDTUFfQkxPQ0tJT1xuICAxODpcdFx0Ym9vbFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBCQ01BX0hPU1RfUENJX1BPU1NJQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCQ01BIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB1c2luZyBib3RoIGBCQ01BYCBhbmQgYEJDTUFfSE9TVF9TT0NgIHNob3VsZCBjb3ZlciB0aGUgcHJpbWFyeSBuZWVkcy4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiwgSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGBCQ01BX0hPU1RfUENJYC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgY29tcHJlaGVuc2l2ZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGFuZCBgYmNtYV9idXNfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJmYWNlcy4gQW5kLCB0byBiZSBleHRyYSB0aG9yb3VnaCwgbGV0IG1lIGFsc28gbm90ZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBhbmQgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2Ag4oCTIHRoZXNlIGxvb2sgY3JpdGljYWwgZm9yIG92ZXJhbGwgZGV2aWNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBCQ01BIGZyYW1ld29yay4KCkkmIzM5O3ZlIGp1c3QgY29uZmlybWVkIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzLCBhcyBleHBlY3RlZCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gV2FpdCwgaG9sZCBvbi4uLiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzICpleHBvcnRlZCo/IFRoYXTigJlzIGludGVyZXN0aW5nLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMgb3IgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldhaXQsIFRoYXQgQVBJIElzbiYjMzk7dCBFeHBvc2VkPyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJDTUEgYnVzIGRyaXZlciwgYW5kIEkgaGl0IGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHVzZSBgYmNtYV9idXNfcmVnaXN0ZXJgIHRvIGJyaW5nIHRoZSBidXMgaW50byBhIHVzYWJsZSBzdGF0ZS4gQnV0IEkganVzdCBjaGVja2VkIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuICpUaGF0JiMzOTtzKiBub3QgZ29vZC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIEFQSSBjYWxsIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZywgb3IgaWYgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgdXBzdHJlYW0gZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IG1lYW5zIG9mIGluaXRpYWxpemF0aW9uIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIElzIGl0IHdyYXBwZWQgaW5zaWRlIGFub3RoZXIgbW9kdWxlIEkgaGF2ZSBtaXNzZWQ/IFRoaXMgaXMgZ29pbmcgdG8gc2xvdyB0aGluZ3MgZG93biBjb25zaWRlcmFibHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGRvbmUgY29ycmVjdGx5LiBUaW1lIHRvIGdyYWIgdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgY2FsbCBzdGFjaywgYW5kIHNlZSB3aGF0IHRoZSBpbnRlbmRlZCBkZXNpZ24gcGF0dGVybiBpcy4gSSBhbSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIEJDTUEgYXJjaGl0ZWN0dXJlLCBidXQgdGhlc2UgaW1wbGVtZW50YXRpb24gZGV0YWlscyBjYW4gYmUgdHJpY2t5LiBUaGlzIGxhY2sgb2YgYSBkaXJlY3QgQVBJIGZ1bmN0aW9uIGlzIHVuZXhwZWN0ZWQsIGFuZCBtZWFucyBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgbXkgYXBwcm9hY2guIEkgbmVlZCB0byBrbm93IHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaD0yOD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XG5kcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmg6Mjk6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKTtcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaC0zMC12b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jPTE2MD1zdGF0aWMgaW50IGJjbWFfaG9zdF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjItXHQvKiBSZWdpc3RlciAqL1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjIzOlx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTIyNC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjAzPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIyOS1cdC8qIFJlZ2lzdGVyICovXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMzA6XHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjMxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTM2OD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTM4Ny1cbmRyaXZlcnMvYmNtYS9tYWluLmM6Mzg4OmludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg5LXtcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTYzOD1zdGF0aWMgaW50IGJjbWFfZGV2aWNlX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY0Ny1cbmRyaXZlcnMvYmNtYS9tYWluLmM6NjQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYmNtYV9idXNfcmVnaXN0ZXJlZDtcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ5LVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9NjU1PXN0YXRpYyBpbnQgX19pbml0IGJjbWFfaW5pdF9idXNfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY1OC1cbmRyaXZlcnMvYmNtYS9tYWluLmM6NjU5Olx0aWYgKGJjbWFfYnVzX3JlZ2lzdGVyZWQpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9iY21hL21haW4uYy02NjMtXHRpZiAoIWVycilcbmRyaXZlcnMvYmNtYS9tYWluLmM6NjY0Olx0XHRiY21hX2J1c19yZWdpc3RlcmVkID0gMTtcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2MAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJDTUEgTW9kdWxlJiMzOTtzIFJlYWNoYWJpbGl0eSBhbmQgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGVycm9yIHBhdGggaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHB1YmxpY2x5IHZpc2libGUgZW50cnkgcG9pbnRzLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKRmlyc3QsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHRhcmdldCBpc24mIzM5O3QgZXhwb3J0ZWQsIGl0JiMzOTtzIGludGVybmFsIHRvIHRoZSBgYmNtYWAgbW9kdWxlLiBIb3dldmVyLCBgYmNtYV9idXNfcmVnaXN0ZXJgIGFuZCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYmVjYXVzZSB0aGV5IGFyZSBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBmb3IgcG90ZW50aWFsIHJlYWNoYWJpbGl0eS4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggSSYjMzk7ZCB1c3VhbGx5IGRpc21pc3MsIGJ1dCB3YWl04oCmCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqaXMqIGFjdHVhbGx5IHJlYWNoYWJsZS4gQWgsIHJpZ2h0LiBQbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBEVCBvdmVybGF5cywgb3Igb3RoZXIgaW5qZWN0aW9uIG1lY2hhbmlzbXMsIG1ha2UgdGhlc2UgcHJvYmVzIHZpYWJsZSBwYXRocy4gQW5kIGBiY21hX2hvc3RfcGNpX3Byb2JlYCwgYmVpbmcgYSBQQ0kgcHJvYmUgZnVuY3Rpb24sIGlzIGVxdWFsbHkgcmVhY2hhYmxlIHZpYSBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIgd2hpY2ggY2FuIGluamVjdCBQQ0kgZGV2aWNlcy4gU28sIGJvdGggYXJlIHZhbGlkIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBlbnVtZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgYmFzZXMuIEkgc2VlIGBDT05GSUdfQkNNQWAsIGBDT05GSUdfQkNNQV9IT1NUX1NPQ2AsIGFuZCBgQ09ORklHX0JDTUFfSE9TVF9QQ0lgIGFyZSByZWxldmFudCBoZXJlLgoKUmV2aWV3aW5nIG90aGVyIGZ1bmN0aW9ucywgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgaXMgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhhdCwgYnV0IGBiY21hX2J1c19yZWdpc3RlcmAgaXMgbm9uLXN0YXRpYyBhbmQgKmNydWNpYWxseSosIGBiY21hX3VucmVnaXN0ZXJfY29yZXNgIGlzIGFsc28gbm9uLXN0YXRpYy4KClRoZSBwYXRjaCYjMzk7cyBzdGF0ZWQgcHVycG9zZSBpcyB0byBjb3JyZWN0IGVycm9yIGhhbmRsaW5nIGluIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgY2xlYW51cCBpbiB0aGUgZXZlbnQgdGhhdCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0aW5nIHRvIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhlcmVmb3JlIGl0IHNob3VsZCBiZSByZWFjaGVkIHZpYSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkJhc2VkIG9uIHRoaXMsIHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBiY21hX2J1c19yZWdpc3RlcmAKKiAgIGBiY21hX3VucmVnaXN0ZXJfY29yZXNgCiogICBgYmNtYV9ob3N0X3NvY19wcm9iZWAgKERlc3BpdGUgYmVpbmcgc3RhdGljLCBpdCYjMzk7cyBhIHByb2JlIGZ1bmN0aW9uIHVzZWQgYnkgYSBkcml2ZXIgYW5kIGlzIG5vdCBsaWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgKmlzKiBhIGtleSBlbnRyeSBwb2ludCkKKiAgIGBiY21hX2hvc3RfcGNpX3Byb2JlYCAoU2FtZSByZWFzb25pbmcgYXMgYWJvdmUpCgpBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbWFpbjoKCiogICBgQkNNQWAKKiAgIGBCQ01BX0hPU1RfU09DYAoqICAgYEJDTUFfSE9TVF9QQ0lgCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRoaXMgYW5hbHlzaXMgd2lsbCBndWlkZSBteSBkZWVwZXIgcmV2aWV3IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JDTUEmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1NPQyYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7YmNtYV91bnJlZ2lzdGVyX2NvcmVzJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9zb2NfcHJvYmUmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkNNQSYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfU09DJiMzNDssCiAgICAmIzM0O0JDTUFfSE9TVF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtiY21hX3VucmVnaXN0ZXJfY29yZXMmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3NvY19wcm9iZSYjMzQ7LAogICAgJiMzNDtiY21hX2hvc3RfcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCQ01BIGJ1cyByZWdpc3RyYXRpb24gcGF0aC4gSXQgZW5zdXJlcyB0aGF0IGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoKWAgZmFpbHMsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLCBhbmQgaW4gdGhlIGhvc3QgU29DIHByb2JlIGVycm9yIHBhdGgsIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoKWAgaXMgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlZ2lzdGVyZWQgY29yZXMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBvbiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwppbmRleCAyMGIxODE2YzU3MGIyLi4wYmVjMGQwMDViODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwpAQCAtMjM2LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlyZXR1cm4gZXJyOwogCiBlcnJfdW5tYXBfbW1pbzoKJiM0MzsJYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7CiAJaW91bm1hcChidXMtJmd0O21taW8pOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uYwppbmRleCA3MmYwNDVlNmVkNTEzLi41NWQxNzU0NmM3OTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9tYWluLmMKQEAgLTQ3Nyw4ICYjNDM7NDc3LDkgQEAgaW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKQogCX0KIAogCS8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovCi0JYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7Ci0KJiM0MzsJZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCWJjbWFfaW5mbyhidXMsICYjMzQ7QnVzIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2hhbmdlcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqQW5hbHl6aW5nIEJDTUEgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2JjbWEvaG9zdF9zb2MuY2AgYW5kIGBkcml2ZXJzL2JjbWEvbWFpbi5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGNvcmUgQkNNQSAoQnJvYWRjb20gQ29tbW9uIEFyY2hpdGVjdHVyZSkgYnVzIGRyaXZlciBjb21wb25lbnRzLgoKSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpdCYjMzk7cyBhZGRpbmcgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpO2AgdG8gdGhlIGBlcnJfdW5tYXBfbW1pb2AgZXJyb3IgcGF0aC4gVGhhdCBtYWtlcyBzZW5zZS4gSWYgdGhlcmUmIzM5O3MgYSBtZW1vcnkgbWFwcGluZyBlcnJvciBkdXJpbmcgcHJvYmUsIHdlIG5lZWQgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSByZWdpc3RlcmVkIGNvcmVzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHByZXZlbnRpbmcgZGFuZ2xpbmcgcmVmZXJlbmNlcywgYW5kIGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suCgpOb3csIGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGlmIGl0JiMzOTtzIGFuIGVycm9yLiBPa2F5LCBzbyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmllcyB0byByZWdpc3RlciB0aGUgZGV2aWNlcyBvbiB0aGUgYnVzLCBhbmQgYW55IGVycm9yIGluIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3BhZ2F0ZWQgYmFjayB1cCB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYGJjbWFfYnVzX3JlZ2lzdGVyYC4KCldhaXQgYSBzZWNvbmQsIGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIHJldHVybmluZyBhbiBpbnRlZ2VyPyBJIG5lZWQgdG8gY29uZmlybSB0aGUgdHlwZSBpdCByZXR1cm5zLiBUaGF0JiMzOTtzIHVudXN1YWwgdG8gaGF2ZSBhbiBgaW50YCBmb3IgYSByZWdpc3RyYXRpb24gZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2JjbWEvbWFpbi5jYCByaWdodCBhd2F5LCB0byBnZXQgdGhlIHJldHVybiB0eXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3JlZ2lzdGVyX2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmM9Mjc4PXN0YXRpYyB2b2lkIGJjbWFfcmVnaXN0ZXJfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxuZHJpdmVycy9iY21hL21haW4uYzoyOTE6c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0zODg9aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ4MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCQ01BIEJ1cyBSZWdpc3RyYXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBFc3NlbnRpYWxseSwgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZmFpbHMgd2l0aGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZSBlcnJvciBpcyBwcm9wZXJseSByZXR1cm5lZCBub3cuIFRoYXQmIzM5O3MgZ29vZC4gSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpZiBgYmNtYV9idXNfcmVnaXN0ZXJgIGZhaWxzLCBpdCB1c2VkIHRvIGp1bXAgdG8gYGVycl91bm1hcF9tbWlvYCwgYW5kIG5vdyBpdCBhbHNvIGNvcnJlY3RseSBjYWxscyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLgoKVGhpcyBpcyBjbGFzc2ljIHJlc291cmNlIGxlYWsgcHJldmVudGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRob3NlIGVycm9yIHBhdGhzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IHRoaXMgbG9va3MgcHJldHR5IGNsZWFuLiBJdCYjMzk7cyBqdXN0IGFib3V0IGNsZWFudXAgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgZ2V0cyB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBJdCYjMzk7cyBhZGRpbmcgdGhhdCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCBjYWxsIGFuZCBjaGVja2luZyBpdHMgcmV0dXJuIHZhbHVlIHdoaWNoIHNlZW1zIHN0YW5kYXJkIGZvciB0aGVzZSB0eXBlcyBvZiBmaXhlcy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLgoKV2UmIzM5O3JlIGluIGdvb2Qgc2hhcGUgc2luY2UgS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mg4oCTIHdl4oCZcmUgY292ZXJlZCB0aGVyZS4gQWxzbywgS01TQU4gaGFuZGxlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhlcmUmIzM5O3Mgbm90aGluZyBpbiB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhbnkuIEkgc3RpbGwgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCwgYnV0IGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgdGhpcyBhbGwgc2VlbXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkxOlx0c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG4gMjkyOlx0e1xuIDI5MzpcdFx0c3RydWN0IGJjbWFfZGV2aWNlICpjb3JlO1xuIDI5NDpcdFx0aW50IGVycjtcbiAyOTU6XHRcbiAyOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgXHUwMDI2YnVzLVx1MDAzZWNvcmVzLCBsaXN0KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4gMjk4Olx0XG4gMjk5Olx0XHRcdC8qIFdlIHN1cHBvcnQgdGhhdCBjb3JlIG91cnNlbHZlcyAqL1xuIDMwMDpcdFx0XHRzd2l0Y2ggKGNvcmUtXHUwMDNlaWQuaWQpIHtcbiAzMDE6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9DSElQQ09NTU9OOlxuIDMwMjpcdFx0XHRjYXNlIEJDTUFfQ09SRV9DSElQQ09NTU9OOlxuIDMwMzpcdFx0XHRjYXNlIEJDTUFfQ09SRV9OU19DSElQQ09NTU9OX0I6XG4gMzA0Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSTpcbiAzMDU6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfUENJRTpcbiAzMDY6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfUENJRTI6XG4gMzA3Olx0XHRcdGNhc2UgQkNNQV9DT1JFX01JUFNfNzRLOlxuIDMwODpcdFx0XHRjYXNlIEJDTUFfQ09SRV80NzA2X01BQ19HQklUX0NPTU1PTjpcbiAzMDk6XHRcdFx0XHRjb250aW51ZTtcbiAzMTA6XHRcdFx0fVxuIDMxMTpcdFxuIDMxMjpcdFx0XHQvKiBFYXJseSBjb3JlcyB3ZXJlIGFscmVhZHkgcmVnaXN0ZXJlZCAqL1xuIDMxMzpcdFx0XHRpZiAoYmNtYV9pc19jb3JlX25lZWRlZF9lYXJseShjb3JlLVx1MDAzZWlkLmlkKSlcbiAzMTQ6XHRcdFx0XHRjb250aW51ZTtcbiAzMTU6XHRcbiAzMTY6XHRcdFx0bnAgPSBjb3JlLVx1MDAzZWRldi5vZl9ub2RlO1xuIDMxNzpcdFx0XHRpZiAobnAgXHUwMDI2XHUwMDI2ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcbiAzMTg6XHRcdFx0XHRjb250aW51ZTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0LyogT25seSBmaXJzdCBHTUFDIGNvcmUgb24gQkNNNDcwNiBpcyBjb25uZWN0ZWQgYW5kIHdvcmtpbmcgKi9cbiAzMjE6XHRcdFx0aWYgKGNvcmUtXHUwMDNlaWQuaWQgPT0gQkNNQV9DT1JFXzQ3MDZfTUFDX0dCSVQgXHUwMDI2XHUwMDI2XG4gMzIyOlx0XHRcdCAgICBjb3JlLVx1MDAzZWNvcmVfdW5pdCBcdTAwM2UgMClcbiAzMjM6XHRcdFx0XHRjb250aW51ZTtcbiAzMjQ6XHRcbiAzMjU6XHRcdFx0YmNtYV9yZWdpc3Rlcl9jb3JlKGJ1cywgY29yZSk7XG4gMzI2Olx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0I2lmZGVmIENPTkZJR19CQ01BX1BGTEFTSFxuIDMyOTpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2MucGZsYXNoLnByZXNlbnQpIHtcbiAzMzA6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfcGZsYXNoX2Rldik7XG4gMzMxOlx0XHRcdGlmIChlcnIpXG4gMzMyOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBwYXJhbGxlbCBmbGFzaFxcblwmIzM0Oyk7XG4gMzMzOlx0XHR9XG4gMzM0Olx0I2VuZGlmXG4gMzM1Olx0XG4gMzM2Olx0I2lmZGVmIENPTkZJR19CQ01BX1NGTEFTSFxuIDMzNzpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2Muc2ZsYXNoLnByZXNlbnQpIHtcbiAzMzg6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfc2ZsYXNoX2Rldik7XG4gMzM5Olx0XHRcdGlmIChlcnIpXG4gMzQwOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBzZXJpYWwgZmxhc2hcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjIzCgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29kZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyB0aWdodGVuaW5nIHVwIGhvdyBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgZnJvbSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGFuZCBtYWtpbmcgc3VyZSBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCBpbiB0aGUgU29DIHByb2JlIGVycm9yIHBhdGguIFRoaXMgcHJldmVudHMgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgYW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MgYXJlIGxpa2VseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrIGFueXdheS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMg4oCTIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjbGVhbnVwIOKAkyBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGluIHRoaXMgY2FzZS4gVGhlIGltcHJvdmVtZW50cyB3aWxsIGNvbnRyaWJ1dGUgdG8gbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBidXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjE5LjcyOTUzMzUyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM3NjUzMzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQ01BXCIsXG4gICAgXCJCQ01BX0hPU1RfU09DXCIsXG4gICAgXCJCQ01BX0hPU1RfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgICBcImJjbWFfdW5yZWdpc3Rlcl9jb3Jlc1wiLFxuICAgIFwiYmNtYV9ob3N0X3NvY19wcm9iZVwiLFxuICAgIFwiYmNtYV9ob3N0X3BjaV9wcm9iZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCBlbnN1cmVzIHRoYXQgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcygpYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQsIGFuZCBpbiB0aGUgaG9zdCBTb0MgcHJvYmUgZXJyb3IgcGF0aCwgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcygpYCBpcyBjYWxsZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIG9uIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHVyZSBwYXRocywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQga21lbWxlYWsuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoxOS43Mjk1MzkxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTgxMjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZDRmMjY0MTk0MWMwNjhjOTkyODA3ZjZhZGVhOGIxOTY1YWM1ZDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xcbmluZGV4IDIwYjE4MTZjNTcwYjIuLjBiZWMwZDAwNWI4OWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmNcXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xcbkBAIC0yMzYsNiArMjM2LDcgQEAgc3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiBlcnJfdW5tYXBfbW1pbzpcXG4rXFx0YmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7XFxuIFxcdGlvdW5tYXAoYnVzLVxcdTAwM2VtbWlvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uY1xcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iY21hL21haW4uY1xcbisrKyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4gXFx0fVxcbiBcXG4gXFx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cXG4tXFx0YmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XFxuLVxcbitcXHRlcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0YmNtYV9pbmZvKGJ1cywgXFxcIkJ1cyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoyMC4xMDIxNDg3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1ODE4NDMwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkNNQVwiLFxuICAgIFwiQkNNQV9IT1NUX1NPQ1wiLFxuICAgIFwiQkNNQV9IT1NUX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJjbWFfYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJiY21hX3VucmVnaXN0ZXJfY29yZXNcIixcbiAgICBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgICBcImJjbWFfaG9zdF9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX3VubWFwX21taW86XG4rXHRiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTtcbiBcdGlvdW5tYXAoYnVzLVx1MDAzZW1taW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL21haW4uYyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2JjbWEvbWFpbi5jXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbitcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwiQnVzIHJlZ2lzdGVyZWRcXG5cIik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjIwLjEwMjE1MDIzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTQzNjk5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCQ01BIFBhdGNoIGZvciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL2JjbWEvaG9zdF9zb2MuY2AgYW5kIGBkcml2ZXJzL2JjbWEvbWFpbi5jYC4gVGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBCQ01BIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIG5vdyB1bnJlZ2lzdGVycyBjb3JlcyBvbiBhbiBlcnJvciBwYXRoIGJ5IGNhbGxpbmcgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpYC4gQWxzbywgYGJjbWFfYnVzX3JlZ2lzdGVyYCBub3cgZXhwbGljaXRseSByZXR1cm5zIGFuIGVycm9yIGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKWAgZmFpbHMuIFRoZSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCBhbnkga2VybmVsIHBhdGNoLCBpcyB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgbW9kaWZpZWQgZXJyb3IgcGF0aCBhbmQgdGhlIGNvZGUgdW5kZXIgdGVzdC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZXNlIEJDTUEgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudD8gVGhpcyBpcyBCcm9hZGNvbSdzIHNwZWNpZmljIGJ1cyAoQU1CQS1iYXNlZCksIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFsbGVuZ2UuIEhvdyBlYXN5IGlzIGl0IHRvIGVtdWxhdGUgb3IgZXZlbiBwcm9wZXJseSBwcm9iZSBzdWNoIGEgYnVzPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB0aGUgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlLlxuXG5IbW0sIHBsYXRmb3JtIGRldmljZXPigKYgdGhvc2UgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvciBtYW51YWxseS4gQ2FuIHN5emthbGxlciBpbmplY3Qgb3IgbWFuaXB1bGF0ZSB0aGUgZGV2aWNlIHRyZWU/ICBBbmQgaXMgdGhlcmUgYSB3YXkgdG8gZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgdG8gYmUgY3JlYXRlZCB2aWEgYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyAgV2FpdCwgbm8sIGBzeXprYWxsZXJgIGRvZXNuJ3QgcHJvdmlkZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGNyZWF0b3IsIHVubGVzcyBpdCdzIGEgdmVyeSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIG9yIGEgZHJpdmVyIGFsbG93cyBmb3IgYSBjdXN0b20gcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLlxuXG5Ob3csIGxldCdzIHpvb20gb3V0IGEgYml0LiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqYW5kKiBwb3RlbnRpYWxseSBvdGhlciBwcm9iZSBmdW5jdGlvbnMgbGlrZSBgYmNtYV9ob3N0X3BjaV9wcm9iZWAuIFRoaXMgZ2l2ZXMgYSBzZWNvbmQgcG90ZW50aWFsIHJvdXRlIHRvIHRlc3QgdGhlIGNoYW5nZXMuIENhbiB3ZSByZWFjaCBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IFNpbmNlIFBDSSBkZXZpY2VzIGNhbiBiZSBlbXVsYXRlZCB0byBzb21lIGV4dGVudCwgYW5kIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHRoaXMgbWlnaHQgYmUgYSBwb3NzaWJpbGl0eS4gQnV0IFBDSSBmdXp6aW5nIGlzIG1vcmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHNldHVwLlxuXG5VbHRpbWF0ZWx5LCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB0ZXN0YWJsZSB3aXRoIGZ1enppbmcsIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCB3b3JrcyBpbnRlcm5hbGx5IGFzIHdlbGwuIFRoYXQgaXMgdGhlIHRydWUgbGluY2hwaW4gYW5kIGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoyNy4wOTY1MjI3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODM2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtYV9yZWdpc3Rlcl9kZXZpY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmNtYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iY21hL21haW4uYz0yNzg9c3RhdGljIHZvaWQgYmNtYV9yZWdpc3Rlcl9jb3JlKHN0cnVjdCBiY21hX2J1cyAqYnVzLCBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5MC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjI5MTpzdGF0aWMgaW50IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTM4OD1pbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ3OS1cXHQvKiBSZWdpc3RlciBmb3VuZCBjb3JlcyAqL1xcbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlxcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNDgxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjI3LjE0MDUxNzExMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjY1MjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgcHJpbWFyeSBwdXJwb3NlLiBJJ20gZ3Vlc3NpbmcsIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBCcm9hZGNvbSBkZXZpY2UgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBwcm9iaW5nIGZvciBoYXJkd2FyZSwgYWxsb2NhdGluZyByZXNvdXJjZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGV2aWNlIHN0cnVjdHVyZXMgZm9yIHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIEJDTUEgYnVzIGFuZCB3aGljaCBkZXZpY2UgdHlwZXMgaXQgc3VwcG9ydHMuIERvZXMgaXQgaGFuZGxlIGRpZmZlcmVudCByZXZpc2lvbnMgb2YgdGhlIHNhbWUgY2hpcD8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBkZXZpY2UgZW51bWVyYXRpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGFzeW5jaHJvbm91c2x5PyBLbm93aW5nIHdoaWNoIGtlcm5lbCBzdWJzeXN0ZW1zIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXMgYWxzbyBpbXBvcnRhbnQuIEknbGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gdGhpbmdzIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGBidXNfcmVnaXN0ZXJgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBiY21hIHN0YWNrIGlzIHByZXR0eSBnb29kLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkga2V5IHRvIGEgcmVsaWFibGUsIHN0YWJsZSBzeXN0ZW0uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyByZWdpc3RyYXRpb24gcHJvY2Vzcy4gQW55IGZhaWxlZCBhdHRlbXB0cyB0byByZWdpc3RlciBhIGRldmljZSBjb3VsZCBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLCBsZWFkaW5nIHRvIGRldmljZSBtYWxmdW5jdGlvbiBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSXQgd2lsbCBhbHNvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBhdCBydW50aW1lIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjMxLjYwNzA0NTk3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXG4gMjkxOlxcdHN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbiAyOTI6XFx0e1xcbiAyOTM6XFx0XFx0c3RydWN0IGJjbWFfZGV2aWNlICpjb3JlO1xcbiAyOTQ6XFx0XFx0aW50IGVycjtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCBcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlcywgbGlzdCkge1xcbiAyOTc6XFx0XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0LyogV2Ugc3VwcG9ydCB0aGF0IGNvcmUgb3Vyc2VsdmVzICovXFxuIDMwMDpcXHRcXHRcXHRzd2l0Y2ggKGNvcmUtXFx1MDAzZWlkLmlkKSB7XFxuIDMwMTpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV80NzA2X0NISVBDT01NT046XFxuIDMwMjpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV9DSElQQ09NTU9OOlxcbiAzMDM6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfTlNfQ0hJUENPTU1PTl9COlxcbiAzMDQ6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfUENJOlxcbiAzMDU6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfUENJRTpcXG4gMzA2OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSUUyOlxcbiAzMDc6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfTUlQU183NEs6XFxuIDMwODpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV80NzA2X01BQ19HQklUX0NPTU1PTjpcXG4gMzA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTA6XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHQvKiBFYXJseSBjb3JlcyB3ZXJlIGFscmVhZHkgcmVnaXN0ZXJlZCAqL1xcbiAzMTM6XFx0XFx0XFx0aWYgKGJjbWFfaXNfY29yZV9uZWVkZWRfZWFybHkoY29yZS1cXHUwMDNlaWQuaWQpKVxcbiAzMTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdFxcdG5wID0gY29yZS1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDMxNzpcXHRcXHRcXHRpZiAobnAgXFx1MDAyNlxcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxcbiAzMTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdC8qIE9ubHkgZmlyc3QgR01BQyBjb3JlIG9uIEJDTTQ3MDYgaXMgY29ubmVjdGVkIGFuZCB3b3JraW5nICovXFxuIDMyMTpcXHRcXHRcXHRpZiAoY29yZS1cXHUwMDNlaWQuaWQgPT0gQkNNQV9DT1JFXzQ3MDZfTUFDX0dCSVQgXFx1MDAyNlxcdTAwMjZcXG4gMzIyOlxcdFxcdFxcdCAgICBjb3JlLVxcdTAwM2Vjb3JlX3VuaXQgXFx1MDAzZSAwKVxcbiAzMjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdFxcdGJjbWFfcmVnaXN0ZXJfY29yZShidXMsIGNvcmUpO1xcbiAzMjY6XFx0XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQjaWZkZWYgQ09ORklHX0JDTUFfUEZMQVNIXFxuIDMyOTpcXHRcXHRpZiAoYnVzLVxcdTAwM2VkcnZfY2MucGZsYXNoLnByZXNlbnQpIHtcXG4gMzMwOlxcdFxcdFxcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcXHUwMDI2YmNtYV9wZmxhc2hfZGV2KTtcXG4gMzMxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDMzMjpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBwYXJhbGxlbCBmbGFzaFxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHR9XFxuIDMzNDpcXHQjZW5kaWZcXG4gMzM1OlxcdFxcbiAzMzY6XFx0I2lmZGVmIENPTkZJR19CQ01BX1NGTEFTSFxcbiAzMzc6XFx0XFx0aWYgKGJ1cy1cXHUwMDNlZHJ2X2NjLnNmbGFzaC5wcmVzZW50KSB7XFxuIDMzODpcXHRcXHRcXHRlcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNmJjbWFfc2ZsYXNoX2Rldik7XFxuIDMzOTpcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozMS42MDcxNjgxODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzgzNTU3MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXJyb3IgSGFuZGxpbmcgaW4gYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZ1bmN0aW9uLCBhbmQgaXQncyByZXR1cm5pbmcgYW4gYGludGAuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgb2YgY291cnNlLCB1c3VhbGx5IGluZGljYXRpbmcgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiBCdXQgdGhlIHdheSBJJ20gc2VlaW5nIGl0IHVzZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIEknbSBnZXR0aW5nIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSBpZ25vcmVkIHBvdGVudGlhbCBmYWlsdXJlIG9mIHRoYXQgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgY2FsbCBzb21laG93LCBvciBtYXliZSBpdCBkaWRuJ3QuIEkgbmVlZCB0byBiZSBzdXJlIG9uIHRoaXMuIElmIHdlJ3JlIG5vdCBjaGVja2luZyB0aGUgcmV0dXJuIGZyb20gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgcHJvcGVybHkgYWZ0ZXIgY2FsbGluZyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCwgdGhlbiB3ZSBhcmUgbGlrZWx5IG1pc3NpbmcgZXJyb3JzLiBJIG5lZWQgdG8ga25vdy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBiYWNrIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyBpdCB0byBzZWUgZXhhY3RseSBob3cgaXQgaGFuZGxlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBwcm9wYWdhdGVzIHRoZSBlcnJvciBwcm9wZXJseSwgb3IgaWYgaXQgbWFza3MgaXQsIG1heWJlIGJ5IGFzc3VtaW5nIGEgZGVmYXVsdCByZXR1cm4uIEEgbWlzc2VkIGVycm9yIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIHdpdGggZGV2aWNlIGVudW1lcmF0aW9uIG9yIGV2ZW4gY3Jhc2hlcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozOC45OTA3MjgzMDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBzZXJpYWwgZmxhc2hcXFxcblxcXCIpO1xcbiAzNDE6XFx0XFx0fVxcbiAzNDI6XFx0I2VuZGlmXFxuIDM0MzpcXHRcXG4gMzQ0OlxcdCNpZmRlZiBDT05GSUdfQkNNQV9ORkxBU0hcXG4gMzQ1OlxcdFxcdGlmIChidXMtXFx1MDAzZWRydl9jYy5uZmxhc2gucHJlc2VudCkge1xcbiAzNDY6XFx0XFx0XFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZiY21hX25mbGFzaF9kZXYpO1xcbiAzNDc6XFx0XFx0XFx0aWYgKGVycilcXG4gMzQ4OlxcdFxcdFxcdFxcdGJjbWFfZXJyKGJ1cywgXFxcIkVycm9yIHJlZ2lzdGVyaW5nIE5BTkQgZmxhc2hcXFxcblxcXCIpO1xcbiAzNDk6XFx0XFx0fVxcbiAzNTA6XFx0I2VuZGlmXFxuIDM1MTpcXHRcXHRlcnIgPSBiY21hX2dwaW9faW5pdChcXHUwMDI2YnVzLVxcdTAwM2VkcnZfY2MpO1xcbiAzNTI6XFx0XFx0aWYgKGVyciA9PSAtRU5PVFNVUFApXFxuIDM1MzpcXHRcXHRcXHRiY21hX2RlYnVnKGJ1cywgXFxcIkdQSU8gZHJpdmVyIG5vdCBhY3RpdmF0ZWRcXFxcblxcXCIpO1xcbiAzNTQ6XFx0XFx0ZWxzZSBpZiAoZXJyKSB7XFxuIDM1NTpcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBHUElPIGRyaXZlcjogJWlcXFxcblxcXCIsIGVycik7XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzNTc6XFx0XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRpZiAoYnVzLVxcdTAwM2Vob3N0dHlwZSA9PSBCQ01BX0hPU1RUWVBFX1NPQykge1xcbiAzNjA6XFx0XFx0XFx0ZXJyID0gYmNtYV9jaGlwY29fd2F0Y2hkb2dfcmVnaXN0ZXIoXFx1MDAyNmJ1cy1cXHUwMDNlZHJ2X2NjKTtcXG4gMzYxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDM2MjpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyB3YXRjaGRvZyBkcml2ZXJcXFxcblxcXCIpO1xcbiAzNjM6XFx0XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHRyZXR1cm4gMDtcXG4gMzY2OlxcdH1cXG4gMzY3OlxcdFxcbiAzNjg6XFx0dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuIDM2OTpcXHR7XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsICp0bXA7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb3JlLCB0bXAsIFxcdTAwMjZidXMtXFx1MDAzZWNvcmVzLCBsaXN0KSB7XFxuIDM3MzpcXHRcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWRldl9yZWdpc3RlcmVkKVxcbiAzNzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM3NTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29yZS1cXHUwMDNlbGlzdCk7XFxuIDM3NjpcXHRcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29yZS1cXHUwMDNlZGV2KTtcXG4gMzc3OlxcdFxcdH1cXG4gMzc4OlxcdFxcdGlmIChidXMtXFx1MDAzZWhvc3R0eXBlID09IEJDTUFfSE9TVFRZUEVfU09DKVxcbiAzNzk6XFx0XFx0XFx0cGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnVzLVxcdTAwM2VkcnZfY2Mud2F0Y2hkb2cpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHQvKiBOb3cgbm8gb25lIHVzZXMgaW50ZXJuYWxseS1oYW5kbGVkIGNvcmVzLCB3ZSBjYW4gZnJlZSB0aGVtICovXFxuIDM4MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29yZSwgdG1wLCBcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlcywgbGlzdCkge1xcbiAzODM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvcmUtXFx1MDAzZWxpc3QpO1xcbiAzODQ6XFx0XFx0XFx0cHV0X2RldmljZShcXHUwMDI2Y29yZS1cXHUwMDNlZGV2KTtcXG4gMzg1OlxcdFxcdH1cXG4gMzg2OlxcdH1cXG4gMzg3OlxcdFxcbiAzODg6XFx0aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbiAzODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozOC45OTA4Mjc0OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc4NTAwODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkNNQSBCdXMgUmVnaXN0cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBjaGFuZ2U6IGBiY21hX2J1c19yZWdpc3RlcmAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYC4gSWYgdGhhdCBmYWlscywgYGJjbWFfYnVzX3JlZ2lzdGVyYCB3aWxsIHJldHVybiBhbiBlcnJvciBpdHNlbGYuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgZ29vZC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3cgbGV2ZWwgZHJpdmVycy5cblxuVGhlbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBTcGVjaWZpY2FsbHksIG9uIGFuIGVycm9yIHBhdGgsIHRoZSBjb2RlIG5vdyBjYWxscyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLiBUaGF0J3Mgc21hcnQuIEl0J3MgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHByb3Blcmx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgcHJvYmUuIE1ha2VzIHNlbnNlLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgeW91J3JlIG5vdCBsZWF2aW5nIGFueSBkYW5nbGluZyByZXNvdXJjZXMgYmVoaW5kLiBJbXBvcnRhbnQgZm9yIHN0YWJpbGl0eSBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHBsYXRmb3JtIGlzc3Vlcy5cblxuTm93IEknbSB0aGlua2luZywgaXMgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGV2ZW4gKnJlYWNoYWJsZSo/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dC4gQWgsIHJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBBbHJpZ2h0LiBUaGF0IGNvbmZpcm1zIGl0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgZHJpdmVyIGxpZmVjeWNsZSwgYW5kIHRoZSBwYXRjaCBtYWtlcyBzZW5zZSBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBhbmQgZGV2aWNlIGVudW1lcmF0aW9uIGFyZSBoYW5kbGVkIHNhZmVseSwgd2l0aCBncmFjZWZ1bCBlcnJvciByZWNvdmVyeSBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwLiBHb29kIHN0dWZmLCBnb29kIHN0dWZmLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoaXMgd29ya3Mgb24gdGhlIFNPQy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NDMuMjY5MzMwODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTIxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDItI2lmZGVmIENPTkZJR19PRlxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjYzLVxcdH0sXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0OlxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjUtXFx0LnJlbW92ZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjQzLjMxMjg1NzM3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1Nzk3NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmNtYV9ob3N0X3NvY19kcml2ZXIgUHJvYmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJjbWFfaG9zdF9zb2NfZHJpdmVyYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiBzeXprYWxsZXIsIG91ciBmdXp6ZXIsIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uPyBUaGUgb2J2aW91cyB3YXkgdG8gdHJpZ2dlciBgcHJvYmVgIGlzIGJ5IGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhIG1hdGNoaW5nIGRldmljZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBuYW1lIG9yIG1hdGNoaW5nIHRhYmxlIHRvIHNlZSB3aGF0IGNoYXJhY3RlcmlzdGljcyBpdCdzIGV4cGVjdGluZyBpbiBhIHBsYXRmb3JtIGRldmljZSB0byBjb25zaWRlciBpdHNlbGYgYSBnb29kIGZpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgc3l6a2FsbGVyYCwgdGhlIGRldmljZSwgYW5kIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo0Ny4wMTg2NTgyNzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iY21hL2hvc3Rfc29jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbiAyNTE6XFx0fVxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hX2hvc3Rfc29jX29mX21hdGNoW10gPSB7XFxuIDI1NDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sYnVzLWF4aVxcXCIsIH0sXFxuIDI1NTpcXHRcXHR7fSxcXG4gMjU2OlxcdH07XFxuIDI1NzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21hX2hvc3Rfc29jX29mX21hdGNoKTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtYV9ob3N0X3NvY19kcml2ZXIgPSB7XFxuIDI2MDpcXHRcXHQuZHJpdmVyID0ge1xcbiAyNjE6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYmNtYS1ob3N0LXNvY1xcXCIsXFxuIDI2MjpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBiY21hX2hvc3Rfc29jX29mX21hdGNoLFxcbiAyNjM6XFx0XFx0fSxcXG4gMjY0OlxcdFxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG4gMjY1OlxcdFxcdC5yZW1vdmVcXHRcXHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxcbiAyNjY6XFx0fTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX3JlZ2lzdGVyX2RyaXZlcih2b2lkKVxcbiAyNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo0Ny4wMTg3MjU2MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5Mzg0MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTeXprYWxsZXIgRGV2aWNlIENyZWF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkhleSwgZG9lc24ndCBpdCBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWA/XCIgTm9wZSwgdGhhdCdzIGEgZGVhZCBlbmQuIFN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhICpnZW5lcmljKiBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRvciBiYWtlZCBpbi4gSSBzdGFydGVkIHdvbmRlcmluZyBpZiBtYXliZSBpdCBsZXZlcmFnZXMgZGV2aWNlIHRyZWUgb3ZlcmxheXMgd2hlbiBpdCBoYXMgdGhlIGNhcGFiaWxpdHksIGJ1dCBnZW5lcmFsbHksIHRoYXQncyBub3QgdGhlIGNhc2UuIFxuXG5UaGVuIEkgd2FzIGxpa2UsIHdhaXQgYSBtaW51dGUsIGRvZXNuJ3QgaXQgaGF2ZSBzb21ldGhpbmcgd2l0aCBgc3l6X2dlbmV0bGlua2A/IEJ1dCBubywgdGhhdCdzIE5ldGxpbmstc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHN5el91c2JfY29ubmVjdGA/IEFoLCB0aGF0J3Mgb2J2aW91c2x5IGp1c3QgVVNCLlxuXG5Ib2xkIG9uLi4uIGNhbiBJIHJlYWNoIGBiY21hX2J1c19yZWdpc3RlcmAgc29tZWhvdyB0aHJvdWdoIFBDST8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgYXZlbnVlLiBUaGlzIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjUxLjUxMjU3MDE4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNDg4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmg9Mjg9dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaDoyOTppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaC0zMC12b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MTYwPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjIyLVxcdC8qIFJlZ2lzdGVyICovXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjIzOlxcdGVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjI0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0yMDM9c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMjktXFx0LyogUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMzA6XFx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMzEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9MzY4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy0zODctXFxuZHJpdmVycy9iY21hL21haW4uYzozODg6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg5LXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9NjM4PXN0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy02NDctXFxuZHJpdmVycy9iY21hL21haW4uYzo2NDg6c3RhdGljIHVuc2lnbmVkIGludCBiY21hX2J1c19yZWdpc3RlcmVkO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ5LVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz02NTU9c3RhdGljIGludCBfX2luaXQgYmNtYV9pbml0X2J1c19yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy02NTgtXFxuZHJpdmVycy9iY21hL21haW4uYzo2NTk6XFx0aWYgKGJjbWFfYnVzX3JlZ2lzdGVyZWQpXFxuZHJpdmVycy9iY21hL21haW4uYy02NjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2My1cXHRpZiAoIWVycilcXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY2NDpcXHRcXHRiY21hX2J1c19yZWdpc3RlcmVkID0gMTtcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NTEuNTU2NjI0MDk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjU1NTY2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gQkNNQSBhbmQgUENJIERldmljZSBGdXp6aW5nKipcblxuT2theSwgc28gYGJjbWFfYnVzX3JlZ2lzdGVyYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGJjbWFfaG9zdF9wY2lfcHJvYmVgLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBCcm9hZGNvbSBQQ0kgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGdvZXMgdG8gZnV6emluZyB0aGVzZSBQQ0kgZGV2aWNlcy4gIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgUENJIGNhcGFiaWxpdGllcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByaWdodCBhcHByb2FjaC4gSSByZWNhbGwgc2VlaW5nIFBDSSBmdXp6aW5nIG1lbnRpb25lZCwgbWF5YmUgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi4gXG5cbkhvbGQgb24sIEkgd2FzIHRoaW5raW5nIG9mIHNwZWNpZmljIHN5c3RlbSBjYWxscyB0byBhZGQgZGV2aWNlcywgYnV0IEkgcmVtZW1iZXIgaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuIEFjdHVhbGx5LCBJIHdhcyBnZXR0aW5nIHRoYXQgY29uZnVzZWQgd2l0aCBvdGhlciBkZXZpY2UgdHlwZXMgbGlrZSBVU0IuIFN5emthbGxlciBzdXBwb3J0cyBQQ0kgZnV6emluZyB0aHJvdWdoIHRoZSB2ZmlvIGludGVyZmFjZS4gTm8sIHRoYXQncyBub3QgcmlnaHQuIExldCBtZSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb247IGlzbid0IHRoZXJlIGEgYHN5cy9saW51eC9kZXZfcGNpLnR4dGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgdGhpcywgSSdtIHNlY29uZC1ndWVzc2luZyBteXNlbGYuXG5cblJpZ2h0LCB0aGUgcHJvbXB0IGlzIGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiAgVGhhdCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IHRoaW5ncyB0aGF0IGxpa2VseSBuZWVkICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyByZWFkaWx5IGVtdWxhdGVkLiBBaCwgYGJjbWFfaG9zdF9wY2lfcHJvYmVgIGlzIGZvciBCcm9hZGNvbSBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIGFuZCAqdGhhdCogaXMgdGhlIGtleSBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiBgYmNtYV9ob3N0X3BjaV9wcm9iZWAgdG8gdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgZGV2aWNlcyB3ZSdyZSBkZWFsaW5nIHdpdGguIE9rYXksIGNoZWNraW5nIHRoZSBQQ0kgSURzIGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NTguMjIyMTgyODUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcxNTgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX3BjaV9icmlkZ2VfdGJsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmNtYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MjczPXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhiY21hX3BtX29wcywgYmNtYV9ob3N0X3BjaV9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjgyLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmNtYV9wY2lfYnJpZGdlX3RibFtdID0ge1xcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTI4NC1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwNTc2KSB9LFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMzA1LX07XFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzA2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0zMDctXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY21hX3BjaV9icmlkZ2VfZHJpdmVyID0ge1xcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwOS1cXHQubmFtZSA9IFxcXCJiY21hLXBjaS1icmlkZ2VcXFwiLFxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jOjMxMDpcXHQuaWRfdGFibGUgPSBiY21hX3BjaV9icmlkZ2VfdGJsLFxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMxMS1cXHQucHJvYmUgPSBiY21hX2hvc3RfcGNpX3Byb2JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo1OC4yNjQ5MDQwNTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3NTE0NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQQ0kgRGV2aWNlKipcblxuT2theSwgc28gdGhlc2UgYXJlIGRlZmluaXRlbHkgQnJvYWRjb20gUENJIGRldmljZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgcHJvcGVybHkgZW11bGF0ZXMgdGhlbS4gSSBrbm93IFFFTVUgaGFzIHNvbWUgQnJvYWRjb20gbmV0d29yayBjYXJkIHN1cHBvcnQsIGJ1dCBJJ20gbm90IHN1cmUgYWJvdXQgdGhlc2Ugc3BlY2lmaWMgZGV2aWNlcy4gVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBhcyBpdCBhbGxvd3MgdGhlIGluamVjdGlvbiBvZiBhcmJpdHJhcnkgUENJIGRldmljZXMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyBQQ0kgZnV6emluZywgd2hpY2ggbWlnaHQgcHJvdmlkZSBhIGNsdWUgb24gaG93IHRvIGFwcHJvYWNoIHRoaXMuXG5cbldhaXQsIG5vdyBJIHJlcmVhZCB0aGUgcHJvbXB0LiBJdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgY29udGFpbnMgZHJpdmVycyBzdWNoIGFzIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIE15IHRob3VnaHRzIHJhY2UgYWhlYWQ6IGlzIGBCQ01BYCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqYWxzbyogcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3csIGBCQ01BYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQncyB0aGUgQnJvYWRjb20gQU1CQSBidXMgdXNlZCBpbiBCcm9hZGNvbSB3aXJlbGVzcyBjYXJkcyBsaWtlIGBiNDNgIGFuZCBgYnJjbXNtYWNgLCBhbmQgaW4gU29Dcy4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0gaW4gYW4gZW11bGF0ZWQgZW52aXJvbm1lbnQuXG5cbkNhbiBzeXprYWxsZXIgZXZlbiByZWFjaCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgb3IgYGJjbWFfaG9zdF9wY2lfcHJvYmVgPyBIb2xkIG9uLi4uIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlzdGVkIGFzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIFdhaXQgYSBtaW51dGUsIHRoYXQgbWVhbnMgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIGdlbmVyYXRlZCBhIHBhdGNoISBUaGF0J3MgYSBodWdlIGNsdWUhIElmIGl0IGZvdW5kIGEgYnVnLCBpdCBoYXMgdG8gYmUgcmVhY2hhYmxlIHdpdGhpbiBpdHMgZW52aXJvbm1lbnQuIE5vdyBJJ20gZm9jdXNlZDogaG93IGRpZCBzeXprYWxsZXIgcmVhY2ggYGJjbWFfaG9zdF9zb2NfcHJvYmVgP1xuXG5MZXQgbWUgdGhpbmsuIEknbGwgc3RhcnQgY2hlY2tpbmcgZm9yIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbiB0byB0cmlnZ2VyIHRoZSBwcm9iZSwgb3IgaWYgaXQncyBiZWluZyB0cmlnZ2VyZWQgdmlhIGFub3RoZXIgc3Vic3lzdGVtLiBPa2F5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9jcmVhdGVgPyBObywgc3l6a2FsbGVyIGRvZXNuJ3QgYXBwZWFyIHRvIGxldmVyYWdlIHRoYXQuXG5cbldhaXQuLi4gY291bGQgYGJjbWFgIGJlIGEgdmlydHVhbCBkZXZpY2Ugb3IgbWF5YmUgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggYSBuZXRsaW5rIGludGVyZmFjZT8gVGhhdCdzIGEgcG9zc2liaWxpdHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiBob3cgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIGhhbmRsZWQuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDowNi45NDAwNTExNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjc2MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDItI2lmZGVmIENPTkZJR19PRlxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjYzLVxcdH0sXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0OlxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjUtXFx0LnJlbW92ZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjA2Ljk4MzczMTc4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc1MzU2MjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgQkNNQSBFcnJvciBQYXRoOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXMgY29kZT9cIiBJIGtub3cgaXQgY2FuIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLCBtYXliZSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cz8gT3IgcGVyaGFwcyBpdCB1c2VzIHNvbWUga2luZCBvZiBwc2V1ZG8tc3lzY2FsbC4gTm8sIG5vIGBzeXpfZ2VuZXRsaW5rYCwgdGhhdCdzIG5vdCBpdC5cblxuSSdkIGxpa2UgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGNhbiBkaXJlY3RseSByZWFjaCB0aGUgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGZ1bmN0aW9uIGJ5IGxvb2tpbmcgaXQgdXAgaW4gdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBjYXBhYmlsaXR5IGhlcmUuIEhvd2V2ZXIsIEkgY2FuIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3l6a2FsbGVyIGZ1bmN0aW9uIHRoYXQgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHJlY2FsbCB0aGF0IHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZXMgdmlhIGBzeXNmc2AsIGBjb25maWdmc2AsIG9yIGBuZXRsaW5rYC4gQnV0LCB0aGVyZSdzIGBidHNkaW9gIG9yIGBtYWM4MDIxMV9od3NpbWAsIHRvby5cblxuVGhlbiBJIHNhdyB0aGUgYXV0aG9yOiBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBXYWl0IGEgbWludXRlLi4uIHRoYXQgKm1lYW5zKiBzeXprYWxsZXIgYWN0dWFsbHkgaGl0IHRoaXMgY29kZSFcblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGVycm9yIHBhdGhzIGluIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBhbmQgYGJjbWFfYnVzX3JlZ2lzdGVyYC4gU3BlY2lmaWNhbGx5LCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscywgdGhlcmUncyBhIG5ldyBlcnJvciByZXR1cm4uIFRoZSBmYWlsdXJlIHByb3BhZ2F0ZXMgdXAgdG8gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgYW5kIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBub3cgaGFuZGxlcyB0aGlzIGVycm9yLCB1bnJlZ2lzdGVyaW5nIGNvcmVzIGFuZCB1bm1hcHBpbmcgTU1JTy4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiB1bmNvdmVyIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgb2NjdXIgd2hlbiBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cbk5vdywgd2FpdCwgdGhlIHByb21wdCBzYXlzIG5vdCB0byByZXR1cm4gXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGUgcGF0Y2ggY29uY2VybnMgdW5yZWFjaGFibGUgY29kZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuXG5cblNvLCBpcyBCQ01BIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VPyBJIHdhcyB0aGlua2luZyBhYm91dCBzeXprYWxsZXIncyBQQ0kgY2FwYWJpbGl0aWVzLiBObywgbm90IHRoYXQuIEkga25vdyBzeXprYWxsZXIgaGFzIHZpcnR1YWwgUENJIGZ1enppbmcgc3VwcG9ydCB2aWEgYSBtb2R1bGUgb3IgdXNlcmZhdWx0ZmQuIEJ1dCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciBwcm9iZS4gSG93IHdvdWxkIHN5emthbGxlciByZWFjaCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmb3Igc29tZXRoaW5nIGxpa2UgXCJicmNtLGJ1cy1heGlcIj9cblxuQ291bGQgaXQgYmUgRGV2aWNlIFRyZWUgb3ZlcmxheSBpbmplY3Rpb24/IEFoYSEgU3l6a2FsbGVyIGhhcyBgc3l6X21vdW50X2ltYWdlYCwgbm8sIG5vLCBub3QgdGhhdC4gQnV0IHdhaXQsIHN5emthbGxlciBjYW4gbG9hZCBkZXZpY2UgdHJlZSBvdmVybGF5cyB0aHJvdWdoIGBzeXNmc2AhIFNwZWNpZmljYWxseSwgYC9zeXMva2VybmVsL2NvbmZpZy9kZXZpY2UtdHJlZS9vdmVybGF5cy9gLiBJIHJlbWVtYmVyIGBDT05GSUdfT0ZfT1ZFUkxBWWAgaXMgYSB0aGluZy5cblxuU28sIHN5emthbGxlciAqY2FuKiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyBieSBsb2FkaW5nIERUIG92ZXJsYXlzISBUaGlzIG1lYW5zIGFueSBwbGF0Zm9ybSBkcml2ZXIgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgIGlzIHJlYWNoYWJsZSEgVGhlIGBiY21hX2hvc3Rfc29jX2RyaXZlcmAgaGFzIGBvZl9tYXRjaF90YWJsZSA9IGJjbWFfaG9zdF9zb2Nfb2ZfbWF0Y2hgLiBBbmQgdGhhdCBgb2ZfbWF0Y2hfdGFibGVgIGhhcyBgLmNvbXBhdGlibGUgPSBcImJyY20sYnVzLWF4aVwiYC4gQnJpbGxpYW50ISBTeXprYWxsZXIgY2FuIGxvYWQgYSBEVCBvdmVybGF5IHdpdGggdGhhdCBjb21wYXRpYmxlIHN0cmluZywgYW5kIHRyaWdnZXIgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLlxuXG5ZZXMsIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLlxuXG5MZXQncyBtb3ZlIG9uIGFuZCBmaWd1cmUgb3V0IHdoYXQgY29uZmlncyBhcmUgbmVlZGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjI0LjczNzI5NzA1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0OTY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJDTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyOmNvbmZpZyBCQ01BX1BPU1NJQkxFXFxuZHJpdmVycy9iY21hL0tjb25maWctMy1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjc6bWVudWNvbmZpZyBCQ01BXFxuZHJpdmVycy9iY21hL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gc3BlY2lmaWMgQU1CQVxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnPTE0PWlmIEJDTUFcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE2LSMgU3VwcG9ydCBmb3IgQmxvY2stSS9PLiBTRUxFQ1QgdGhpcyBmcm9tIHRoZSBkcml2ZXIgdGhhdCBuZWVkcyBpdC5cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxNzpjb25maWcgQkNNQV9CTE9DS0lPXFxuZHJpdmVycy9iY21hL0tjb25maWctMTgtXFx0Ym9vbFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE5LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjIwOmNvbmZpZyBCQ01BX0hPU1RfUENJX1BPU1NJQkxFXFxuZHJpdmVycy9iY21hL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9iY21hL0tjb25maWctMjQtXFxuZHJpdmVycy9iY21hL0tjb25maWc6MjU6Y29uZmlnIEJDTUFfSE9TVF9QQ0lcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjMxOmNvbmZpZyBCQ01BX0hPU1RfU09DXFxuZHJpdmVycy9iY21hL0tjb25maWctMzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgQkNNQSBpbiBhIFNvQ1xcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjQxOmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjU3OmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lfSE9TVE1PREVcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy01OC1cXHRib29sIFxcXCJEcml2ZXIgZm9yIFBDSSBjb3JlIHdvcmtpbmcgaW4gaG9zdG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02Mi1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo2Mzpjb25maWcgQkNNQV9EUklWRVJfTUlQU1xcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTY0LVxcdGJvb2wgXFxcIkJDTUEgQnJvYWRjb20gTUlQUyBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTcxLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjcyOmNvbmZpZyBCQ01BX1BGTEFTSFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTczLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjc3OmNvbmZpZyBCQ01BX1NGTEFTSFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkNoaXBDb21tb24tYXR0YWNoZWQgc2VyaWFsIGZsYXNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy04OC1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo4OTpjb25maWcgQkNNQV9ORkxBU0hcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05MC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05My1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo5NDpjb25maWcgQkNNQV9EUklWRVJfR01BQ19DTU5cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05NS1cXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIEdCSVQgTUFDIENPTU1PTiBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMDI6Y29uZmlnIEJDTUFfRFJJVkVSX0dQSU9cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMDMtXFx0Ym9vbCBcXFwiQkNNQSBHUElPIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTExMC1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMTE6Y29uZmlnIEJDTUFfREVCVUdcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMTItXFx0Ym9vbCBcXFwiQkNNQSBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjI0Ljc4MDc5NzU5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk0MTIzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIG9uIEJDTUEgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB3b3JraW5nIHdpdGggYEJDTUFgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIGBCQ01BX0hPU1RfU09DYC4gU2VlbXMgbGlrZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgYEJDTUFfSE9TVF9TT0NgIHBhcnQsIGFzIGl0cyBiZWhhdmlvciB3aWxsIGxpa2VseSBkaWN0YXRlIGhvdyBgQkNNQWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIHRoaXMgaG9zdCBzaWRlIFNPQyBlbGVtZW50IHJlcXVpcmVzIG9yIHJlbGllcyB1cG9uLCBhcyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mbHVlbmNlIG15IGltcGxlbWVudGF0aW9uIHBsYW4gZm9yIHRoZSBicm9hZGVyIGBCQ01BYCBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb25zaWRlciBhbnkgYXJjaGl0ZWN0dXJhbCBpbXBhY3QgdGhhdCB0aGVzZSBjb25zdHJhaW50cyBoYXZlIG9uIHRoZSBgQkNNQWAgbW9kdWxlIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6MzIuNjc0OTIzMDIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmNtYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdGNvbmZpZyBCQ01BX0hPU1RfUENJXFxuICAyNjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1c1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxcbiAgMjg6XFx0XFx0c2VsZWN0IEJDTUFfRFJJVkVSX1BDSVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCQ01BX0hPU1RfU09DXFxuICAzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIGluIGEgU29DXFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgSG9zdCBpbnRlcmZhY2UgZm9yIGEgQnJvYWRjb20gQUlYIGJ1cyBkaXJlY3RseSBtYXBwZWQgaW50b1xcbiAgMzY6XFx0XFx0ICB0aGUgbWVtb3J5LiBUaGlzIG9ubHkgd29ya3Mgd2l0aCB0aGUgQnJvYWRjb20gU29DcyBmcm9tIHRoZVxcbiAgMzc6XFx0XFx0ICBCQ000N1hYIGxpbmUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQkNNQV9EUklWRVJfUENJXFxuICA0MjpcXHRcXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclxcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6MzIuNjc0OTg2MDQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA4ODYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgQkNNQV9IT1NUX1NPQ2AgaXMgY2xlYXJseSBidWlsdCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGhhdmUgYEhBU19JT01FTWAgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHR5cGljYWxseSwgeW91IG5lZWQgZGlyZWN0IEkvTyBtZW1vcnkgYWNjZXNzIGZvciB0aGF0IGtpbmQgb2YgbG93LWxldmVsIFNPQyBpbnRlcmFjdGlvbi4gTm93LCB0aGUgYEJDTUFgIGRyaXZlciBpdHNlbGYgYWxzbyBoaW5nZXMgb24gYEhBU19JT01FTWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZXBlbmRlbmN5LiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgc2hhcmVkLCBmdW5kYW1lbnRhbCByZXNvdXJjZSBiZXR3ZWVuIHRob3NlIHR3byBtb2R1bGVzIHRoYXQgaGFzIHRoZSBtZW1vcnkgbWFwcGluZyByZXF1aXJlbWVudCwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYEJDTUFgIGFsc28gbmVlZHMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCQ01BYCB0byBlbnN1cmUgbm90aGluZyBpcyBtaXNzaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDozOC41NDU4NzQ4MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iY21hL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgQkNNQV9QT1NTSUJMRVxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXG4gICA3OlxcdG1lbnVjb25maWcgQkNNQVxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIHNwZWNpZmljIEFNQkFcXFwiXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgQnVzIGRyaXZlciBmb3IgQnJvYWRjb20gc3BlY2lmaWMgQWR2YW5jZWQgTWljcm9jb250cm9sbGVyIEJ1c1xcbiAgMTI6XFx0XFx0ICBBcmNoaXRlY3R1cmUuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIEJDTUFcXG4gIDE1OlxcdFxcbiAgMTY6XFx0IyBTdXBwb3J0IGZvciBCbG9jay1JL08uIFNFTEVDVCB0aGlzIGZyb20gdGhlIGRyaXZlciB0aGF0IG5lZWRzIGl0LlxcbiAgMTc6XFx0Y29uZmlnIEJDTUFfQkxPQ0tJT1xcbiAgMTg6XFx0XFx0Ym9vbFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDozOC41NDU5MzQ0OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQxMTQ0NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCQ01BIE1vZHVsZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdXNpbmcgYm90aCBgQkNNQWAgYW5kIGBCQ01BX0hPU1RfU09DYCBzaG91bGQgY292ZXIgdGhlIHByaW1hcnkgbmVlZHMuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24sIEknbGwgYWxzbyBpbmNsdWRlIGBCQ01BX0hPU1RfUENJYC4gSXQncyBhbHdheXMgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgYmNtYV9ob3N0X3NvY19wcm9iZWAgYW5kIGBiY21hX2J1c19yZWdpc3RlcmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmZhY2VzLiBBbmQsIHRvIGJlIGV4dHJhIHRob3JvdWdoLCBsZXQgbWUgYWxzbyBub3RlIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGFuZCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCDigJMgdGhlc2UgbG9vayBjcml0aWNhbCBmb3Igb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEJDTUEgZnJhbWV3b3JrLlxuXG5JJ3ZlIGp1c3QgY29uZmlybWVkIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzLCBhcyBleHBlY3RlZCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLiBXYWl0LCBob2xkIG9uLi4uIGBiY21hX2J1c19yZWdpc3RlcmAgaXMgKmV4cG9ydGVkKj8gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIFRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9ucyBvciBtb2R1bGUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDMuNzg3MDgyMzAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzMTk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDMuODMyNzI1MjE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODY5MTk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKldhaXQsIFRoYXQgQVBJIElzbid0IEV4cG9zZWQ/KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJDTUEgYnVzIGRyaXZlciwgYW5kIEkgaGl0IGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHVzZSBgYmNtYV9idXNfcmVnaXN0ZXJgIHRvIGJyaW5nIHRoZSBidXMgaW50byBhIHVzYWJsZSBzdGF0ZS4gQnV0IEkganVzdCBjaGVja2VkIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBpdCdzIG5vdCBleHBvcnRlZC4gKlRoYXQncyogbm90IGdvb2QuIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIEFQSSBjYWxsIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZywgb3IgaWYgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgdXBzdHJlYW0gZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlJ3MgYSBkaWZmZXJlbnQgbWVhbnMgb2YgaW5pdGlhbGl6YXRpb24gdGhhdCdzIGV4cGVjdGVkLiBJcyBpdCB3cmFwcGVkIGluc2lkZSBhbm90aGVyIG1vZHVsZSBJIGhhdmUgbWlzc2VkPyBUaGlzIGlzIGdvaW5nIHRvIHNsb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBidXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGFyZSBkb25lIGNvcnJlY3RseS4gVGltZSB0byBncmFiIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgdGhlIGNhbGwgc3RhY2ssIGFuZCBzZWUgd2hhdCB0aGUgaW50ZW5kZWQgZGVzaWduIHBhdHRlcm4gaXMuIEkgYW0gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBCQ01BIGFyY2hpdGVjdHVyZSwgYnV0IHRoZXNlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgY2FuIGJlIHRyaWNreS4gVGhpcyBsYWNrIG9mIGEgZGlyZWN0IEFQSSBmdW5jdGlvbiBpcyB1bmV4cGVjdGVkLCBhbmQgbWVhbnMgSSBuZWVkIHRvIHJlLWV2YWx1YXRlIG15IGFwcHJvYWNoLiBJIG5lZWQgdG8ga25vdyB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDguNzE5NjQ2ODI5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JjbWEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaD0yOD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oOjI5OmludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oLTMwLXZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYz0xNjA9c3RhdGljIGludCBiY21hX2hvc3RfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjItXFx0LyogUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYzoyMjM6XFx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jPTIwMz1zdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIyOS1cXHQvKiBSZWdpc3RlciAqL1xcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIzMDpcXHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIzMS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz0zNjg9dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTM4Ny1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjM4ODppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuZHJpdmVycy9iY21hL21haW4uYy0zODkte1xcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz02Mzg9c3RhdGljIGludCBiY21hX2RldmljZV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY0Ny1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY0ODpzdGF0aWMgdW5zaWduZWQgaW50IGJjbWFfYnVzX3JlZ2lzdGVyZWQ7XFxuZHJpdmVycy9iY21hL21haW4uYy02NDktXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTY1NT1zdGF0aWMgaW50IF9faW5pdCBiY21hX2luaXRfYnVzX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY1OC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY1OTpcXHRpZiAoYmNtYV9idXNfcmVnaXN0ZXJlZClcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjYzLVxcdGlmICghZXJyKVxcbmRyaXZlcnMvYmNtYS9tYWluLmM6NjY0OlxcdFxcdGJjbWFfYnVzX3JlZ2lzdGVyZWQgPSAxO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDo0OC43NjM2OTIxMDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MzgxNzc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJDTUEgTW9kdWxlJ3MgUmVhY2hhYmlsaXR5IGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGVycm9yIHBhdGggaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHB1YmxpY2x5IHZpc2libGUgZW50cnkgcG9pbnRzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgdGhlIHRhcmdldCBpc24ndCBleHBvcnRlZCwgaXQncyBpbnRlcm5hbCB0byB0aGUgYGJjbWFgIG1vZHVsZS4gSG93ZXZlciwgYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2AgaW1tZWRpYXRlbHkgc3RhbmQgb3V0IGJlY2F1c2UgdGhleSBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCByZWFjaGFiaWxpdHkuIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBzdGF0aWMsIHdoaWNoIEknZCB1c3VhbGx5IGRpc21pc3MsIGJ1dCB3YWl04oCmXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgICppcyogYWN0dWFsbHkgcmVhY2hhYmxlLiBBaCwgcmlnaHQuIFBsYXRmb3JtIGRldmljZXMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIERUIG92ZXJsYXlzLCBvciBvdGhlciBpbmplY3Rpb24gbWVjaGFuaXNtcywgbWFrZSB0aGVzZSBwcm9iZXMgdmlhYmxlIHBhdGhzLiBBbmQgYGJjbWFfaG9zdF9wY2lfcHJvYmVgLCBiZWluZyBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgaXMgZXF1YWxseSByZWFjaGFibGUgdmlhIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciB3aGljaCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLiBTbywgYm90aCBhcmUgdmFsaWQgdGFyZ2V0cy5cblxuTm93LCBsZXQncyBlbnVtZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgYmFzZXMuIEkgc2VlIGBDT05GSUdfQkNNQWAsIGBDT05GSUdfQkNNQV9IT1NUX1NPQ2AsIGFuZCBgQ09ORklHX0JDTUFfSE9TVF9QQ0lgIGFyZSByZWxldmFudCBoZXJlLlxuXG5SZXZpZXdpbmcgb3RoZXIgZnVuY3Rpb25zLCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0LCBidXQgYGJjbWFfYnVzX3JlZ2lzdGVyYCBpcyBub24tc3RhdGljIGFuZCAqY3J1Y2lhbGx5KiwgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2AgaXMgYWxzbyBub24tc3RhdGljLlxuXG5UaGUgcGF0Y2gncyBzdGF0ZWQgcHVycG9zZSBpcyB0byBjb3JyZWN0IGVycm9yIGhhbmRsaW5nIGluIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgY2xlYW51cCBpbiB0aGUgZXZlbnQgdGhhdCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0aW5nIHRvIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhlcmVmb3JlIGl0IHNob3VsZCBiZSByZWFjaGVkIHZpYSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuQmFzZWQgb24gdGhpcywgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgYmNtYV9idXNfcmVnaXN0ZXJgXG4qICAgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2BcbiogICBgYmNtYV9ob3N0X3NvY19wcm9iZWAgKERlc3BpdGUgYmVpbmcgc3RhdGljLCBpdCdzIGEgcHJvYmUgZnVuY3Rpb24gdXNlZCBieSBhIGRyaXZlciBhbmQgaXMgbm90IGxpa2VseSB0byBiZSBpbmxpbmVkIGFuZCAqaXMqIGEga2V5IGVudHJ5IHBvaW50KVxuKiAgIGBiY21hX2hvc3RfcGNpX3Byb2JlYCAoU2FtZSByZWFzb25pbmcgYXMgYWJvdmUpXG5cbkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcmVtYWluOlxuXG4qICAgYEJDTUFgXG4qICAgYEJDTUFfSE9TVF9TT0NgXG4qICAgYEJDTUFfSE9TVF9QQ0lgXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIHJldmlldyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYwLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NTowOS42MDE4NzIyOTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjExNjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkNNQVwiLFxuICAgIFwiQkNNQV9IT1NUX1NPQ1wiLFxuICAgIFwiQkNNQV9IT1NUX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJjbWFfYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJiY21hX3VucmVnaXN0ZXJfY29yZXNcIixcbiAgICBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgICBcImJjbWFfaG9zdF9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQ01BXCIsXG4gICAgXCJCQ01BX0hPU1RfU09DXCIsXG4gICAgXCJCQ01BX0hPU1RfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgICBcImJjbWFfdW5yZWdpc3Rlcl9jb3Jlc1wiLFxuICAgIFwiYmNtYV9ob3N0X3NvY19wcm9iZVwiLFxuICAgIFwiYmNtYV9ob3N0X3BjaV9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NTowOS42ODM5OTU5MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIyMDYxMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MDkuNjg0NDk4MDI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NDIxNTU0Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX3VubWFwX21taW86XG4rXHRiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTtcbiBcdGlvdW5tYXAoYnVzLVx1MDAzZW1taW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL21haW4uYyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2JjbWEvbWFpbi5jXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbitcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwiQnVzIHJlZ2lzdGVyZWRcXG5cIik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjA5LjY4NDQ5OTIwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI1NTE2OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGNoYW5nZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIEJDTUEgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9iY21hL2hvc3Rfc29jLmNgIGFuZCBgZHJpdmVycy9iY21hL21haW4uY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBjb3JlIEJDTUEgKEJyb2FkY29tIENvbW1vbiBBcmNoaXRlY3R1cmUpIGJ1cyBkcml2ZXIgY29tcG9uZW50cy5cblxuSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpdCdzIGFkZGluZyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7YCB0byB0aGUgYGVycl91bm1hcF9tbWlvYCBlcnJvciBwYXRoLiBUaGF0IG1ha2VzIHNlbnNlLiBJZiB0aGVyZSdzIGEgbWVtb3J5IG1hcHBpbmcgZXJyb3IgZHVyaW5nIHByb2JlLCB3ZSBuZWVkIHRvIGNsZWFuIHVwIGFueSBwYXJ0aWFsbHkgcmVnaXN0ZXJlZCBjb3Jlcy4gSXQncyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHByZXZlbnRpbmcgZGFuZ2xpbmcgcmVmZXJlbmNlcywgYW5kIGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suXG5cbk5vdywgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgdGhlcmUncyBhIGNoZWNrIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKWAsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBpZiBpdCdzIGFuIGVycm9yLiBPa2F5LCBzbyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmllcyB0byByZWdpc3RlciB0aGUgZGV2aWNlcyBvbiB0aGUgYnVzLCBhbmQgYW55IGVycm9yIGluIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3BhZ2F0ZWQgYmFjayB1cCB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYGJjbWFfYnVzX3JlZ2lzdGVyYC5cblxuV2FpdCBhIHNlY29uZCwgaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgcmV0dXJuaW5nIGFuIGludGVnZXI/IEkgbmVlZCB0byBjb25maXJtIHRoZSB0eXBlIGl0IHJldHVybnMuIFRoYXQncyB1bnVzdWFsIHRvIGhhdmUgYW4gYGludGAgZm9yIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9iY21hL21haW4uY2AgcmlnaHQgYXdheSwgdG8gZ2V0IHRoZSByZXR1cm4gdHlwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjE0LjcxMDAxOTUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2MzEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX3JlZ2lzdGVyX2RldmljZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jPTI3OD1zdGF0aWMgdm9pZCBiY21hX3JlZ2lzdGVyX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSlcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM6MjkxOnN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkyLXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9Mzg4PWludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVxcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXFxuZHJpdmVycy9iY21hL21haW4uYzo0ODA6XFx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XFxuZHJpdmVycy9iY21hL21haW4uYy00ODEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MTQuNzU4Mjg2ODg1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQ2ODMwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCQ01BIEJ1cyBSZWdpc3RyYXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBFc3NlbnRpYWxseSwgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZmFpbHMgd2l0aGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZSBlcnJvciBpcyBwcm9wZXJseSByZXR1cm5lZCBub3cuIFRoYXQncyBnb29kLiBJbiBgYmNtYV9ob3N0X3NvY19wcm9iZWAsIGlmIGBiY21hX2J1c19yZWdpc3RlcmAgZmFpbHMsIGl0IHVzZWQgdG8ganVtcCB0byBgZXJyX3VubWFwX21taW9gLCBhbmQgbm93IGl0IGFsc28gY29ycmVjdGx5IGNhbGxzIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKWAuXG5cblRoaXMgaXMgY2xhc3NpYyByZXNvdXJjZSBsZWFrIHByZXZlbnRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBvciBzb21ldGhpbmcgc2ltaWxhciBpbiB0aG9zZSBlcnJvciBwYXRocy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgcG90ZW50aWFsIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGJ1dCB0aGlzIGxvb2tzIHByZXR0eSBjbGVhbi4gSXQncyBqdXN0IGFib3V0IGNsZWFudXAgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgZ2V0cyB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBJdCdzIGFkZGluZyB0aGF0IGBiY21hX3VucmVnaXN0ZXJfY29yZXNgIGNhbGwgYW5kIGNoZWNraW5nIGl0cyByZXR1cm4gdmFsdWUgd2hpY2ggc2VlbXMgc3RhbmRhcmQgZm9yIHRoZXNlIHR5cGVzIG9mIGZpeGVzLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4IGZvciBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMuXG5cbldlJ3JlIGluIGdvb2Qgc2hhcGUgc2luY2UgS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mg4oCTIHdl4oCZcmUgY292ZXJlZCB0aGVyZS4gQWxzbywgS01TQU4gaGFuZGxlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFueS4gSSBzdGlsbCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLCBidXQgYmFzZWQgb24gYSBxdWljayBzY2FuLCB0aGlzIGFsbCBzZWVtcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NToyMS42MjI5NzIyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MTpcXHRzdGF0aWMgaW50IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4gMjkyOlxcdHtcXG4gMjkzOlxcdFxcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZTtcXG4gMjk0OlxcdFxcdGludCBlcnI7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgXFx1MDAyNmJ1cy1cXHUwMDNlY29yZXMsIGxpc3QpIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdC8qIFdlIHN1cHBvcnQgdGhhdCBjb3JlIG91cnNlbHZlcyAqL1xcbiAzMDA6XFx0XFx0XFx0c3dpdGNoIChjb3JlLVxcdTAwM2VpZC5pZCkge1xcbiAzMDE6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9DSElQQ09NTU9OOlxcbiAzMDI6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfQ0hJUENPTU1PTjpcXG4gMzAzOlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX05TX0NISVBDT01NT05fQjpcXG4gMzA0OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSTpcXG4gMzA1OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSUU6XFxuIDMwNjpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV9QQ0lFMjpcXG4gMzA3OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX01JUFNfNzRLOlxcbiAzMDg6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9NQUNfR0JJVF9DT01NT046XFxuIDMwOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzEwOlxcdFxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0XFx0LyogRWFybHkgY29yZXMgd2VyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgKi9cXG4gMzEzOlxcdFxcdFxcdGlmIChiY21hX2lzX2NvcmVfbmVlZGVkX2Vhcmx5KGNvcmUtXFx1MDAzZWlkLmlkKSlcXG4gMzE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRcXHRucCA9IGNvcmUtXFx1MDAzZWRldi5vZl9ub2RlO1xcbiAzMTc6XFx0XFx0XFx0aWYgKG5wIFxcdTAwMjZcXHUwMDI2ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcXG4gMzE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRcXHQvKiBPbmx5IGZpcnN0IEdNQUMgY29yZSBvbiBCQ000NzA2IGlzIGNvbm5lY3RlZCBhbmQgd29ya2luZyAqL1xcbiAzMjE6XFx0XFx0XFx0aWYgKGNvcmUtXFx1MDAzZWlkLmlkID09IEJDTUFfQ09SRV80NzA2X01BQ19HQklUIFxcdTAwMjZcXHUwMDI2XFxuIDMyMjpcXHRcXHRcXHQgICAgY29yZS1cXHUwMDNlY29yZV91bml0IFxcdTAwM2UgMClcXG4gMzIzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRcXHRiY21hX3JlZ2lzdGVyX2NvcmUoYnVzLCBjb3JlKTtcXG4gMzI2OlxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0I2lmZGVmIENPTkZJR19CQ01BX1BGTEFTSFxcbiAzMjk6XFx0XFx0aWYgKGJ1cy1cXHUwMDNlZHJ2X2NjLnBmbGFzaC5wcmVzZW50KSB7XFxuIDMzMDpcXHRcXHRcXHRlcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNmJjbWFfcGZsYXNoX2Rldik7XFxuIDMzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzMzI6XFx0XFx0XFx0XFx0YmNtYV9lcnIoYnVzLCBcXFwiRXJyb3IgcmVnaXN0ZXJpbmcgcGFyYWxsZWwgZmxhc2hcXFxcblxcXCIpO1xcbiAzMzM6XFx0XFx0fVxcbiAzMzQ6XFx0I2VuZGlmXFxuIDMzNTpcXHRcXG4gMzM2OlxcdCNpZmRlZiBDT05GSUdfQkNNQV9TRkxBU0hcXG4gMzM3OlxcdFxcdGlmIChidXMtXFx1MDAzZWRydl9jYy5zZmxhc2gucHJlc2VudCkge1xcbiAzMzg6XFx0XFx0XFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZiY21hX3NmbGFzaF9kZXYpO1xcbiAzMzk6XFx0XFx0XFx0aWYgKGVycilcXG4gMzQwOlxcdFxcdFxcdFxcdGJjbWFfZXJyKGJ1cywgXFxcIkVycm9yIHJlZ2lzdGVyaW5nIHNlcmlhbCBmbGFzaFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjIxLjYyMzA1NzA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODI5NzM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ3ZlIHJldmlld2VkIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQncyB0aWdodGVuaW5nIHVwIGhvdyBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgZnJvbSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGFuZCBtYWtpbmcgc3VyZSBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCBpbiB0aGUgU29DIHByb2JlIGVycm9yIHBhdGguIFRoaXMgcHJldmVudHMgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgYW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MgYXJlIGxpa2VseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrIGFueXdheS5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyDigJMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGNsZWFudXAg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQgaW4gdGhpcyBjYXNlLiBUaGUgaW1wcm92ZW1lbnRzIHdpbGwgY29udHJpYnV0ZSB0byBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGJ1cyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjMsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MjcuMTA2MDM0NzU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCBlbnN1cmVzIHRoYXQgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcygpYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQsIGFuZCBpbiB0aGUgaG9zdCBTb0MgcHJvYmUgZXJyb3IgcGF0aCwgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcygpYCBpcyBjYWxsZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIG9uIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHVyZSBwYXRocywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQga21lbWxlYWsuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6lpjs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 10:57:59 +0000 UTC FinishedAt: 2026-08-13 11:55:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BCMA", "BCMA_HOST_SOC", "BCMA_HOST_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BCMA", "BCMA_HOST_SOC", "BCMA_HOST_PCI" ], "series_id": "94e4f2c4-1ace-484d-b7b6-17c257273211" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bcma_bus_register", "bcma_unregister_cores", "bcma_host_soc_probe", "bcma_host_pci_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JDTUEmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1NPQyYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7YmNtYV91bnJlZ2lzdGVyX2NvcmVzJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9zb2NfcHJvYmUmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCQ01BIGJ1cyByZWdpc3RyYXRpb24gcGF0aC4gSXQgZW5zdXJlcyB0aGF0IGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoKWAgZmFpbHMsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLCBhbmQgaW4gdGhlIGhvc3QgU29DIHByb2JlIGVycm9yIHBhdGgsIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoKWAgaXMgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlZ2lzdGVyZWQgY29yZXMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBvbiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcGF0aCBkdXJpbmcgQkNNQSBidXMgcmVnaXN0cmF0aW9uLiBJZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgcHJvcGVybHkgcHJvcGFnYXRlcyB0aGUgZXJyb3IgYW5kIGNsZWFucyB1cCB0aGUgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGRldmljZSBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlIGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNWQ0ZjI2NDE5NDFjMDY4Yzk5MjgwN2Y2YWRlYThiMTk2NWFjNWQyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICYjNDM7MjM2LDcgQEAgc3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIFxuIGVycl91bm1hcF9tbWlvOlxuJiM0MztcdGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpO1xuIFx0aW91bm1hcChidXMtXHUwMDNlbW1pbyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uY1xuaW5kZXggNzJmMDQ1ZTZlZDUxMy4uNTVkMTc1NDZjNzk3YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbkBAIC00NzcsOCAmIzQzOzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbiYjNDM7XHRlcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwmIzM0O0J1cyByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQ01BJiMzNDssCiAgICAmIzM0O0JDTUFfSE9TVF9TT0MmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JjbWFfYnVzX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O2JjbWFfdW5yZWdpc3Rlcl9jb3JlcyYjMzQ7LAogICAgJiMzNDtiY21hX2hvc3Rfc29jX3Byb2JlJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9wY2lfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgcGF0aCBkdXJpbmcgQkNNQSBidXMgcmVnaXN0cmF0aW9uLiBJZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxzLCBpdCBub3cgcHJvcGVybHkgcHJvcGFnYXRlcyB0aGUgZXJyb3IgYW5kIGNsZWFucyB1cCB0aGUgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGRldmljZSBpbml0aWFsaXphdGlvbiBlcnJvciBoYW5kbGluZywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBwbGF0Zm9ybSBvciBQQ0kgZGV2aWNlIGluamVjdGlvbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNWQ0ZjI2NDE5NDFjMDY4Yzk5MjgwN2Y2YWRlYThiMTk2NWFjNWQyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCmluZGV4IDIwYjE4MTZjNTcwYjIuLjBiZWMwZDAwNWI4OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCkBAIC0yMzYsNiAmIzQzOzIzNiw3IEBAIHN0YXRpYyBpbnQgYmNtYV9ob3N0X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXJldHVybiBlcnI7CiAKIGVycl91bm1hcF9tbWlvOgomIzQzOwliY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTsKIAlpb3VubWFwKGJ1cy0mZ3Q7bW1pbyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9tYWluLmMgYi9kcml2ZXJzL2JjbWEvbWFpbi5jCmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtNDc3LDggJiM0Mzs0NzcsOSBAQCBpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpCiAJfQogCiAJLyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi8KLQliY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTsKLQomIzQzOwllcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJYmNtYV9pbmZvKGJ1cywgJiMzNDtCdXMgcmVnaXN0ZXJlZFxuJiMzNDspOwogCiAJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCQ01BIFBhdGNoIGZvciBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jYCBhbmQgYGRyaXZlcnMvYmNtYS9tYWluLmNgLiBUaGUgY29yZSBjaGFuZ2VzIHNlZW0gdG8gYmUgcmVsYXRlZCB0byBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIEJDTUEgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgbm93IHVucmVnaXN0ZXJzIGNvcmVzIG9uIGFuIGVycm9yIHBhdGggYnkgY2FsbGluZyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLiBBbHNvLCBgYmNtYV9idXNfcmVnaXN0ZXJgIG5vdyBleHBsaWNpdGx5IHJldHVybnMgYW4gZXJyb3IgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYCBmYWlscy4gVGhlIGNvbmNlcm4sIGFzIGFsd2F5cyB3aXRoIGFueSBrZXJuZWwgcGF0Y2gsIGlzIHdoZXRoZXIgd2UgY2FuIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBtb2RpZmllZCBlcnJvciBwYXRoIGFuZCB0aGUgY29kZSB1bmRlciB0ZXN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZXNlIEJDTUEgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudD8gVGhpcyBpcyBCcm9hZGNvbSYjMzk7cyBzcGVjaWZpYyBidXMgKEFNQkEtYmFzZWQpLCB3aGljaCBpcyB0aGUgZmlyc3QgY2hhbGxlbmdlLiBIb3cgZWFzeSBpcyBpdCB0byBlbXVsYXRlIG9yIGV2ZW4gcHJvcGVybHkgcHJvYmUgc3VjaCBhIGJ1cz8gVGhlIHBhdGNoIGZvY3VzZXMgb24gcGxhdGZvcm0gZGV2aWNlcyBhbmQgdGhlIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZS4KCkhtbSwgcGxhdGZvcm0gZGV2aWNlc+KApiB0aG9zZSBjYW4gYmUgY3JlYXRlZCB0aHJvdWdoIGRldmljZSB0cmVlIG9yIG1hbnVhbGx5LiBDYW4gc3l6a2FsbGVyIGluamVjdCBvciBtYW5pcHVsYXRlIHRoZSBkZXZpY2UgdHJlZT8gIEFuZCBpcyB0aGVyZSBhIHdheSB0byBmb3JjZSBhIHBsYXRmb3JtIGRldmljZSB0byBiZSBjcmVhdGVkIHZpYSBgc3l6X2dlbmV0bGlua2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/ICBXYWl0LCBubywgYHN5emthbGxlcmAgZG9lc24mIzM5O3QgcHJvdmlkZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGNyZWF0b3IsIHVubGVzcyBpdCYjMzk7cyBhIHZlcnkgc3BlY2lmaWMgcHNldWRvLWRldmljZSBvciBhIGRyaXZlciBhbGxvd3MgZm9yIGEgY3VzdG9tIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbi4KCk5vdywgbGV0JiMzOTtzIHpvb20gb3V0IGEgYml0LiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqYW5kKiBwb3RlbnRpYWxseSBvdGhlciBwcm9iZSBmdW5jdGlvbnMgbGlrZSBgYmNtYV9ob3N0X3BjaV9wcm9iZWAuIFRoaXMgZ2l2ZXMgYSBzZWNvbmQgcG90ZW50aWFsIHJvdXRlIHRvIHRlc3QgdGhlIGNoYW5nZXMuIENhbiB3ZSByZWFjaCBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IFNpbmNlIFBDSSBkZXZpY2VzIGNhbiBiZSBlbXVsYXRlZCB0byBzb21lIGV4dGVudCwgYW5kIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHRoaXMgbWlnaHQgYmUgYSBwb3NzaWJpbGl0eS4gQnV0IFBDSSBmdXp6aW5nIGlzIG1vcmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHNldHVwLgoKVWx0aW1hdGVseSwgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgdGVzdGFibGUgd2l0aCBmdXp6aW5nLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIHdvcmtzIGludGVybmFsbHkgYXMgd2VsbC4gVGhhdCBpcyB0aGUgdHJ1ZSBsaW5jaHBpbiBhbmQgaXMgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3JlZ2lzdGVyX2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmM9Mjc4PXN0YXRpYyB2b2lkIGJjbWFfcmVnaXN0ZXJfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxuZHJpdmVycy9iY21hL21haW4uYzoyOTE6c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0zODg9aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ4MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIyMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGhlcmUgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGl0cyBwcmltYXJ5IHB1cnBvc2UuIEkmIzM5O20gZ3Vlc3NpbmcsIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgQnJvYWRjb20gZGV2aWNlIGluc3RhbmNlcyB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgcHJvYmluZyBmb3IgaGFyZHdhcmUsIGFsbG9jYXRpbmcgcmVzb3VyY2VzLCBhbmQgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGRldmljZSBzdHJ1Y3R1cmVzIGZvciB0aGUgZHJpdmVyIHRvIGludGVyYWN0IHdpdGggdGhlIGhhcmR3YXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB0aGUgQkNNQSBidXMgYW5kIHdoaWNoIGRldmljZSB0eXBlcyBpdCBzdXBwb3J0cy4gRG9lcyBpdCBoYW5kbGUgZGlmZmVyZW50IHJldmlzaW9ucyBvZiB0aGUgc2FtZSBjaGlwPyBBcmUgdGhlcmUgYW55IHBsYXRmb3JtLXNwZWNpZmljIHF1aXJrcyBvciB3b3JrYXJvdW5kcyBpbiB0aGlzIGZ1bmN0aW9uIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGVzcGVjaWFsbHkgaWYgdGhlIGRldmljZSBlbnVtZXJhdGlvbiBpcyBiZWluZyB0cmlnZ2VyZWQgYXN5bmNocm9ub3VzbHk/IEtub3dpbmcgd2hpY2gga2VybmVsIHN1YnN5c3RlbXMgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCBpcyBhbHNvIGltcG9ydGFudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gdGhpbmdzIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGBidXNfcmVnaXN0ZXJgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBiY21hIHN0YWNrIGlzIHByZXR0eSBnb29kLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkga2V5IHRvIGEgcmVsaWFibGUsIHN0YWJsZSBzeXN0ZW0uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyByZWdpc3RyYXRpb24gcHJvY2Vzcy4gQW55IGZhaWxlZCBhdHRlbXB0cyB0byByZWdpc3RlciBhIGRldmljZSBjb3VsZCBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLCBsZWFkaW5nIHRvIGRldmljZSBtYWxmdW5jdGlvbiBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSXQgd2lsbCBhbHNvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBhdCBydW50aW1lIGlmIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFxuIDI5MTpcdHN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuIDI5MjpcdHtcbiAyOTM6XHRcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZTtcbiAyOTQ6XHRcdGludCBlcnI7XG4gMjk1Olx0XG4gMjk2Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvcmUsIFx1MDAyNmJ1cy1cdTAwM2Vjb3JlcywgbGlzdCkge1xuIDI5NzpcdFx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuIDI5ODpcdFxuIDI5OTpcdFx0XHQvKiBXZSBzdXBwb3J0IHRoYXQgY29yZSBvdXJzZWx2ZXMgKi9cbiAzMDA6XHRcdFx0c3dpdGNoIChjb3JlLVx1MDAzZWlkLmlkKSB7XG4gMzAxOlx0XHRcdGNhc2UgQkNNQV9DT1JFXzQ3MDZfQ0hJUENPTU1PTjpcbiAzMDI6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfQ0hJUENPTU1PTjpcbiAzMDM6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfTlNfQ0hJUENPTU1PTl9COlxuIDMwNDpcdFx0XHRjYXNlIEJDTUFfQ09SRV9QQ0k6XG4gMzA1Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSUU6XG4gMzA2Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSUUyOlxuIDMwNzpcdFx0XHRjYXNlIEJDTUFfQ09SRV9NSVBTXzc0SzpcbiAzMDg6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9NQUNfR0JJVF9DT01NT046XG4gMzA5Olx0XHRcdFx0Y29udGludWU7XG4gMzEwOlx0XHRcdH1cbiAzMTE6XHRcbiAzMTI6XHRcdFx0LyogRWFybHkgY29yZXMgd2VyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgKi9cbiAzMTM6XHRcdFx0aWYgKGJjbWFfaXNfY29yZV9uZWVkZWRfZWFybHkoY29yZS1cdTAwM2VpZC5pZCkpXG4gMzE0Olx0XHRcdFx0Y29udGludWU7XG4gMzE1Olx0XG4gMzE2Olx0XHRcdG5wID0gY29yZS1cdTAwM2VkZXYub2Zfbm9kZTtcbiAzMTc6XHRcdFx0aWYgKG5wIFx1MDAyNlx1MDAyNiAhb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpXG4gMzE4Olx0XHRcdFx0Y29udGludWU7XG4gMzE5Olx0XG4gMzIwOlx0XHRcdC8qIE9ubHkgZmlyc3QgR01BQyBjb3JlIG9uIEJDTTQ3MDYgaXMgY29ubmVjdGVkIGFuZCB3b3JraW5nICovXG4gMzIxOlx0XHRcdGlmIChjb3JlLVx1MDAzZWlkLmlkID09IEJDTUFfQ09SRV80NzA2X01BQ19HQklUIFx1MDAyNlx1MDAyNlxuIDMyMjpcdFx0XHQgICAgY29yZS1cdTAwM2Vjb3JlX3VuaXQgXHUwMDNlIDApXG4gMzIzOlx0XHRcdFx0Y29udGludWU7XG4gMzI0Olx0XG4gMzI1Olx0XHRcdGJjbWFfcmVnaXN0ZXJfY29yZShidXMsIGNvcmUpO1xuIDMyNjpcdFx0fVxuIDMyNzpcdFxuIDMyODpcdCNpZmRlZiBDT05GSUdfQkNNQV9QRkxBU0hcbiAzMjk6XHRcdGlmIChidXMtXHUwMDNlZHJ2X2NjLnBmbGFzaC5wcmVzZW50KSB7XG4gMzMwOlx0XHRcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcdTAwMjZiY21hX3BmbGFzaF9kZXYpO1xuIDMzMTpcdFx0XHRpZiAoZXJyKVxuIDMzMjpcdFx0XHRcdGJjbWFfZXJyKGJ1cywgXCYjMzQ7RXJyb3IgcmVnaXN0ZXJpbmcgcGFyYWxsZWwgZmxhc2hcXG5cJiMzNDspO1xuIDMzMzpcdFx0fVxuIDMzNDpcdCNlbmRpZlxuIDMzNTpcdFxuIDMzNjpcdCNpZmRlZiBDT05GSUdfQkNNQV9TRkxBU0hcbiAzMzc6XHRcdGlmIChidXMtXHUwMDNlZHJ2X2NjLnNmbGFzaC5wcmVzZW50KSB7XG4gMzM4Olx0XHRcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcdTAwMjZiY21hX3NmbGFzaF9kZXYpO1xuIDMzOTpcdFx0XHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQb3RlbnRpYWwgRXJyb3IgSGFuZGxpbmcgaW4gYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyByZXR1cm5pbmcgYW4gYGludGAuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgcHJhY3RpY2UsIG9mIGNvdXJzZSwgdXN1YWxseSBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4gQnV0IHRoZSB3YXkgSSYjMzk7bSBzZWVpbmcgaXQgdXNlZCBpbiB0aGUgb3JpZ2luYWwgY29kZSwgSSYjMzk7bSBnZXR0aW5nIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSBpZ25vcmVkIHBvdGVudGlhbCBmYWlsdXJlIG9mIHRoYXQgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgY2FsbCBzb21laG93LCBvciBtYXliZSBpdCBkaWRuJiMzOTt0LiBJIG5lZWQgdG8gYmUgc3VyZSBvbiB0aGlzLiBJZiB3ZSYjMzk7cmUgbm90IGNoZWNraW5nIHRoZSByZXR1cm4gZnJvbSBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYCBwcm9wZXJseSBhZnRlciBjYWxsaW5nIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLCB0aGVuIHdlIGFyZSBsaWtlbHkgbWlzc2luZyBlcnJvcnMuIEkgbmVlZCB0byBrbm93LgoKSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBiYWNrIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSByZXZpZXcgaXQgdG8gc2VlIGV4YWN0bHkgaG93IGl0IGhhbmRsZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcHJvcGFnYXRlcyB0aGUgZXJyb3IgcHJvcGVybHksIG9yIGlmIGl0IG1hc2tzIGl0LCBtYXliZSBieSBhc3N1bWluZyBhIGRlZmF1bHQgcmV0dXJuLiBBIG1pc3NlZCBlcnJvciBoZXJlIGNvdWxkIGxlYWQgdG8gc29tZSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBwb3RlbnRpYWxseSBjYXVzaW5nIGlzc3VlcyB3aXRoIGRldmljZSBlbnVtZXJhdGlvbiBvciBldmVuIGNyYXNoZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDA6XHRcdFx0XHRiY21hX2VycihidXMsIFwmIzM0O0Vycm9yIHJlZ2lzdGVyaW5nIHNlcmlhbCBmbGFzaFxcblwmIzM0Oyk7XG4gMzQxOlx0XHR9XG4gMzQyOlx0I2VuZGlmXG4gMzQzOlx0XG4gMzQ0Olx0I2lmZGVmIENPTkZJR19CQ01BX05GTEFTSFxuIDM0NTpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2MubmZsYXNoLnByZXNlbnQpIHtcbiAzNDY6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfbmZsYXNoX2Rldik7XG4gMzQ3Olx0XHRcdGlmIChlcnIpXG4gMzQ4Olx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBOQU5EIGZsYXNoXFxuXCYjMzQ7KTtcbiAzNDk6XHRcdH1cbiAzNTA6XHQjZW5kaWZcbiAzNTE6XHRcdGVyciA9IGJjbWFfZ3Bpb19pbml0KFx1MDAyNmJ1cy1cdTAwM2VkcnZfY2MpO1xuIDM1MjpcdFx0aWYgKGVyciA9PSAtRU5PVFNVUFApXG4gMzUzOlx0XHRcdGJjbWFfZGVidWcoYnVzLCBcJiMzNDtHUElPIGRyaXZlciBub3QgYWN0aXZhdGVkXFxuXCYjMzQ7KTtcbiAzNTQ6XHRcdGVsc2UgaWYgKGVycikge1xuIDM1NTpcdFx0XHRiY21hX2VycihidXMsIFwmIzM0O0Vycm9yIHJlZ2lzdGVyaW5nIEdQSU8gZHJpdmVyOiAlaVxcblwmIzM0OywgZXJyKTtcbiAzNTY6XHRcdFx0cmV0dXJuIGVycjtcbiAzNTc6XHRcdH1cbiAzNTg6XHRcbiAzNTk6XHRcdGlmIChidXMtXHUwMDNlaG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpIHtcbiAzNjA6XHRcdFx0ZXJyID0gYmNtYV9jaGlwY29fd2F0Y2hkb2dfcmVnaXN0ZXIoXHUwMDI2YnVzLVx1MDAzZWRydl9jYyk7XG4gMzYxOlx0XHRcdGlmIChlcnIpXG4gMzYyOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyB3YXRjaGRvZyBkcml2ZXJcXG5cJiMzNDspO1xuIDM2MzpcdFx0fVxuIDM2NDpcdFxuIDM2NTpcdFx0cmV0dXJuIDA7XG4gMzY2Olx0fVxuIDM2NzpcdFxuIDM2ODpcdHZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuIDM2OTpcdHtcbiAzNzA6XHRcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgKnRtcDtcbiAzNzE6XHRcbiAzNzI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb3JlLCB0bXAsIFx1MDAyNmJ1cy1cdTAwM2Vjb3JlcywgbGlzdCkge1xuIDM3MzpcdFx0XHRpZiAoIWNvcmUtXHUwMDNlZGV2X3JlZ2lzdGVyZWQpXG4gMzc0Olx0XHRcdFx0Y29udGludWU7XG4gMzc1Olx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvcmUtXHUwMDNlbGlzdCk7XG4gMzc2Olx0XHRcdGRldmljZV91bnJlZ2lzdGVyKFx1MDAyNmNvcmUtXHUwMDNlZGV2KTtcbiAzNzc6XHRcdH1cbiAzNzg6XHRcdGlmIChidXMtXHUwMDNlaG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpXG4gMzc5Olx0XHRcdHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJ1cy1cdTAwM2VkcnZfY2Mud2F0Y2hkb2cpO1xuIDM4MDpcdFxuIDM4MTpcdFx0LyogTm93IG5vIG9uZSB1c2VzIGludGVybmFsbHktaGFuZGxlZCBjb3Jlcywgd2UgY2FuIGZyZWUgdGhlbSAqL1xuIDM4MjpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvcmUsIHRtcCwgXHUwMDI2YnVzLVx1MDAzZWNvcmVzLCBsaXN0KSB7XG4gMzgzOlx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvcmUtXHUwMDNlbGlzdCk7XG4gMzg0Olx0XHRcdHB1dF9kZXZpY2UoXHUwMDI2Y29yZS1cdTAwM2VkZXYpO1xuIDM4NTpcdFx0fVxuIDM4NjpcdH1cbiAzODc6XHRcbiAzODg6XHRpbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXG4gMzg5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJDTUEgQnVzIFJlZ2lzdHJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBjaGFuZ2U6IGBiY21hX2J1c19yZWdpc3RlcmAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYC4gSWYgdGhhdCBmYWlscywgYGJjbWFfYnVzX3JlZ2lzdGVyYCB3aWxsIHJldHVybiBhbiBlcnJvciBpdHNlbGYuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgZ29vZC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3cgbGV2ZWwgZHJpdmVycy4KClRoZW4sIEkgc2VlIHRoZSBtb2RpZmljYXRpb25zIHRvIGBiY21hX2hvc3Rfc29jX3Byb2JlYC4gU3BlY2lmaWNhbGx5LCBvbiBhbiBlcnJvciBwYXRoLCB0aGUgY29kZSBub3cgY2FsbHMgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpYC4gVGhhdCYjMzk7cyBzbWFydC4gSXQmIzM5O3MgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHByb3Blcmx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgcHJvYmUuIE1ha2VzIHNlbnNlLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgeW91JiMzOTtyZSBub3QgbGVhdmluZyBhbnkgZGFuZ2xpbmcgcmVzb3VyY2VzIGJlaGluZC4gSW1wb3J0YW50IGZvciBzdGFiaWxpdHkgYW5kIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzLCBvciBvdGhlciBwbGF0Zm9ybSBpc3N1ZXMuCgpOb3cgSSYjMzk7bSB0aGlua2luZywgaXMgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGV2ZW4gKnJlYWNoYWJsZSo/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dC4gQWgsIHJpZ2h0LCBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmdW5jdGlvbi4gQWxyaWdodC4gVGhhdCBjb25maXJtcyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBkcml2ZXIgbGlmZWN5Y2xlLCBhbmQgdGhlIHBhdGNoIG1ha2VzIHNlbnNlIGluIHRoYXQgY29udGV4dC4gVGhpcyBpcyBhYm91dCBtYWtpbmcgc3VyZSB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIGFuZCBkZXZpY2UgZW51bWVyYXRpb24gYXJlIGhhbmRsZWQgc2FmZWx5LCB3aXRoIGdyYWNlZnVsIGVycm9yIHJlY292ZXJ5IGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgc2V0dXAuIEdvb2Qgc3R1ZmYsIGdvb2Qgc3R1ZmYuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoaXMgd29ya3Mgb24gdGhlIFNPQy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtYV9ob3N0X3NvY19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MTg5PWludCBfX2luaXQgYmNtYV9ob3N0X3NvY19pbml0KHN0cnVjdCBiY21hX3NvYyAqc29jKVxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIwMi0jaWZkZWYgQ09ORklHX09GXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMDM6c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jPTI1OT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21hX2hvc3Rfc29jX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjMtXHR9LFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0Olx0LnByb2JlXHRcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTI2NS1cdC5yZW1vdmVcdFx0PSBiY21hX2hvc3Rfc29jX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyMwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmNtYV9ob3N0X3NvY19kcml2ZXIgUHJvYmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYmNtYV9ob3N0X3NvY19kcml2ZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgY2FuIHN5emthbGxlciwgb3VyIGZ1enplciwgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uPyBUaGUgb2J2aW91cyB3YXkgdG8gdHJpZ2dlciBgcHJvYmVgIGlzIGJ5IGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhIG1hdGNoaW5nIGRldmljZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBuYW1lIG9yIG1hdGNoaW5nIHRhYmxlIHRvIHNlZSB3aGF0IGNoYXJhY3RlcmlzdGljcyBpdCYjMzk7cyBleHBlY3RpbmcgaW4gYSBwbGF0Zm9ybSBkZXZpY2UgdG8gY29uc2lkZXIgaXRzZWxmIGEgZ29vZCBmaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYHN5emthbGxlcmAsIHRoZSBkZXZpY2UsIGFuZCB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIDI1MTpcdH1cbiAyNTI6XHRcbiAyNTM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hX2hvc3Rfc29jX29mX21hdGNoW10gPSB7XG4gMjU0Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YnJjbSxidXMtYXhpXCYjMzQ7LCB9LFxuIDI1NTpcdFx0e30sXG4gMjU2Olx0fTtcbiAyNTc6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21hX2hvc3Rfc29jX29mX21hdGNoKTtcbiAyNTg6XHRcbiAyNTk6XHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21hX2hvc3Rfc29jX2RyaXZlciA9IHtcbiAyNjA6XHRcdC5kcml2ZXIgPSB7XG4gMjYxOlx0XHRcdC5uYW1lID0gXCYjMzQ7YmNtYS1ob3N0LXNvY1wmIzM0OyxcbiAyNjI6XHRcdFx0Lm9mX21hdGNoX3RhYmxlID0gYmNtYV9ob3N0X3NvY19vZl9tYXRjaCxcbiAyNjM6XHRcdH0sXG4gMjY0Olx0XHQucHJvYmVcdFx0PSBiY21hX2hvc3Rfc29jX3Byb2JlLFxuIDI2NTpcdFx0LnJlbW92ZVx0XHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxuIDI2NjpcdH07XG4gMjY3Olx0XG4gMjY4Olx0aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX3JlZ2lzdGVyX2RyaXZlcih2b2lkKVxuIDI2OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBTeXprYWxsZXIgRGV2aWNlIENyZWF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBTeXprYWxsZXIgY2FuIGdlbmVyYXRlIHBsYXRmb3JtIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCBkb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWA/JiMzNDsgTm9wZSwgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBTeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgKmdlbmVyaWMqIHBsYXRmb3JtIGRldmljZSBjcmVhdG9yIGJha2VkIGluLiBJIHN0YXJ0ZWQgd29uZGVyaW5nIGlmIG1heWJlIGl0IGxldmVyYWdlcyBkZXZpY2UgdHJlZSBvdmVybGF5cyB3aGVuIGl0IGhhcyB0aGUgY2FwYWJpbGl0eSwgYnV0IGdlbmVyYWxseSwgdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuIAoKVGhlbiBJIHdhcyBsaWtlLCB3YWl0IGEgbWludXRlLCBkb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWV0aGluZyB3aXRoIGBzeXpfZ2VuZXRsaW5rYD8gQnV0IG5vLCB0aGF0JiMzOTtzIE5ldGxpbmstc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHN5el91c2JfY29ubmVjdGA/IEFoLCB0aGF0JiMzOTtzIG9idmlvdXNseSBqdXN0IFVTQi4KCkhvbGQgb24uLi4gY2FuIEkgcmVhY2ggYGJjbWFfYnVzX3JlZ2lzdGVyYCBzb21laG93IHRocm91Z2ggUENJPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdCBhdmVudWUuIFRoaXMgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oPTI4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKTtcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaDoyOTppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oLTMwLXZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XG4tLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MTYwPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTIyMi1cdC8qIFJlZ2lzdGVyICovXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYzoyMjM6XHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjI0LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0yMDM9c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjI5LVx0LyogUmVnaXN0ZXIgKi9cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIzMDpcdGVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7XG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMzEtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9MzY4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg3LVxuZHJpdmVycy9iY21hL21haW4uYzozODg6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuZHJpdmVycy9iY21hL21haW4uYy0zODkte1xuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9NjM4PXN0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ3LVxuZHJpdmVycy9iY21hL21haW4uYzo2NDg6c3RhdGljIHVuc2lnbmVkIGludCBiY21hX2J1c19yZWdpc3RlcmVkO1xuZHJpdmVycy9iY21hL21haW4uYy02NDktXG4tLVxuZHJpdmVycy9iY21hL21haW4uYz02NTU9c3RhdGljIGludCBfX2luaXQgYmNtYV9pbml0X2J1c19yZWdpc3Rlcih2b2lkKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNjU4LVxuZHJpdmVycy9iY21hL21haW4uYzo2NTk6XHRpZiAoYmNtYV9idXNfcmVnaXN0ZXJlZClcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjYwLVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2My1cdGlmICghZXJyKVxuZHJpdmVycy9iY21hL21haW4uYzo2NjQ6XHRcdGJjbWFfYnVzX3JlZ2lzdGVyZWQgPSAxO1xuZHJpdmVycy9iY21hL21haW4uYy02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gQkNNQSBhbmQgUENJIERldmljZSBGdXp6aW5nKioKCk9rYXksIHNvIGBiY21hX2J1c19yZWdpc3RlcmAgaXMgaW5kZWVkIGNhbGxlZCBmcm9tIGBiY21hX2hvc3RfcGNpX3Byb2JlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgQnJvYWRjb20gUENJIGRldmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBnb2VzIHRvIGZ1enppbmcgdGhlc2UgUENJIGRldmljZXMuICBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIFBDSSBjYXBhYmlsaXRpZXMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoLiBJIHJlY2FsbCBzZWVpbmcgUENJIGZ1enppbmcgbWVudGlvbmVkLCBtYXliZSB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgIG9yIHN0YW5kYXJkIFFFTVUgZW11bGF0aW9uLiAKCkhvbGQgb24sIEkgd2FzIHRoaW5raW5nIG9mIHNwZWNpZmljIHN5c3RlbSBjYWxscyB0byBhZGQgZGV2aWNlcywgYnV0IEkgcmVtZW1iZXIgaXQmIzM5O3MgYSBiaXQgbW9yZSBudWFuY2VkLiBBY3R1YWxseSwgSSB3YXMgZ2V0dGluZyB0aGF0IGNvbmZ1c2VkIHdpdGggb3RoZXIgZGV2aWNlIHR5cGVzIGxpa2UgVVNCLiBTeXprYWxsZXIgc3VwcG9ydHMgUENJIGZ1enppbmcgdGhyb3VnaCB0aGUgdmZpbyBpbnRlcmZhY2UuIE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gTGV0IG1lIGNoZWNrIHRoZSBzeXprYWxsZXIgZG9jdW1lbnRhdGlvbjsgaXNuJiMzOTt0IHRoZXJlIGEgYHN5cy9saW51eC9kZXZfcGNpLnR4dGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgdGhpcywgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLgoKUmlnaHQsIHRoZSBwcm9tcHQgaXMgYWJvdXQgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuICBUaGF0IG1lYW5zIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoaW5ncyB0aGF0IGxpa2VseSBuZWVkICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyByZWFkaWx5IGVtdWxhdGVkLiBBaCwgYGJjbWFfaG9zdF9wY2lfcHJvYmVgIGlzIGZvciBCcm9hZGNvbSBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIGFuZCAqdGhhdCogaXMgdGhlIGtleSBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiBgYmNtYV9ob3N0X3BjaV9wcm9iZWAgdG8gdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgZGV2aWNlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBPa2F5LCBjaGVja2luZyB0aGUgUENJIElEcyBpcyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3BjaV9icmlkZ2VfdGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvaG9zdF9wY2kuYz0yNzM9c3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKGJjbWFfcG1fb3BzLCBiY21hX2hvc3RfcGNpX3N1c3BlbmQsXG4tLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjgyLVxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiY21hX3BjaV9icmlkZ2VfdGJsW10gPSB7XG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yODQtXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwNTc2KSB9LFxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwNS19O1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzA2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwNy1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jPTMwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmNtYV9wY2lfYnJpZGdlX2RyaXZlciA9IHtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwOS1cdC5uYW1lID0gXCYjMzQ7YmNtYS1wY2ktYnJpZGdlXCYjMzQ7LFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzEwOlx0LmlkX3RhYmxlID0gYmNtYV9wY2lfYnJpZGdlX3RibCxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMxMS1cdC5wcm9iZSA9IGJjbWFfaG9zdF9wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3ODYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgUENJIERldmljZSoqCgpPa2F5LCBzbyB0aGVzZSBhcmUgZGVmaW5pdGVseSBCcm9hZGNvbSBQQ0kgZGV2aWNlcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBwcm9wZXJseSBlbXVsYXRlcyB0aGVtLiBJIGtub3cgUUVNVSBoYXMgc29tZSBCcm9hZGNvbSBuZXR3b3JrIGNhcmQgc3VwcG9ydCwgYnV0IEkmIzM5O20gbm90IHN1cmUgYWJvdXQgdGhlc2Ugc3BlY2lmaWMgZGV2aWNlcy4gVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYXMgaXQgYWxsb3dzIHRoZSBpbmplY3Rpb24gb2YgYXJiaXRyYXJ5IFBDSSBkZXZpY2VzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHN5emthbGxlciBpcyBsZXZlcmFnaW5nIFBDSSBmdXp6aW5nLCB3aGljaCBtaWdodCBwcm92aWRlIGEgY2x1ZSBvbiBob3cgdG8gYXBwcm9hY2ggdGhpcy4KCldhaXQsIG5vdyBJIHJlcmVhZCB0aGUgcHJvbXB0LiBJdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgY29udGFpbnMgZHJpdmVycyBzdWNoIGFzIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIE15IHRob3VnaHRzIHJhY2UgYWhlYWQ6IGlzIGBCQ01BYCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqYWxzbyogcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3csIGBCQ01BYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQmIzM5O3MgdGhlIEJyb2FkY29tIEFNQkEgYnVzIHVzZWQgaW4gQnJvYWRjb20gd2lyZWxlc3MgY2FyZHMgbGlrZSBgYjQzYCBhbmQgYGJyY21zbWFjYCwgYW5kIGluIFNvQ3MuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LgoKQ2FuIHN5emthbGxlciBldmVuIHJlYWNoIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBvciBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IEhvbGQgb24uLi4gdGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBXYWl0IGEgbWludXRlLCB0aGF0IG1lYW5zIHN5emthbGxlciAqZGlkKiBmaW5kIGEgYnVnIGhlcmUsIGFuZCBnZW5lcmF0ZWQgYSBwYXRjaCEgVGhhdCYjMzk7cyBhIGh1Z2UgY2x1ZSEgSWYgaXQgZm91bmQgYSBidWcsIGl0IGhhcyB0byBiZSByZWFjaGFibGUgd2l0aGluIGl0cyBlbnZpcm9ubWVudC4gTm93IEkmIzM5O20gZm9jdXNlZDogaG93IGRpZCBzeXprYWxsZXIgcmVhY2ggYGJjbWFfaG9zdF9zb2NfcHJvYmVgPwoKTGV0IG1lIHRoaW5rLiBJJiMzOTtsbCBzdGFydCBjaGVja2luZyBmb3Igc29tZSBraW5kIG9mIG1lY2hhbmlzbSBmb3IgcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uIHRvIHRyaWdnZXIgdGhlIHByb2JlLCBvciBpZiBpdCYjMzk7cyBiZWluZyB0cmlnZ2VyZWQgdmlhIGFub3RoZXIgc3Vic3lzdGVtLiBPa2F5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9jcmVhdGVgPyBObywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGFwcGVhciB0byBsZXZlcmFnZSB0aGF0LgoKV2FpdC4uLiBjb3VsZCBgYmNtYWAgYmUgYSB2aXJ0dWFsIGRldmljZSBvciBtYXliZSBiZSBpbnN0YW50aWF0ZWQgdGhyb3VnaCBhIG5ldGxpbmsgaW50ZXJmYWNlPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBoYW5kbGVkLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX2hvc3Rfc29jX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjAyLSNpZmRlZiBDT05GSUdfT0ZcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIwNC17XG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTI2My1cdH0sXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyNjQ6XHQucHJvYmVcdFx0PSBiY21hX2hvc3Rfc29jX3Byb2JlLFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjY1LVx0LnJlbW92ZVx0XHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTc3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQkNNQSBFcnJvciBQYXRoOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcyBjb2RlPyYjMzQ7IEkga25vdyBpdCBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMsIG1heWJlIHVzaW5nIGRldmljZSB0cmVlIG92ZXJsYXlzPyBPciBwZXJoYXBzIGl0IHVzZXMgc29tZSBraW5kIG9mIHBzZXVkby1zeXNjYWxsLiBObywgbm8gYHN5el9nZW5ldGxpbmtgLCB0aGF0JiMzOTtzIG5vdCBpdC4KCkkmIzM5O2QgbGlrZSB0byBjaGVjayBpZiBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IHJlYWNoIHRoZSBgYmNtYV9ob3N0X3NvY19wcm9iZWAgZnVuY3Rpb24gYnkgbG9va2luZyBpdCB1cCBpbiB0aGUgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucywgYnV0IEkgZG9uJiMzOTt0IGhhdmUgdGhhdCBjYXBhYmlsaXR5IGhlcmUuIEhvd2V2ZXIsIEkgY2FuIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3l6a2FsbGVyIGZ1bmN0aW9uIHRoYXQgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHJlY2FsbCB0aGF0IHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZXMgdmlhIGBzeXNmc2AsIGBjb25maWdmc2AsIG9yIGBuZXRsaW5rYC4gQnV0LCB0aGVyZSYjMzk7cyBgYnRzZGlvYCBvciBgbWFjODAyMTFfaHdzaW1gLCB0b28uCgpUaGVuIEkgc2F3IHRoZSBhdXRob3I6IGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gV2FpdCBhIG1pbnV0ZS4uLiB0aGF0ICptZWFucyogc3l6a2FsbGVyIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUhCgpTbywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHBhdGNoIHdvcnRoIGZ1enppbmc/IEl0IGxvb2tzIGxpa2UgaXQgbW9kaWZpZXMgZXJyb3IgcGF0aHMgaW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGFuZCBgYmNtYV9idXNfcmVnaXN0ZXJgLiBTcGVjaWZpY2FsbHksIGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZhaWxzLCB0aGVyZSYjMzk7cyBhIG5ldyBlcnJvciByZXR1cm4uIFRoZSBmYWlsdXJlIHByb3BhZ2F0ZXMgdXAgdG8gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgYW5kIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBub3cgaGFuZGxlcyB0aGlzIGVycm9yLCB1bnJlZ2lzdGVyaW5nIGNvcmVzIGFuZCB1bm1hcHBpbmcgTU1JTy4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiB1bmNvdmVyIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgb2NjdXIgd2hlbiBlcnJvcnMgYXJlIGhhbmRsZWQuCgpOb3csIHdhaXQsIHRoZSBwcm9tcHQgc2F5cyBub3QgdG8gcmV0dXJuICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlIHBhdGNoIGNvbmNlcm5zIHVucmVhY2hhYmxlIGNvZGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLgoKU28sIGlzIEJDTUEgcmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVU/IEkgd2FzIHRoaW5raW5nIGFib3V0IHN5emthbGxlciYjMzk7cyBQQ0kgY2FwYWJpbGl0aWVzLiBObywgbm90IHRoYXQuIEkga25vdyBzeXprYWxsZXIgaGFzIHZpcnR1YWwgUENJIGZ1enppbmcgc3VwcG9ydCB2aWEgYSBtb2R1bGUgb3IgdXNlcmZhdWx0ZmQuIEJ1dCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciBwcm9iZS4gSG93IHdvdWxkIHN5emthbGxlciByZWFjaCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmb3Igc29tZXRoaW5nIGxpa2UgJiMzNDticmNtLGJ1cy1heGkmIzM0Oz8KCkNvdWxkIGl0IGJlIERldmljZSBUcmVlIG92ZXJsYXkgaW5qZWN0aW9uPyBBaGEhIFN5emthbGxlciBoYXMgYHN5el9tb3VudF9pbWFnZWAsIG5vLCBubywgbm90IHRoYXQuIEJ1dCB3YWl0LCBzeXprYWxsZXIgY2FuIGxvYWQgZGV2aWNlIHRyZWUgb3ZlcmxheXMgdGhyb3VnaCBgc3lzZnNgISBTcGVjaWZpY2FsbHksIGAvc3lzL2tlcm5lbC9jb25maWcvZGV2aWNlLXRyZWUvb3ZlcmxheXMvYC4gSSByZW1lbWJlciBgQ09ORklHX09GX09WRVJMQVlgIGlzIGEgdGhpbmcuCgpTbywgc3l6a2FsbGVyICpjYW4qIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzIGJ5IGxvYWRpbmcgRFQgb3ZlcmxheXMhIFRoaXMgbWVhbnMgYW55IHBsYXRmb3JtIGRyaXZlciB3aXRoIGFuIGBvZl9tYXRjaF90YWJsZWAgaXMgcmVhY2hhYmxlISBUaGUgYGJjbWFfaG9zdF9zb2NfZHJpdmVyYCBoYXMgYG9mX21hdGNoX3RhYmxlID0gYmNtYV9ob3N0X3NvY19vZl9tYXRjaGAuIEFuZCB0aGF0IGBvZl9tYXRjaF90YWJsZWAgaGFzIGAuY29tcGF0aWJsZSA9ICYjMzQ7YnJjbSxidXMtYXhpJiMzNDtgLiBCcmlsbGlhbnQhIFN5emthbGxlciBjYW4gbG9hZCBhIERUIG92ZXJsYXkgd2l0aCB0aGF0IGNvbXBhdGlibGUgc3RyaW5nLCBhbmQgdHJpZ2dlciBgYmNtYV9ob3N0X3NvY19wcm9iZWAuCgpZZXMsIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLgoKTGV0JiMzOTtzIG1vdmUgb24gYW5kIGZpZ3VyZSBvdXQgd2hhdCBjb25maWdzIGFyZSBuZWVkZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJDTUEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9iY21hL0tjb25maWc6Mjpjb25maWcgQkNNQV9QT1NTSUJMRVxuZHJpdmVycy9iY21hL0tjb25maWctMy1cdGJvb2xcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02LVxuZHJpdmVycy9iY21hL0tjb25maWc6NzptZW51Y29uZmlnIEJDTUFcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBzcGVjaWZpYyBBTUJBXCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWc9MTQ9aWYgQkNNQVxuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE2LSMgU3VwcG9ydCBmb3IgQmxvY2stSS9PLiBTRUxFQ1QgdGhpcyBmcm9tIHRoZSBkcml2ZXIgdGhhdCBuZWVkcyBpdC5cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjE3OmNvbmZpZyBCQ01BX0JMT0NLSU9cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE4LVx0Ym9vbFxuZHJpdmVycy9iY21hL0tjb25maWctMTktXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyMDpjb25maWcgQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxuZHJpdmVycy9iY21hL0tjb25maWctMjEtXHRib29sXG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctMjQtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyNTpjb25maWcgQkNNQV9IT1NUX1BDSVxuZHJpdmVycy9iY21hL0tjb25maWctMjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgb24gUENJLWhvc3QgYnVzXCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctMzAtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzozMTpjb25maWcgQkNNQV9IT1NUX1NPQ1xuZHJpdmVycy9iY21hL0tjb25maWctMzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgaW4gYSBTb0NcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy00MC1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjQxOmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTU2LVxuZHJpdmVycy9iY21hL0tjb25maWc6NTc6Y29uZmlnIEJDTUFfRFJJVkVSX1BDSV9IT1NUTU9ERVxuZHJpdmVycy9iY21hL0tjb25maWctNTgtXHRib29sIFwmIzM0O0RyaXZlciBmb3IgUENJIGNvcmUgd29ya2luZyBpbiBob3N0bW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTYyLVxuZHJpdmVycy9iY21hL0tjb25maWc6NjM6Y29uZmlnIEJDTUFfRFJJVkVSX01JUFNcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTY0LVx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIE1JUFMgY29yZSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy03MS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjcyOmNvbmZpZyBCQ01BX1BGTEFTSFxuZHJpdmVycy9iY21hL0tjb25maWctNzMtXHRib29sXG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctNzYtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo3Nzpjb25maWcgQkNNQV9TRkxBU0hcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtDaGlwQ29tbW9uLWF0dGFjaGVkIHNlcmlhbCBmbGFzaCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9iY21hL0tjb25maWctODgtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo4OTpjb25maWcgQkNNQV9ORkxBU0hcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTkwLVx0Ym9vbFxuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTkzLVxuZHJpdmVycy9iY21hL0tjb25maWc6OTQ6Y29uZmlnIEJDTUFfRFJJVkVSX0dNQUNfQ01OXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05NS1cdGJvb2wgXCYjMzQ7QkNNQSBCcm9hZGNvbSBHQklUIE1BQyBDT01NT04gY29yZSBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMDI6Y29uZmlnIEJDTUFfRFJJVkVSX0dQSU9cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTEwMy1cdGJvb2wgXCYjMzQ7QkNNQSBHUElPIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvYmNtYS9LY29uZmlnLTExMC1cbmRyaXZlcnMvYmNtYS9LY29uZmlnOjExMTpjb25maWcgQkNNQV9ERUJVR1xuZHJpdmVycy9iY21hL0tjb25maWctMTEyLVx0Ym9vbCBcJiMzNDtCQ01BIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgb24gQkNNQSBhbmQgaXRzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGBCQ01BYCBhbmQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBgQkNNQV9IT1NUX1NPQ2AuIFNlZW1zIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGF0IGBCQ01BX0hPU1RfU09DYCBwYXJ0LCBhcyBpdHMgYmVoYXZpb3Igd2lsbCBsaWtlbHkgZGljdGF0ZSBob3cgYEJDTUFgIGlzIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHBpZWNlcyB0aGlzIGhvc3Qgc2lkZSBTT0MgZWxlbWVudCByZXF1aXJlcyBvciByZWxpZXMgdXBvbiwgYXMgdGhpcyB3aWxsIGRpcmVjdGx5IGluZmx1ZW5jZSBteSBpbXBsZW1lbnRhdGlvbiBwbGFuIGZvciB0aGUgYnJvYWRlciBgQkNNQWAgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY29uc2lkZXIgYW55IGFyY2hpdGVjdHVyYWwgaW1wYWN0IHRoYXQgdGhlc2UgY29uc3RyYWludHMgaGF2ZSBvbiB0aGUgYEJDTUFgIG1vZHVsZSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyNTpcdGNvbmZpZyBCQ01BX0hPU1RfUENJXG4gIDI2Olx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgb24gUENJLWhvc3QgYnVzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIEJDTUFfSE9TVF9QQ0lfUE9TU0lCTEVcbiAgMjg6XHRcdHNlbGVjdCBCQ01BX0RSSVZFUl9QQ0lcbiAgMjk6XHRcdGRlZmF1bHQgeVxuICAzMDpcdFxuICAzMTpcdGNvbmZpZyBCQ01BX0hPU1RfU09DXG4gIDMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIEJDTUEgaW4gYSBTb0NcJiMzNDtcbiAgMzM6XHRcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIEhvc3QgaW50ZXJmYWNlIGZvciBhIEJyb2FkY29tIEFJWCBidXMgZGlyZWN0bHkgbWFwcGVkIGludG9cbiAgMzY6XHRcdCAgdGhlIG1lbW9yeS4gVGhpcyBvbmx5IHdvcmtzIHdpdGggdGhlIEJyb2FkY29tIFNvQ3MgZnJvbSB0aGVcbiAgMzc6XHRcdCAgQkNNNDdYWCBsaW5lLlxuICAzODpcdFxuICAzOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOXG4gIDQwOlx0XG4gIDQxOlx0Y29uZmlnIEJDTUFfRFJJVkVSX1BDSVxuICA0MjpcdFx0Ym9vbCBcJiMzNDtCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI1NAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgc29tZW9uZSB3ZWxsLXZlcnNlZCBpbiB0aGlzIGFyZWE6CgoqKkRlcGVuZGVuY3kgRGVlcCBEaXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBCQ01BX0hPU1RfU09DYCBpcyBjbGVhcmx5IGJ1aWx0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgd2UgaGF2ZSBgSEFTX0lPTUVNYCBlbmFibGVkLiBNYWtlcyBzZW5zZTsgdHlwaWNhbGx5LCB5b3UgbmVlZCBkaXJlY3QgSS9PIG1lbW9yeSBhY2Nlc3MgZm9yIHRoYXQga2luZCBvZiBsb3ctbGV2ZWwgU09DIGludGVyYWN0aW9uLiBOb3csIHRoZSBgQkNNQWAgZHJpdmVyIGl0c2VsZiBhbHNvIGhpbmdlcyBvbiBgSEFTX0lPTUVNYC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZXBlbmRlbmN5LiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgc2hhcmVkLCBmdW5kYW1lbnRhbCByZXNvdXJjZSBiZXR3ZWVuIHRob3NlIHR3byBtb2R1bGVzIHRoYXQgaGFzIHRoZSBtZW1vcnkgbWFwcGluZyByZXF1aXJlbWVudCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0IGRlcGVuZGVuY3kgbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBCQ01BYCBhbHNvIG5lZWRzIGRpcmVjdCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb2YgYEJDTUFgIHRvIGVuc3VyZSBub3RoaW5nIGlzIG1pc3NpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgQkNNQV9QT1NTSUJMRVxuICAgMzpcdFx0Ym9vbFxuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlZmF1bHQgeVxuICAgNjpcdFxuICAgNzpcdG1lbnVjb25maWcgQkNNQVxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gc3BlY2lmaWMgQU1CQVwmIzM0O1xuICAgOTpcdFx0ZGVwZW5kcyBvbiBCQ01BX1BPU1NJQkxFXG4gIDEwOlx0XHRoZWxwXG4gIDExOlx0XHQgIEJ1cyBkcml2ZXIgZm9yIEJyb2FkY29tIHNwZWNpZmljIEFkdmFuY2VkIE1pY3JvY29udHJvbGxlciBCdXNcbiAgMTI6XHRcdCAgQXJjaGl0ZWN0dXJlLlxuICAxMzpcdFxuICAxNDpcdGlmIEJDTUFcbiAgMTU6XHRcbiAgMTY6XHQjIFN1cHBvcnQgZm9yIEJsb2NrLUkvTy4gU0VMRUNUIHRoaXMgZnJvbSB0aGUgZHJpdmVyIHRoYXQgbmVlZHMgaXQuXG4gIDE3Olx0Y29uZmlnIEJDTUFfQkxPQ0tJT1xuICAxODpcdFx0Ym9vbFxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBCQ01BX0hPU1RfUENJX1BPU1NJQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCQ01BIE1vZHVsZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB1c2luZyBib3RoIGBCQ01BYCBhbmQgYEJDTUFfSE9TVF9TT0NgIHNob3VsZCBjb3ZlciB0aGUgcHJpbWFyeSBuZWVkcy4gQnV0LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiwgSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGBCQ01BX0hPU1RfUENJYC4gSXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gYmUgY29tcHJlaGVuc2l2ZSB3aGVuIGRlYWxpbmcgd2l0aCB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucy4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGFuZCBgYmNtYV9idXNfcmVnaXN0ZXJgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnRzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaW50ZXJmYWNlcy4gQW5kLCB0byBiZSBleHRyYSB0aG9yb3VnaCwgbGV0IG1lIGFsc28gbm90ZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBhbmQgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2Ag4oCTIHRoZXNlIGxvb2sgY3JpdGljYWwgZm9yIG92ZXJhbGwgZGV2aWNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBCQ01BIGZyYW1ld29yay4KCkkmIzM5O3ZlIGp1c3QgY29uZmlybWVkIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzLCBhcyBleHBlY3RlZCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gV2FpdCwgaG9sZCBvbi4uLiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzICpleHBvcnRlZCo/IFRoYXTigJlzIGludGVyZXN0aW5nLiBUaGF0IGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbnMgb3IgbW9kdWxlIGRlcGVuZGVuY2llcy4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDIwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldhaXQsIFRoYXQgQVBJIElzbiYjMzk7dCBFeHBvc2VkPyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIEJDTUEgYnVzIGRyaXZlciwgYW5kIEkgaGl0IGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHVzZSBgYmNtYV9idXNfcmVnaXN0ZXJgIHRvIGJyaW5nIHRoZSBidXMgaW50byBhIHVzYWJsZSBzdGF0ZS4gQnV0IEkganVzdCBjaGVja2VkIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBpdCYjMzk7cyBub3QgZXhwb3J0ZWQuICpUaGF0JiMzOTtzKiBub3QgZ29vZC4gTm93IEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFuIGFsdGVybmF0aXZlIEFQSSBjYWxsIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZywgb3IgaWYgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgdXBzdHJlYW0gZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGEgZGlmZmVyZW50IG1lYW5zIG9mIGluaXRpYWxpemF0aW9uIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIElzIGl0IHdyYXBwZWQgaW5zaWRlIGFub3RoZXIgbW9kdWxlIEkgaGF2ZSBtaXNzZWQ/IFRoaXMgaXMgZ29pbmcgdG8gc2xvdyB0aGluZ3MgZG93biBjb25zaWRlcmFibHkuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGJ1cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgYXJlIGRvbmUgY29ycmVjdGx5LiBUaW1lIHRvIGdyYWIgdGhlIHNvdXJjZSBjb2RlLCB0cmFjZSB0aGUgY2FsbCBzdGFjaywgYW5kIHNlZSB3aGF0IHRoZSBpbnRlbmRlZCBkZXNpZ24gcGF0dGVybiBpcy4gSSBhbSB2ZXJ5IGZhbWlsaWFyIHdpdGggdGhlIEJDTUEgYXJjaGl0ZWN0dXJlLCBidXQgdGhlc2UgaW1wbGVtZW50YXRpb24gZGV0YWlscyBjYW4gYmUgdHJpY2t5LiBUaGlzIGxhY2sgb2YgYSBkaXJlY3QgQVBJIGZ1bmN0aW9uIGlzIHVuZXhwZWN0ZWQsIGFuZCBtZWFucyBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgbXkgYXBwcm9hY2guIEkgbmVlZCB0byBrbm93IHdoeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaD0yOD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XG5kcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmg6Mjk6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKTtcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaC0zMC12b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jPTE2MD1zdGF0aWMgaW50IGJjbWFfaG9zdF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjItXHQvKiBSZWdpc3RlciAqL1xuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjIzOlx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTIyNC1cdGlmIChlcnIpXG4tLVxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjAzPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIyOS1cdC8qIFJlZ2lzdGVyICovXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMzA6XHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjMxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTM2OD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTM4Ny1cbmRyaXZlcnMvYmNtYS9tYWluLmM6Mzg4OmludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg5LXtcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTYzOD1zdGF0aWMgaW50IGJjbWFfZGV2aWNlX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY0Ny1cbmRyaXZlcnMvYmNtYS9tYWluLmM6NjQ4OnN0YXRpYyB1bnNpZ25lZCBpbnQgYmNtYV9idXNfcmVnaXN0ZXJlZDtcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ5LVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmM9NjU1PXN0YXRpYyBpbnQgX19pbml0IGJjbWFfaW5pdF9idXNfcmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY1OC1cbmRyaXZlcnMvYmNtYS9tYWluLmM6NjU5Olx0aWYgKGJjbWFfYnVzX3JlZ2lzdGVyZWQpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2MC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9iY21hL21haW4uYy02NjMtXHRpZiAoIWVycilcbmRyaXZlcnMvYmNtYS9tYWluLmM6NjY0Olx0XHRiY21hX2J1c19yZWdpc3RlcmVkID0gMTtcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjY1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE2MAoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA1MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJDTUEgTW9kdWxlJiMzOTtzIFJlYWNoYWJpbGl0eSBhbmQgUmVsZXZhbnQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGVycm9yIHBhdGggaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHB1YmxpY2x5IHZpc2libGUgZW50cnkgcG9pbnRzLCBidXQgbGV0JiMzOTtzIGJlIHRob3JvdWdoLgoKRmlyc3QsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHRhcmdldCBpc24mIzM5O3QgZXhwb3J0ZWQsIGl0JiMzOTtzIGludGVybmFsIHRvIHRoZSBgYmNtYWAgbW9kdWxlLiBIb3dldmVyLCBgYmNtYV9idXNfcmVnaXN0ZXJgIGFuZCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgYmVjYXVzZSB0aGV5IGFyZSBub24tc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbiBmb3IgcG90ZW50aWFsIHJlYWNoYWJpbGl0eS4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIHN0YXRpYywgd2hpY2ggSSYjMzk7ZCB1c3VhbGx5IGRpc21pc3MsIGJ1dCB3YWl04oCmCgpJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqaXMqIGFjdHVhbGx5IHJlYWNoYWJsZS4gQWgsIHJpZ2h0LiBQbGF0Zm9ybSBkZXZpY2VzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBEVCBvdmVybGF5cywgb3Igb3RoZXIgaW5qZWN0aW9uIG1lY2hhbmlzbXMsIG1ha2UgdGhlc2UgcHJvYmVzIHZpYWJsZSBwYXRocy4gQW5kIGBiY21hX2hvc3RfcGNpX3Byb2JlYCwgYmVpbmcgYSBQQ0kgcHJvYmUgZnVuY3Rpb24sIGlzIGVxdWFsbHkgcmVhY2hhYmxlIHZpYSBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIgd2hpY2ggY2FuIGluamVjdCBQQ0kgZGV2aWNlcy4gU28sIGJvdGggYXJlIHZhbGlkIHRhcmdldHMuCgpOb3csIGxldCYjMzk7cyBlbnVtZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgYmFzZXMuIEkgc2VlIGBDT05GSUdfQkNNQWAsIGBDT05GSUdfQkNNQV9IT1NUX1NPQ2AsIGFuZCBgQ09ORklHX0JDTUFfSE9TVF9QQ0lgIGFyZSByZWxldmFudCBoZXJlLgoKUmV2aWV3aW5nIG90aGVyIGZ1bmN0aW9ucywgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgaXMgc3RhdGljLCBzbyBJIGNhbiBwcm9iYWJseSBpZ25vcmUgdGhhdCwgYnV0IGBiY21hX2J1c19yZWdpc3RlcmAgaXMgbm9uLXN0YXRpYyBhbmQgKmNydWNpYWxseSosIGBiY21hX3VucmVnaXN0ZXJfY29yZXNgIGlzIGFsc28gbm9uLXN0YXRpYy4KClRoZSBwYXRjaCYjMzk7cyBzdGF0ZWQgcHVycG9zZSBpcyB0byBjb3JyZWN0IGVycm9yIGhhbmRsaW5nIGluIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgY2xlYW51cCBpbiB0aGUgZXZlbnQgdGhhdCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0aW5nIHRvIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhlcmVmb3JlIGl0IHNob3VsZCBiZSByZWFjaGVkIHZpYSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KCkJhc2VkIG9uIHRoaXMsIHRoZSBjb3JlIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoKKiAgIGBiY21hX2J1c19yZWdpc3RlcmAKKiAgIGBiY21hX3VucmVnaXN0ZXJfY29yZXNgCiogICBgYmNtYV9ob3N0X3NvY19wcm9iZWAgKERlc3BpdGUgYmVpbmcgc3RhdGljLCBpdCYjMzk7cyBhIHByb2JlIGZ1bmN0aW9uIHVzZWQgYnkgYSBkcml2ZXIgYW5kIGlzIG5vdCBsaWtlbHkgdG8gYmUgaW5saW5lZCBhbmQgKmlzKiBhIGtleSBlbnRyeSBwb2ludCkKKiAgIGBiY21hX2hvc3RfcGNpX3Byb2JlYCAoU2FtZSByZWFzb25pbmcgYXMgYWJvdmUpCgpBbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbWFpbjoKCiogICBgQkNNQWAKKiAgIGBCQ01BX0hPU1RfU09DYAoqICAgYEJDTUFfSE9TVF9QQ0lgCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRoaXMgYW5hbHlzaXMgd2lsbCBndWlkZSBteSBkZWVwZXIgcmV2aWV3IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JDTUEmIzM0OywKICAgICYjMzQ7QkNNQV9IT1NUX1NPQyYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmNtYV9idXNfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7YmNtYV91bnJlZ2lzdGVyX2NvcmVzJiMzNDssCiAgICAmIzM0O2JjbWFfaG9zdF9zb2NfcHJvYmUmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkNNQSYjMzQ7LAogICAgJiMzNDtCQ01BX0hPU1RfU09DJiMzNDssCiAgICAmIzM0O0JDTUFfSE9TVF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiY21hX2J1c19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtiY21hX3VucmVnaXN0ZXJfY29yZXMmIzM0OywKICAgICYjMzQ7YmNtYV9ob3N0X3NvY19wcm9iZSYjMzQ7LAogICAgJiMzNDtiY21hX2hvc3RfcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBCQ01BIGJ1cyByZWdpc3RyYXRpb24gcGF0aC4gSXQgZW5zdXJlcyB0aGF0IGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoKWAgZmFpbHMsIHRoZSBlcnJvciBpcyBwcm9wYWdhdGVkLCBhbmQgaW4gdGhlIGhvc3QgU29DIHByb2JlIGVycm9yIHBhdGgsIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoKWAgaXMgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFuIHVwIHJlZ2lzdGVyZWQgY29yZXMuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyByZXNvdXJjZSBsZWFrcyBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncyBvbiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGFsdGVyIGxvZ2ljIGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwppbmRleCAyMGIxODE2YzU3MGIyLi4wYmVjMGQwMDViODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYwpAQCAtMjM2LDYgJiM0MzsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlyZXR1cm4gZXJyOwogCiBlcnJfdW5tYXBfbW1pbzoKJiM0MzsJYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7CiAJaW91bm1hcChidXMtJmd0O21taW8pOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uYwppbmRleCA3MmYwNDVlNmVkNTEzLi41NWQxNzU0NmM3OTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmNtYS9tYWluLmMKQEAgLTQ3Nyw4ICYjNDM7NDc3LDkgQEAgaW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKQogCX0KIAogCS8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovCi0JYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7Ci0KJiM0MzsJZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCWJjbWFfaW5mbyhidXMsICYjMzQ7QnVzIHJlZ2lzdGVyZWRcbiYjMzQ7KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2hhbmdlcywgc3VtbWFyaXplZCBhcyBhIHRob3VnaHQgcHJvY2VzczoKCioqQW5hbHl6aW5nIEJDTUEgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2JjbWEvaG9zdF9zb2MuY2AgYW5kIGBkcml2ZXJzL2JjbWEvbWFpbi5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhlc2UgYXJlIGNvcmUgQkNNQSAoQnJvYWRjb20gQ29tbW9uIEFyY2hpdGVjdHVyZSkgYnVzIGRyaXZlciBjb21wb25lbnRzLgoKSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpdCYjMzk7cyBhZGRpbmcgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpO2AgdG8gdGhlIGBlcnJfdW5tYXBfbW1pb2AgZXJyb3IgcGF0aC4gVGhhdCBtYWtlcyBzZW5zZS4gSWYgdGhlcmUmIzM5O3MgYSBtZW1vcnkgbWFwcGluZyBlcnJvciBkdXJpbmcgcHJvYmUsIHdlIG5lZWQgdG8gY2xlYW4gdXAgYW55IHBhcnRpYWxseSByZWdpc3RlcmVkIGNvcmVzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHByZXZlbnRpbmcgZGFuZ2xpbmcgcmVmZXJlbmNlcywgYW5kIGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suCgpOb3csIGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIGlmIGl0JiMzOTtzIGFuIGVycm9yLiBPa2F5LCBzbyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmllcyB0byByZWdpc3RlciB0aGUgZGV2aWNlcyBvbiB0aGUgYnVzLCBhbmQgYW55IGVycm9yIGluIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3BhZ2F0ZWQgYmFjayB1cCB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYGJjbWFfYnVzX3JlZ2lzdGVyYC4KCldhaXQgYSBzZWNvbmQsIGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIHJldHVybmluZyBhbiBpbnRlZ2VyPyBJIG5lZWQgdG8gY29uZmlybSB0aGUgdHlwZSBpdCByZXR1cm5zLiBUaGF0JiMzOTtzIHVudXN1YWwgdG8gaGF2ZSBhbiBgaW50YCBmb3IgYSByZWdpc3RyYXRpb24gZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL2JjbWEvbWFpbi5jYCByaWdodCBhd2F5LCB0byBnZXQgdGhlIHJldHVybiB0eXBlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiY21hX3JlZ2lzdGVyX2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2JjbWEvbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmNtYS9tYWluLmM9Mjc4PXN0YXRpYyB2b2lkIGJjbWFfcmVnaXN0ZXJfY29yZShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxuZHJpdmVycy9iY21hL21haW4uYzoyOTE6c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XG4tLVxuZHJpdmVycy9iY21hL21haW4uYz0zODg9aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxuLS1cbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ4MS1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCQ01BIEJ1cyBSZWdpc3RyYXRpb24gRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBFc3NlbnRpYWxseSwgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZmFpbHMgd2l0aGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZSBlcnJvciBpcyBwcm9wZXJseSByZXR1cm5lZCBub3cuIFRoYXQmIzM5O3MgZ29vZC4gSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpZiBgYmNtYV9idXNfcmVnaXN0ZXJgIGZhaWxzLCBpdCB1c2VkIHRvIGp1bXAgdG8gYGVycl91bm1hcF9tbWlvYCwgYW5kIG5vdyBpdCBhbHNvIGNvcnJlY3RseSBjYWxscyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLgoKVGhpcyBpcyBjbGFzc2ljIHJlc291cmNlIGxlYWsgcHJldmVudGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIHRob3NlIGVycm9yIHBhdGhzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWx3YXlzIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IHRoaXMgbG9va3MgcHJldHR5IGNsZWFuLiBJdCYjMzk7cyBqdXN0IGFib3V0IGNsZWFudXAgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgZ2V0cyB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBJdCYjMzk7cyBhZGRpbmcgdGhhdCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCBjYWxsIGFuZCBjaGVja2luZyBpdHMgcmV0dXJuIHZhbHVlIHdoaWNoIHNlZW1zIHN0YW5kYXJkIGZvciB0aGVzZSB0eXBlcyBvZiBmaXhlcy4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCBmb3IgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLgoKV2UmIzM5O3JlIGluIGdvb2Qgc2hhcGUgc2luY2UgS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mg4oCTIHdl4oCZcmUgY292ZXJlZCB0aGVyZS4gQWxzbywgS01TQU4gaGFuZGxlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhlcmUmIzM5O3Mgbm90aGluZyBpbiB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhbnkuIEkgc3RpbGwgd2FudCB0byBxdWlja2x5IGRvdWJsZS1jaGVjayBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCwgYnV0IGJhc2VkIG9uIGEgcXVpY2sgc2NhbiwgdGhpcyBhbGwgc2VlbXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDExOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9iY21hL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkxOlx0c3RhdGljIGludCBiY21hX3JlZ2lzdGVyX2RldmljZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXG4gMjkyOlx0e1xuIDI5MzpcdFx0c3RydWN0IGJjbWFfZGV2aWNlICpjb3JlO1xuIDI5NDpcdFx0aW50IGVycjtcbiAyOTU6XHRcbiAyOTY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgXHUwMDI2YnVzLVx1MDAzZWNvcmVzLCBsaXN0KSB7XG4gMjk3Olx0XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4gMjk4Olx0XG4gMjk5Olx0XHRcdC8qIFdlIHN1cHBvcnQgdGhhdCBjb3JlIG91cnNlbHZlcyAqL1xuIDMwMDpcdFx0XHRzd2l0Y2ggKGNvcmUtXHUwMDNlaWQuaWQpIHtcbiAzMDE6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9DSElQQ09NTU9OOlxuIDMwMjpcdFx0XHRjYXNlIEJDTUFfQ09SRV9DSElQQ09NTU9OOlxuIDMwMzpcdFx0XHRjYXNlIEJDTUFfQ09SRV9OU19DSElQQ09NTU9OX0I6XG4gMzA0Olx0XHRcdGNhc2UgQkNNQV9DT1JFX1BDSTpcbiAzMDU6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfUENJRTpcbiAzMDY6XHRcdFx0Y2FzZSBCQ01BX0NPUkVfUENJRTI6XG4gMzA3Olx0XHRcdGNhc2UgQkNNQV9DT1JFX01JUFNfNzRLOlxuIDMwODpcdFx0XHRjYXNlIEJDTUFfQ09SRV80NzA2X01BQ19HQklUX0NPTU1PTjpcbiAzMDk6XHRcdFx0XHRjb250aW51ZTtcbiAzMTA6XHRcdFx0fVxuIDMxMTpcdFxuIDMxMjpcdFx0XHQvKiBFYXJseSBjb3JlcyB3ZXJlIGFscmVhZHkgcmVnaXN0ZXJlZCAqL1xuIDMxMzpcdFx0XHRpZiAoYmNtYV9pc19jb3JlX25lZWRlZF9lYXJseShjb3JlLVx1MDAzZWlkLmlkKSlcbiAzMTQ6XHRcdFx0XHRjb250aW51ZTtcbiAzMTU6XHRcbiAzMTY6XHRcdFx0bnAgPSBjb3JlLVx1MDAzZWRldi5vZl9ub2RlO1xuIDMxNzpcdFx0XHRpZiAobnAgXHUwMDI2XHUwMDI2ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcbiAzMTg6XHRcdFx0XHRjb250aW51ZTtcbiAzMTk6XHRcbiAzMjA6XHRcdFx0LyogT25seSBmaXJzdCBHTUFDIGNvcmUgb24gQkNNNDcwNiBpcyBjb25uZWN0ZWQgYW5kIHdvcmtpbmcgKi9cbiAzMjE6XHRcdFx0aWYgKGNvcmUtXHUwMDNlaWQuaWQgPT0gQkNNQV9DT1JFXzQ3MDZfTUFDX0dCSVQgXHUwMDI2XHUwMDI2XG4gMzIyOlx0XHRcdCAgICBjb3JlLVx1MDAzZWNvcmVfdW5pdCBcdTAwM2UgMClcbiAzMjM6XHRcdFx0XHRjb250aW51ZTtcbiAzMjQ6XHRcbiAzMjU6XHRcdFx0YmNtYV9yZWdpc3Rlcl9jb3JlKGJ1cywgY29yZSk7XG4gMzI2Olx0XHR9XG4gMzI3Olx0XG4gMzI4Olx0I2lmZGVmIENPTkZJR19CQ01BX1BGTEFTSFxuIDMyOTpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2MucGZsYXNoLnByZXNlbnQpIHtcbiAzMzA6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfcGZsYXNoX2Rldik7XG4gMzMxOlx0XHRcdGlmIChlcnIpXG4gMzMyOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBwYXJhbGxlbCBmbGFzaFxcblwmIzM0Oyk7XG4gMzMzOlx0XHR9XG4gMzM0Olx0I2VuZGlmXG4gMzM1Olx0XG4gMzM2Olx0I2lmZGVmIENPTkZJR19CQ01BX1NGTEFTSFxuIDMzNzpcdFx0aWYgKGJ1cy1cdTAwM2VkcnZfY2Muc2ZsYXNoLnByZXNlbnQpIHtcbiAzMzg6XHRcdFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFx1MDAyNmJjbWFfc2ZsYXNoX2Rldik7XG4gMzM5Olx0XHRcdGlmIChlcnIpXG4gMzQwOlx0XHRcdFx0YmNtYV9lcnIoYnVzLCBcJiMzNDtFcnJvciByZWdpc3RlcmluZyBzZXJpYWwgZmxhc2hcXG5cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MjIzCgkJCQkJCQlvdXRwdXQ6IDE1OAoJCQkJCQkJdGhvdWdodHM6IDE2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgY29kZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCYjMzk7cyB0aWdodGVuaW5nIHVwIGhvdyBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgZnJvbSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGFuZCBtYWtpbmcgc3VyZSBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCBpbiB0aGUgU29DIHByb2JlIGVycm9yIHBhdGguIFRoaXMgcHJldmVudHMgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgYW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MgYXJlIGxpa2VseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrIGFueXdheS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMg4oCTIGVycm9yIHByb3BhZ2F0aW9uIGFuZCBjbGVhbnVwIOKAkyBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIG1vZGlmaWNhdGlvbnMgdG8gZGF0YSBzZW50IHRvIHVzZXIgc3BhY2UsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24mIzM5O3Qgd2FycmFudGVkIGluIHRoaXMgY2FzZS4gVGhlIGltcHJvdmVtZW50cyB3aWxsIGNvbnRyaWJ1dGUgdG8gbW9yZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBidXMgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjE5LjcyOTUzMzUyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM3NjUzMzY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQ01BXCIsXG4gICAgXCJCQ01BX0hPU1RfU09DXCIsXG4gICAgXCJCQ01BX0hPU1RfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgICBcImJjbWFfdW5yZWdpc3Rlcl9jb3Jlc1wiLFxuICAgIFwiYmNtYV9ob3N0X3NvY19wcm9iZVwiLFxuICAgIFwiYmNtYV9ob3N0X3BjaV9wcm9iZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCBlbnN1cmVzIHRoYXQgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcygpYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQsIGFuZCBpbiB0aGUgaG9zdCBTb0MgcHJvYmUgZXJyb3IgcGF0aCwgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcygpYCBpcyBjYWxsZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIG9uIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHVyZSBwYXRocywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQga21lbWxlYWsuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoxOS43Mjk1MzkxODNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTgxMjQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZDRmMjY0MTk0MWMwNjhjOTkyODA3ZjZhZGVhOGIxOTY1YWM1ZDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTE6NTM6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xcbmluZGV4IDIwYjE4MTZjNTcwYjIuLjBiZWMwZDAwNWI4OWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmNcXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xcbkBAIC0yMzYsNiArMjM2LDcgQEAgc3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHJldHVybiBlcnI7XFxuIFxcbiBlcnJfdW5tYXBfbW1pbzpcXG4rXFx0YmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7XFxuIFxcdGlvdW5tYXAoYnVzLVxcdTAwM2VtbWlvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvbWFpbi5jIGIvZHJpdmVycy9iY21hL21haW4uY1xcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iY21hL21haW4uY1xcbisrKyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4gXFx0fVxcbiBcXG4gXFx0LyogUmVnaXN0ZXIgZm91bmQgY29yZXMgKi9cXG4tXFx0YmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XFxuLVxcbitcXHRlcnIgPSBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0YmNtYV9pbmZvKGJ1cywgXFxcIkJ1cyByZWdpc3RlcmVkXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoyMC4xMDIxNDg3MzRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1ODE4NDMwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkNNQVwiLFxuICAgIFwiQkNNQV9IT1NUX1NPQ1wiLFxuICAgIFwiQkNNQV9IT1NUX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJjbWFfYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJiY21hX3VucmVnaXN0ZXJfY29yZXNcIixcbiAgICBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgICBcImJjbWFfaG9zdF9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX3VubWFwX21taW86XG4rXHRiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTtcbiBcdGlvdW5tYXAoYnVzLVx1MDAzZW1taW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL21haW4uYyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2JjbWEvbWFpbi5jXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbitcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwiQnVzIHJlZ2lzdGVyZWRcXG5cIik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjIwLjEwMjE1MDIzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTQzNjk5ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCQ01BIFBhdGNoIGZvciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkcml2ZXJzL2JjbWEvaG9zdF9zb2MuY2AgYW5kIGBkcml2ZXJzL2JjbWEvbWFpbi5jYC4gVGhlIGNvcmUgY2hhbmdlcyBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoZSBCQ01BIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIG5vdyB1bnJlZ2lzdGVycyBjb3JlcyBvbiBhbiBlcnJvciBwYXRoIGJ5IGNhbGxpbmcgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpYC4gQWxzbywgYGJjbWFfYnVzX3JlZ2lzdGVyYCBub3cgZXhwbGljaXRseSByZXR1cm5zIGFuIGVycm9yIGlmIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKWAgZmFpbHMuIFRoZSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCBhbnkga2VybmVsIHBhdGNoLCBpcyB3aGV0aGVyIHdlIGNhbiBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgbW9kaWZpZWQgZXJyb3IgcGF0aCBhbmQgdGhlIGNvZGUgdW5kZXIgdGVzdC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZXNlIEJDTUEgZnVuY3Rpb25zIGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudD8gVGhpcyBpcyBCcm9hZGNvbSdzIHNwZWNpZmljIGJ1cyAoQU1CQS1iYXNlZCksIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFsbGVuZ2UuIEhvdyBlYXN5IGlzIGl0IHRvIGVtdWxhdGUgb3IgZXZlbiBwcm9wZXJseSBwcm9iZSBzdWNoIGEgYnVzPyBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBwbGF0Zm9ybSBkZXZpY2VzIGFuZCB0aGUgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlLlxuXG5IbW0sIHBsYXRmb3JtIGRldmljZXPigKYgdGhvc2UgY2FuIGJlIGNyZWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvciBtYW51YWxseS4gQ2FuIHN5emthbGxlciBpbmplY3Qgb3IgbWFuaXB1bGF0ZSB0aGUgZGV2aWNlIHRyZWU/ICBBbmQgaXMgdGhlcmUgYSB3YXkgdG8gZm9yY2UgYSBwbGF0Zm9ybSBkZXZpY2UgdG8gYmUgY3JlYXRlZCB2aWEgYHN5el9nZW5ldGxpbmtgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyAgV2FpdCwgbm8sIGBzeXprYWxsZXJgIGRvZXNuJ3QgcHJvdmlkZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGNyZWF0b3IsIHVubGVzcyBpdCdzIGEgdmVyeSBzcGVjaWZpYyBwc2V1ZG8tZGV2aWNlIG9yIGEgZHJpdmVyIGFsbG93cyBmb3IgYSBjdXN0b20gcGxhdGZvcm0gZGV2aWNlIGNyZWF0aW9uLlxuXG5Ob3csIGxldCdzIHpvb20gb3V0IGEgYml0LiBgYmNtYV9idXNfcmVnaXN0ZXJgIGlzIGNhbGxlZCBmcm9tIGBiY21hX2hvc3Rfc29jX3Byb2JlYCAqYW5kKiBwb3RlbnRpYWxseSBvdGhlciBwcm9iZSBmdW5jdGlvbnMgbGlrZSBgYmNtYV9ob3N0X3BjaV9wcm9iZWAuIFRoaXMgZ2l2ZXMgYSBzZWNvbmQgcG90ZW50aWFsIHJvdXRlIHRvIHRlc3QgdGhlIGNoYW5nZXMuIENhbiB3ZSByZWFjaCBgYmNtYV9ob3N0X3BjaV9wcm9iZWA/IFNpbmNlIFBDSSBkZXZpY2VzIGNhbiBiZSBlbXVsYXRlZCB0byBzb21lIGV4dGVudCwgYW5kIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHRoaXMgbWlnaHQgYmUgYSBwb3NzaWJpbGl0eS4gQnV0IFBDSSBmdXp6aW5nIGlzIG1vcmUgZm9jdXNlZCBvbiBzcGVjaWZpYyBQQ0kgZGV2aWNlcy4gSXQgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHNldHVwLlxuXG5VbHRpbWF0ZWx5LCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSB0ZXN0YWJsZSB3aXRoIGZ1enppbmcsIEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCB3b3JrcyBpbnRlcm5hbGx5IGFzIHdlbGwuIFRoYXQgaXMgdGhlIHRydWUgbGluY2hwaW4gYW5kIGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzoyNy4wOTY1MjI3NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODM2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtYV9yZWdpc3Rlcl9kZXZpY2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmNtYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iY21hL21haW4uYz0yNzg9c3RhdGljIHZvaWQgYmNtYV9yZWdpc3Rlcl9jb3JlKHN0cnVjdCBiY21hX2J1cyAqYnVzLCBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5MC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjI5MTpzdGF0aWMgaW50IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTM4OD1pbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTQ3OS1cXHQvKiBSZWdpc3RlciBmb3VuZCBjb3JlcyAqL1xcbmRyaXZlcnMvYmNtYS9tYWluLmM6NDgwOlxcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNDgxLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjI3LjE0MDUxNzExMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjY1MjY3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoZXJlIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCBpdHMgcHJpbWFyeSBwdXJwb3NlLiBJJ20gZ3Vlc3NpbmcsIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHJlc3BvbnNpYmxlIGZvciByZWdpc3RlcmluZyBCcm9hZGNvbSBkZXZpY2UgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc3lzdGVtLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBwcm9iaW5nIGZvciBoYXJkd2FyZSwgYWxsb2NhdGluZyByZXNvdXJjZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgZGV2aWNlIHN0cnVjdHVyZXMgZm9yIHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgaGFyZHdhcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGludGVyZmFjaW5nIHdpdGggdGhlIEJDTUEgYnVzIGFuZCB3aGljaCBkZXZpY2UgdHlwZXMgaXQgc3VwcG9ydHMuIERvZXMgaXQgaGFuZGxlIGRpZmZlcmVudCByZXZpc2lvbnMgb2YgdGhlIHNhbWUgY2hpcD8gQXJlIHRoZXJlIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMgaW4gdGhpcyBmdW5jdGlvbiB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZSBkZXZpY2UgZW51bWVyYXRpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGFzeW5jaHJvbm91c2x5PyBLbm93aW5nIHdoaWNoIGtlcm5lbCBzdWJzeXN0ZW1zIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXMgYWxzbyBpbXBvcnRhbnQuIEknbGwgYmUgbG9va2luZyBmb3IgY2FsbHMgdG8gdGhpbmdzIGxpa2UgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAsIGBidXNfcmVnaXN0ZXJgLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHJlc291cmNlIGFsbG9jYXRpb24gb3IgaW50ZXJydXB0IGhhbmRsaW5nLiBNeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBiY21hIHN0YWNrIGlzIHByZXR0eSBnb29kLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkga2V5IHRvIGEgcmVsaWFibGUsIHN0YWJsZSBzeXN0ZW0uIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyByZWdpc3RyYXRpb24gcHJvY2Vzcy4gQW55IGZhaWxlZCBhdHRlbXB0cyB0byByZWdpc3RlciBhIGRldmljZSBjb3VsZCBoYXZlIGNhc2NhZGluZyBlZmZlY3RzLCBsZWFkaW5nIHRvIGRldmljZSBtYWxmdW5jdGlvbiBvciBldmVuIHN5c3RlbSBpbnN0YWJpbGl0eS4gSXQgd2lsbCBhbHNvIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHRyaWdnZXIgdGhpcyBhdCBydW50aW1lIGlmIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjMxLjYwNzA0NTk3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXG4gMjkxOlxcdHN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbiAyOTI6XFx0e1xcbiAyOTM6XFx0XFx0c3RydWN0IGJjbWFfZGV2aWNlICpjb3JlO1xcbiAyOTQ6XFx0XFx0aW50IGVycjtcXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjb3JlLCBcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlcywgbGlzdCkge1xcbiAyOTc6XFx0XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0XFx0LyogV2Ugc3VwcG9ydCB0aGF0IGNvcmUgb3Vyc2VsdmVzICovXFxuIDMwMDpcXHRcXHRcXHRzd2l0Y2ggKGNvcmUtXFx1MDAzZWlkLmlkKSB7XFxuIDMwMTpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV80NzA2X0NISVBDT01NT046XFxuIDMwMjpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV9DSElQQ09NTU9OOlxcbiAzMDM6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfTlNfQ0hJUENPTU1PTl9COlxcbiAzMDQ6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfUENJOlxcbiAzMDU6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfUENJRTpcXG4gMzA2OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSUUyOlxcbiAzMDc6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfTUlQU183NEs6XFxuIDMwODpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV80NzA2X01BQ19HQklUX0NPTU1PTjpcXG4gMzA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTA6XFx0XFx0XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRcXHQvKiBFYXJseSBjb3JlcyB3ZXJlIGFscmVhZHkgcmVnaXN0ZXJlZCAqL1xcbiAzMTM6XFx0XFx0XFx0aWYgKGJjbWFfaXNfY29yZV9uZWVkZWRfZWFybHkoY29yZS1cXHUwMDNlaWQuaWQpKVxcbiAzMTQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdFxcdG5wID0gY29yZS1cXHUwMDNlZGV2Lm9mX25vZGU7XFxuIDMxNzpcXHRcXHRcXHRpZiAobnAgXFx1MDAyNlxcdTAwMjYgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKVxcbiAzMTg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdFxcdC8qIE9ubHkgZmlyc3QgR01BQyBjb3JlIG9uIEJDTTQ3MDYgaXMgY29ubmVjdGVkIGFuZCB3b3JraW5nICovXFxuIDMyMTpcXHRcXHRcXHRpZiAoY29yZS1cXHUwMDNlaWQuaWQgPT0gQkNNQV9DT1JFXzQ3MDZfTUFDX0dCSVQgXFx1MDAyNlxcdTAwMjZcXG4gMzIyOlxcdFxcdFxcdCAgICBjb3JlLVxcdTAwM2Vjb3JlX3VuaXQgXFx1MDAzZSAwKVxcbiAzMjM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdFxcdGJjbWFfcmVnaXN0ZXJfY29yZShidXMsIGNvcmUpO1xcbiAzMjY6XFx0XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHQjaWZkZWYgQ09ORklHX0JDTUFfUEZMQVNIXFxuIDMyOTpcXHRcXHRpZiAoYnVzLVxcdTAwM2VkcnZfY2MucGZsYXNoLnByZXNlbnQpIHtcXG4gMzMwOlxcdFxcdFxcdGVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihcXHUwMDI2YmNtYV9wZmxhc2hfZGV2KTtcXG4gMzMxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDMzMjpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBwYXJhbGxlbCBmbGFzaFxcXFxuXFxcIik7XFxuIDMzMzpcXHRcXHR9XFxuIDMzNDpcXHQjZW5kaWZcXG4gMzM1OlxcdFxcbiAzMzY6XFx0I2lmZGVmIENPTkZJR19CQ01BX1NGTEFTSFxcbiAzMzc6XFx0XFx0aWYgKGJ1cy1cXHUwMDNlZHJ2X2NjLnNmbGFzaC5wcmVzZW50KSB7XFxuIDMzODpcXHRcXHRcXHRlcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNmJjbWFfc2ZsYXNoX2Rldik7XFxuIDMzOTpcXHRcXHRcXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozMS42MDcxNjgxODVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzgzNTU3MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgRXJyb3IgSGFuZGxpbmcgaW4gYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJ20gbG9va2luZyBhdCB0aGlzIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGZ1bmN0aW9uLCBhbmQgaXQncyByZXR1cm5pbmcgYW4gYGludGAuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgb2YgY291cnNlLCB1c3VhbGx5IGluZGljYXRpbmcgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLiBCdXQgdGhlIHdheSBJJ20gc2VlaW5nIGl0IHVzZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUsIEknbSBnZXR0aW5nIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvZGUgbWlnaHQgaGF2ZSBpZ25vcmVkIHBvdGVudGlhbCBmYWlsdXJlIG9mIHRoYXQgYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgY2FsbCBzb21laG93LCBvciBtYXliZSBpdCBkaWRuJ3QuIEkgbmVlZCB0byBiZSBzdXJlIG9uIHRoaXMuIElmIHdlJ3JlIG5vdCBjaGVja2luZyB0aGUgcmV0dXJuIGZyb20gYHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcmAgcHJvcGVybHkgYWZ0ZXIgY2FsbGluZyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCwgdGhlbiB3ZSBhcmUgbGlrZWx5IG1pc3NpbmcgZXJyb3JzLiBJIG5lZWQgdG8ga25vdy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBiYWNrIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyBpdCB0byBzZWUgZXhhY3RseSBob3cgaXQgaGFuZGxlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCBwcm9wYWdhdGVzIHRoZSBlcnJvciBwcm9wZXJseSwgb3IgaWYgaXQgbWFza3MgaXQsIG1heWJlIGJ5IGFzc3VtaW5nIGEgZGVmYXVsdCByZXR1cm4uIEEgbWlzc2VkIGVycm9yIGhlcmUgY291bGQgbGVhZCB0byBzb21lIHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUsIHBvdGVudGlhbGx5IGNhdXNpbmcgaXNzdWVzIHdpdGggZGV2aWNlIGVudW1lcmF0aW9uIG9yIGV2ZW4gY3Jhc2hlcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozOC45OTA3MjgzMDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0MDpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBzZXJpYWwgZmxhc2hcXFxcblxcXCIpO1xcbiAzNDE6XFx0XFx0fVxcbiAzNDI6XFx0I2VuZGlmXFxuIDM0MzpcXHRcXG4gMzQ0OlxcdCNpZmRlZiBDT05GSUdfQkNNQV9ORkxBU0hcXG4gMzQ1OlxcdFxcdGlmIChidXMtXFx1MDAzZWRydl9jYy5uZmxhc2gucHJlc2VudCkge1xcbiAzNDY6XFx0XFx0XFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZiY21hX25mbGFzaF9kZXYpO1xcbiAzNDc6XFx0XFx0XFx0aWYgKGVycilcXG4gMzQ4OlxcdFxcdFxcdFxcdGJjbWFfZXJyKGJ1cywgXFxcIkVycm9yIHJlZ2lzdGVyaW5nIE5BTkQgZmxhc2hcXFxcblxcXCIpO1xcbiAzNDk6XFx0XFx0fVxcbiAzNTA6XFx0I2VuZGlmXFxuIDM1MTpcXHRcXHRlcnIgPSBiY21hX2dwaW9faW5pdChcXHUwMDI2YnVzLVxcdTAwM2VkcnZfY2MpO1xcbiAzNTI6XFx0XFx0aWYgKGVyciA9PSAtRU5PVFNVUFApXFxuIDM1MzpcXHRcXHRcXHRiY21hX2RlYnVnKGJ1cywgXFxcIkdQSU8gZHJpdmVyIG5vdCBhY3RpdmF0ZWRcXFxcblxcXCIpO1xcbiAzNTQ6XFx0XFx0ZWxzZSBpZiAoZXJyKSB7XFxuIDM1NTpcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyBHUElPIGRyaXZlcjogJWlcXFxcblxcXCIsIGVycik7XFxuIDM1NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAzNTc6XFx0XFx0fVxcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHRpZiAoYnVzLVxcdTAwM2Vob3N0dHlwZSA9PSBCQ01BX0hPU1RUWVBFX1NPQykge1xcbiAzNjA6XFx0XFx0XFx0ZXJyID0gYmNtYV9jaGlwY29fd2F0Y2hkb2dfcmVnaXN0ZXIoXFx1MDAyNmJ1cy1cXHUwMDNlZHJ2X2NjKTtcXG4gMzYxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDM2MjpcXHRcXHRcXHRcXHRiY21hX2VycihidXMsIFxcXCJFcnJvciByZWdpc3RlcmluZyB3YXRjaGRvZyBkcml2ZXJcXFxcblxcXCIpO1xcbiAzNjM6XFx0XFx0fVxcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHRyZXR1cm4gMDtcXG4gMzY2OlxcdH1cXG4gMzY3OlxcdFxcbiAzNjg6XFx0dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuIDM2OTpcXHR7XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsICp0bXA7XFxuIDM3MTpcXHRcXG4gMzcyOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb3JlLCB0bXAsIFxcdTAwMjZidXMtXFx1MDAzZWNvcmVzLCBsaXN0KSB7XFxuIDM3MzpcXHRcXHRcXHRpZiAoIWNvcmUtXFx1MDAzZWRldl9yZWdpc3RlcmVkKVxcbiAzNzQ6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDM3NTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29yZS1cXHUwMDNlbGlzdCk7XFxuIDM3NjpcXHRcXHRcXHRkZXZpY2VfdW5yZWdpc3RlcihcXHUwMDI2Y29yZS1cXHUwMDNlZGV2KTtcXG4gMzc3OlxcdFxcdH1cXG4gMzc4OlxcdFxcdGlmIChidXMtXFx1MDAzZWhvc3R0eXBlID09IEJDTUFfSE9TVFRZUEVfU09DKVxcbiAzNzk6XFx0XFx0XFx0cGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnVzLVxcdTAwM2VkcnZfY2Mud2F0Y2hkb2cpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHQvKiBOb3cgbm8gb25lIHVzZXMgaW50ZXJuYWxseS1oYW5kbGVkIGNvcmVzLCB3ZSBjYW4gZnJlZSB0aGVtICovXFxuIDM4MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29yZSwgdG1wLCBcXHUwMDI2YnVzLVxcdTAwM2Vjb3JlcywgbGlzdCkge1xcbiAzODM6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvcmUtXFx1MDAzZWxpc3QpO1xcbiAzODQ6XFx0XFx0XFx0cHV0X2RldmljZShcXHUwMDI2Y29yZS1cXHUwMDNlZGV2KTtcXG4gMzg1OlxcdFxcdH1cXG4gMzg2OlxcdH1cXG4gMzg3OlxcdFxcbiAzODg6XFx0aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbiAzODk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1MzozOC45OTA4Mjc0OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc4NTAwODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQkNNQSBCdXMgUmVnaXN0cmF0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBob25lcyBpbiBvbiB0aGUgY29yZSBjaGFuZ2U6IGBiY21hX2J1c19yZWdpc3RlcmAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpYC4gSWYgdGhhdCBmYWlscywgYGJjbWFfYnVzX3JlZ2lzdGVyYCB3aWxsIHJldHVybiBhbiBlcnJvciBpdHNlbGYuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpcyBhbHdheXMgZ29vZC4gVGhpcyBpcyBzdGFuZGFyZCBwcmFjdGljZSBpbiB0aGVzZSB0eXBlcyBvZiBsb3cgbGV2ZWwgZHJpdmVycy5cblxuVGhlbiwgSSBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBTcGVjaWZpY2FsbHksIG9uIGFuIGVycm9yIHBhdGgsIHRoZSBjb2RlIG5vdyBjYWxscyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cylgLiBUaGF0J3Mgc21hcnQuIEl0J3MgY2xlYW5pbmcgdXAgcmVzb3VyY2VzIHByb3Blcmx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nIGR1cmluZyB0aGUgcHJvYmUuIE1ha2VzIHNlbnNlLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgeW91J3JlIG5vdCBsZWF2aW5nIGFueSBkYW5nbGluZyByZXNvdXJjZXMgYmVoaW5kLiBJbXBvcnRhbnQgZm9yIHN0YWJpbGl0eSBhbmQgcHJldmVudGluZyBtZW1vcnkgbGVha3MsIG9yIG90aGVyIHBsYXRmb3JtIGlzc3Vlcy5cblxuTm93IEknbSB0aGlua2luZywgaXMgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGV2ZW4gKnJlYWNoYWJsZSo/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpdHMgY29udGV4dC4gQWgsIHJpZ2h0LCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLiBBbHJpZ2h0LiBUaGF0IGNvbmZpcm1zIGl0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgZHJpdmVyIGxpZmVjeWNsZSwgYW5kIHRoZSBwYXRjaCBtYWtlcyBzZW5zZSBpbiB0aGF0IGNvbnRleHQuIFRoaXMgaXMgYWJvdXQgbWFraW5nIHN1cmUgdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBhbmQgZGV2aWNlIGVudW1lcmF0aW9uIGFyZSBoYW5kbGVkIHNhZmVseSwgd2l0aCBncmFjZWZ1bCBlcnJvciByZWNvdmVyeSBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHNldHVwLiBHb29kIHN0dWZmLCBnb29kIHN0dWZmLiBJJ2xsIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIHdpdGggaG93IHRoaXMgd29ya3Mgb24gdGhlIFNPQy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NDMuMjY5MzMwODFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTIxMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDItI2lmZGVmIENPTkZJR19PRlxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjYzLVxcdH0sXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0OlxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjUtXFx0LnJlbW92ZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjQzLjMxMjg1NzM3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA1Nzk3NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmNtYV9ob3N0X3NvY19kcml2ZXIgUHJvYmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGJjbWFfaG9zdF9zb2NfZHJpdmVyYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiBzeXprYWxsZXIsIG91ciBmdXp6ZXIsIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uPyBUaGUgb2J2aW91cyB3YXkgdG8gdHJpZ2dlciBgcHJvYmVgIGlzIGJ5IGNyZWF0aW5nIGEgcGxhdGZvcm0gZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgZHJpdmVyLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaWRlbnRpZmllcyBhIG1hdGNoaW5nIGRldmljZS4gSSBuZWVkIHRvIGNoZWNrIGl0cyBuYW1lIG9yIG1hdGNoaW5nIHRhYmxlIHRvIHNlZSB3aGF0IGNoYXJhY3RlcmlzdGljcyBpdCdzIGV4cGVjdGluZyBpbiBhIHBsYXRmb3JtIGRldmljZSB0byBjb25zaWRlciBpdHNlbGYgYSBnb29kIGZpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBgc3l6a2FsbGVyYCwgdGhlIGRldmljZSwgYW5kIHRoZSBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo0Ny4wMTg2NTgyNzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iY21hL2hvc3Rfc29jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbiAyNTE6XFx0fVxcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY21hX2hvc3Rfc29jX29mX21hdGNoW10gPSB7XFxuIDI1NDpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcImJyY20sYnVzLWF4aVxcXCIsIH0sXFxuIDI1NTpcXHRcXHR7fSxcXG4gMjU2OlxcdH07XFxuIDI1NzpcXHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBiY21hX2hvc3Rfc29jX29mX21hdGNoKTtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmNtYV9ob3N0X3NvY19kcml2ZXIgPSB7XFxuIDI2MDpcXHRcXHQuZHJpdmVyID0ge1xcbiAyNjE6XFx0XFx0XFx0Lm5hbWUgPSBcXFwiYmNtYS1ob3N0LXNvY1xcXCIsXFxuIDI2MjpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBiY21hX2hvc3Rfc29jX29mX21hdGNoLFxcbiAyNjM6XFx0XFx0fSxcXG4gMjY0OlxcdFxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG4gMjY1OlxcdFxcdC5yZW1vdmVcXHRcXHQ9IGJjbWFfaG9zdF9zb2NfcmVtb3ZlLFxcbiAyNjY6XFx0fTtcXG4gMjY3OlxcdFxcbiAyNjg6XFx0aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX3JlZ2lzdGVyX2RyaXZlcih2b2lkKVxcbiAyNjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo0Ny4wMTg3MjU2MjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ5Mzg0MTU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTeXprYWxsZXIgRGV2aWNlIENyZWF0aW9uIENvbnVuZHJ1bSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgU3l6a2FsbGVyIGNhbiBnZW5lcmF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBcIkhleSwgZG9lc24ndCBpdCBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfZGV2X2NyZWF0ZWA/XCIgTm9wZSwgdGhhdCdzIGEgZGVhZCBlbmQuIFN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhICpnZW5lcmljKiBwbGF0Zm9ybSBkZXZpY2UgY3JlYXRvciBiYWtlZCBpbi4gSSBzdGFydGVkIHdvbmRlcmluZyBpZiBtYXliZSBpdCBsZXZlcmFnZXMgZGV2aWNlIHRyZWUgb3ZlcmxheXMgd2hlbiBpdCBoYXMgdGhlIGNhcGFiaWxpdHksIGJ1dCBnZW5lcmFsbHksIHRoYXQncyBub3QgdGhlIGNhc2UuIFxuXG5UaGVuIEkgd2FzIGxpa2UsIHdhaXQgYSBtaW51dGUsIGRvZXNuJ3QgaXQgaGF2ZSBzb21ldGhpbmcgd2l0aCBgc3l6X2dlbmV0bGlua2A/IEJ1dCBubywgdGhhdCdzIE5ldGxpbmstc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHN5el91c2JfY29ubmVjdGA/IEFoLCB0aGF0J3Mgb2J2aW91c2x5IGp1c3QgVVNCLlxuXG5Ib2xkIG9uLi4uIGNhbiBJIHJlYWNoIGBiY21hX2J1c19yZWdpc3RlcmAgc29tZWhvdyB0aHJvdWdoIFBDST8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgYXZlbnVlLiBUaGlzIG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjUzOjUxLjUxMjU3MDE4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNDg4MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmg9Mjg9dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaDoyOTppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbmRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaC0zMC12b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpO1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MTYwPXN0YXRpYyBpbnQgYmNtYV9ob3N0X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjIyLVxcdC8qIFJlZ2lzdGVyICovXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MjIzOlxcdGVyciA9IGJjbWFfYnVzX3JlZ2lzdGVyKGJ1cyk7XFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjI0LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0yMDM9c3RhdGljIGludCBiY21hX2hvc3Rfc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMjktXFx0LyogUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYzoyMzA6XFx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMzEtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9MzY4PXZvaWQgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy0zODctXFxuZHJpdmVycy9iY21hL21haW4uYzozODg6aW50IGJjbWFfYnVzX3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMzg5LXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9NjM4PXN0YXRpYyBpbnQgYmNtYV9kZXZpY2VfdWV2ZW50KGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy02NDctXFxuZHJpdmVycy9iY21hL21haW4uYzo2NDg6c3RhdGljIHVuc2lnbmVkIGludCBiY21hX2J1c19yZWdpc3RlcmVkO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjQ5LVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz02NTU9c3RhdGljIGludCBfX2luaXQgYmNtYV9pbml0X2J1c19yZWdpc3Rlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYy02NTgtXFxuZHJpdmVycy9iY21hL21haW4uYzo2NTk6XFx0aWYgKGJjbWFfYnVzX3JlZ2lzdGVyZWQpXFxuZHJpdmVycy9iY21hL21haW4uYy02NjAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2My1cXHRpZiAoIWVycilcXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY2NDpcXHRcXHRiY21hX2J1c19yZWdpc3RlcmVkID0gMTtcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NTEuNTU2NjI0MDk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NjU1NTY2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcgb24gQkNNQSBhbmQgUENJIERldmljZSBGdXp6aW5nKipcblxuT2theSwgc28gYGJjbWFfYnVzX3JlZ2lzdGVyYCBpcyBpbmRlZWQgY2FsbGVkIGZyb20gYGJjbWFfaG9zdF9wY2lfcHJvYmVgLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBCcm9hZGNvbSBQQ0kgZGV2aWNlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGdvZXMgdG8gZnV6emluZyB0aGVzZSBQQ0kgZGV2aWNlcy4gIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgUENJIGNhcGFiaWxpdGllcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByaWdodCBhcHByb2FjaC4gSSByZWNhbGwgc2VlaW5nIFBDSSBmdXp6aW5nIG1lbnRpb25lZCwgbWF5YmUgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCBvciBzdGFuZGFyZCBRRU1VIGVtdWxhdGlvbi4gXG5cbkhvbGQgb24sIEkgd2FzIHRoaW5raW5nIG9mIHNwZWNpZmljIHN5c3RlbSBjYWxscyB0byBhZGQgZGV2aWNlcywgYnV0IEkgcmVtZW1iZXIgaXQncyBhIGJpdCBtb3JlIG51YW5jZWQuIEFjdHVhbGx5LCBJIHdhcyBnZXR0aW5nIHRoYXQgY29uZnVzZWQgd2l0aCBvdGhlciBkZXZpY2UgdHlwZXMgbGlrZSBVU0IuIFN5emthbGxlciBzdXBwb3J0cyBQQ0kgZnV6emluZyB0aHJvdWdoIHRoZSB2ZmlvIGludGVyZmFjZS4gTm8sIHRoYXQncyBub3QgcmlnaHQuIExldCBtZSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb247IGlzbid0IHRoZXJlIGEgYHN5cy9saW51eC9kZXZfcGNpLnR4dGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdD8gSSBuZWVkIHRvIHZlcmlmeSBob3cgc3l6a2FsbGVyIGhhbmRsZXMgdGhpcywgSSdtIHNlY29uZC1ndWVzc2luZyBteXNlbGYuXG5cblJpZ2h0LCB0aGUgcHJvbXB0IGlzIGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzLiAgVGhhdCBtZWFucyB3ZSdyZSBsb29raW5nIGF0IHRoaW5ncyB0aGF0IGxpa2VseSBuZWVkICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgbm90IHNvbWV0aGluZyByZWFkaWx5IGVtdWxhdGVkLiBBaCwgYGJjbWFfaG9zdF9wY2lfcHJvYmVgIGlzIGZvciBCcm9hZGNvbSBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIGFuZCAqdGhhdCogaXMgdGhlIGtleSBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiBgYmNtYV9ob3N0X3BjaV9wcm9iZWAgdG8gdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgZGV2aWNlcyB3ZSdyZSBkZWFsaW5nIHdpdGguIE9rYXksIGNoZWNraW5nIHRoZSBQQ0kgSURzIGlzIHRoZSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTM6NTguMjIyMTgyODUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjcxNTgwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX3BjaV9icmlkZ2VfdGJsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmNtYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MjczPXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhiY21hX3BtX29wcywgYmNtYV9ob3N0X3BjaV9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMjgyLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYmNtYV9wY2lfYnJpZGdlX3RibFtdID0ge1xcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTI4NC1cXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwNTc2KSB9LFxcbi0tXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmMtMzA1LX07XFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM6MzA2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiY21hX3BjaV9icmlkZ2VfdGJsKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0zMDctXFxuZHJpdmVycy9iY21hL2hvc3RfcGNpLmM9MzA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY21hX3BjaV9icmlkZ2VfZHJpdmVyID0ge1xcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMwOS1cXHQubmFtZSA9IFxcXCJiY21hLXBjaS1icmlkZ2VcXFwiLFxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jOjMxMDpcXHQuaWRfdGFibGUgPSBiY21hX3BjaV9icmlkZ2VfdGJsLFxcbmRyaXZlcnMvYmNtYS9ob3N0X3BjaS5jLTMxMS1cXHQucHJvYmUgPSBiY21hX2hvc3RfcGNpX3Byb2JlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1Mzo1OC4yNjQ5MDQwNTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3NTE0NDQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIHRoZSBQQ0kgRGV2aWNlKipcblxuT2theSwgc28gdGhlc2UgYXJlIGRlZmluaXRlbHkgQnJvYWRjb20gUENJIGRldmljZXMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIFFFTVUgcHJvcGVybHkgZW11bGF0ZXMgdGhlbS4gSSBrbm93IFFFTVUgaGFzIHNvbWUgQnJvYWRjb20gbmV0d29yayBjYXJkIHN1cHBvcnQsIGJ1dCBJJ20gbm90IHN1cmUgYWJvdXQgdGhlc2Ugc3BlY2lmaWMgZGV2aWNlcy4gVGhlbiwgSSByZW1lbWJlciBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBpcyBpbnRlcmVzdGluZyBhcyBpdCBhbGxvd3MgdGhlIGluamVjdGlvbiBvZiBhcmJpdHJhcnkgUENJIGRldmljZXMuIEknbGwgbmVlZCB0byBjaGVjayBpZiBzeXprYWxsZXIgaXMgbGV2ZXJhZ2luZyBQQ0kgZnV6emluZywgd2hpY2ggbWlnaHQgcHJvdmlkZSBhIGNsdWUgb24gaG93IHRvIGFwcHJvYWNoIHRoaXMuXG5cbldhaXQsIG5vdyBJIHJlcmVhZCB0aGUgcHJvbXB0LiBJdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlICpwaHlzaWNhbCogUENJZSBoYXJkd2FyZSwgc29tZXRoaW5nIG5vdCBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VLiBUaGF0IGxpc3QgY29udGFpbnMgZHJpdmVycyBzdWNoIGFzIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIE15IHRob3VnaHRzIHJhY2UgYWhlYWQ6IGlzIGBCQ01BYCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgdGhhdCAqYWxzbyogcmVsaWVzIG9uIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3csIGBCQ01BYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gSXQncyB0aGUgQnJvYWRjb20gQU1CQSBidXMgdXNlZCBpbiBCcm9hZGNvbSB3aXJlbGVzcyBjYXJkcyBsaWtlIGBiNDNgIGFuZCBgYnJjbXNtYWNgLCBhbmQgaW4gU29Dcy4gVGhhdCBjb3VsZCBiZSBhIHByb2JsZW0gaW4gYW4gZW11bGF0ZWQgZW52aXJvbm1lbnQuXG5cbkNhbiBzeXprYWxsZXIgZXZlbiByZWFjaCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgb3IgYGJjbWFfaG9zdF9wY2lfcHJvYmVgPyBIb2xkIG9uLi4uIHRoZSBwYXRjaCBhdXRob3IgaXMgbGlzdGVkIGFzIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAuIFdhaXQgYSBtaW51dGUsIHRoYXQgbWVhbnMgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIGdlbmVyYXRlZCBhIHBhdGNoISBUaGF0J3MgYSBodWdlIGNsdWUhIElmIGl0IGZvdW5kIGEgYnVnLCBpdCBoYXMgdG8gYmUgcmVhY2hhYmxlIHdpdGhpbiBpdHMgZW52aXJvbm1lbnQuIE5vdyBJJ20gZm9jdXNlZDogaG93IGRpZCBzeXprYWxsZXIgcmVhY2ggYGJjbWFfaG9zdF9zb2NfcHJvYmVgP1xuXG5MZXQgbWUgdGhpbmsuIEknbGwgc3RhcnQgY2hlY2tpbmcgZm9yIHNvbWUga2luZCBvZiBtZWNoYW5pc20gZm9yIHBsYXRmb3JtIGRldmljZSBjcmVhdGlvbiB0byB0cmlnZ2VyIHRoZSBwcm9iZSwgb3IgaWYgaXQncyBiZWluZyB0cmlnZ2VyZWQgdmlhIGFub3RoZXIgc3Vic3lzdGVtLiBPa2F5LCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUuIENvdWxkIGl0IGJlIHRyaWdnZXJlZCBieSBzb21ldGhpbmcgbGlrZSBgc3l6X2Rldl9jcmVhdGVgPyBObywgc3l6a2FsbGVyIGRvZXNuJ3QgYXBwZWFyIHRvIGxldmVyYWdlIHRoYXQuXG5cbldhaXQuLi4gY291bGQgYGJjbWFgIGJlIGEgdmlydHVhbCBkZXZpY2Ugb3IgbWF5YmUgYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggYSBuZXRsaW5rIGludGVyZmFjZT8gVGhhdCdzIGEgcG9zc2liaWxpdHkuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIHNwZWNpZmljcyBvZiBob3cgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzIGhhbmRsZWQuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscyBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDowNi45NDAwNTExNjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjc2MTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvaG9zdF9zb2MuYz0xODk9aW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbWFfc29jICpzb2MpXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDItI2lmZGVmIENPTkZJR19PRlxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIwMzpzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yMDQte1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM9MjU5PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbWFfaG9zdF9zb2NfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmMtMjYzLVxcdH0sXFxuZHJpdmVycy9iY21hL2hvc3Rfc29jLmM6MjY0OlxcdC5wcm9iZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19wcm9iZSxcXG5kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYy0yNjUtXFx0LnJlbW92ZVxcdFxcdD0gYmNtYV9ob3N0X3NvY19yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjA2Ljk4MzczMTc4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzc1MzU2MjU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgQkNNQSBFcnJvciBQYXRoOiBBIEZ1enppbmcgT3Bwb3J0dW5pdHkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoaXMgY29kZT9cIiBJIGtub3cgaXQgY2FuIGluamVjdCBwbGF0Zm9ybSBkZXZpY2VzLCBtYXliZSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cz8gT3IgcGVyaGFwcyBpdCB1c2VzIHNvbWUga2luZCBvZiBwc2V1ZG8tc3lzY2FsbC4gTm8sIG5vIGBzeXpfZ2VuZXRsaW5rYCwgdGhhdCdzIG5vdCBpdC5cblxuSSdkIGxpa2UgdG8gY2hlY2sgaWYgc3l6a2FsbGVyIGNhbiBkaXJlY3RseSByZWFjaCB0aGUgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGZ1bmN0aW9uIGJ5IGxvb2tpbmcgaXQgdXAgaW4gdGhlIHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGJ1dCBJIGRvbid0IGhhdmUgdGhhdCBjYXBhYmlsaXR5IGhlcmUuIEhvd2V2ZXIsIEkgY2FuIGNoZWNrIGlmIHRoZXJlIGlzIGEgc3l6a2FsbGVyIGZ1bmN0aW9uIHRoYXQgY2FuIGNyZWF0ZSBwbGF0Zm9ybSBkZXZpY2VzLiBJIHJlY2FsbCB0aGF0IHN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZXMgdmlhIGBzeXNmc2AsIGBjb25maWdmc2AsIG9yIGBuZXRsaW5rYC4gQnV0LCB0aGVyZSdzIGBidHNkaW9gIG9yIGBtYWM4MDIxMV9od3NpbWAsIHRvby5cblxuVGhlbiBJIHNhdyB0aGUgYXV0aG9yOiBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBXYWl0IGEgbWludXRlLi4uIHRoYXQgKm1lYW5zKiBzeXprYWxsZXIgYWN0dWFsbHkgaGl0IHRoaXMgY29kZSFcblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBwYXRjaCB3b3J0aCBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGVycm9yIHBhdGhzIGluIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBhbmQgYGJjbWFfYnVzX3JlZ2lzdGVyYC4gU3BlY2lmaWNhbGx5LCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscywgdGhlcmUncyBhIG5ldyBlcnJvciByZXR1cm4uIFRoZSBmYWlsdXJlIHByb3BhZ2F0ZXMgdXAgdG8gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgYW5kIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBub3cgaGFuZGxlcyB0aGlzIGVycm9yLCB1bnJlZ2lzdGVyaW5nIGNvcmVzIGFuZCB1bm1hcHBpbmcgTU1JTy4gVGhpcyBpcyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBwZXJmZWN0IHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIGl0IGNhbiB1bmNvdmVyIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHRoYXQgb2NjdXIgd2hlbiBlcnJvcnMgYXJlIGhhbmRsZWQuXG5cbk5vdywgd2FpdCwgdGhlIHByb21wdCBzYXlzIG5vdCB0byByZXR1cm4gXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiB0aGUgcGF0Y2ggY29uY2VybnMgdW5yZWFjaGFibGUgY29kZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuXG5cblNvLCBpcyBCQ01BIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VPyBJIHdhcyB0aGlua2luZyBhYm91dCBzeXprYWxsZXIncyBQQ0kgY2FwYWJpbGl0aWVzLiBObywgbm90IHRoYXQuIEkga25vdyBzeXprYWxsZXIgaGFzIHZpcnR1YWwgUENJIGZ1enppbmcgc3VwcG9ydCB2aWEgYSBtb2R1bGUgb3IgdXNlcmZhdWx0ZmQuIEJ1dCBgYmNtYV9ob3N0X3NvY19wcm9iZWAgaXMgYSAqcGxhdGZvcm0qIGRyaXZlciBwcm9iZS4gSG93IHdvdWxkIHN5emthbGxlciByZWFjaCBhIHBsYXRmb3JtIGRyaXZlciBwcm9iZSBmb3Igc29tZXRoaW5nIGxpa2UgXCJicmNtLGJ1cy1heGlcIj9cblxuQ291bGQgaXQgYmUgRGV2aWNlIFRyZWUgb3ZlcmxheSBpbmplY3Rpb24/IEFoYSEgU3l6a2FsbGVyIGhhcyBgc3l6X21vdW50X2ltYWdlYCwgbm8sIG5vLCBub3QgdGhhdC4gQnV0IHdhaXQsIHN5emthbGxlciBjYW4gbG9hZCBkZXZpY2UgdHJlZSBvdmVybGF5cyB0aHJvdWdoIGBzeXNmc2AhIFNwZWNpZmljYWxseSwgYC9zeXMva2VybmVsL2NvbmZpZy9kZXZpY2UtdHJlZS9vdmVybGF5cy9gLiBJIHJlbWVtYmVyIGBDT05GSUdfT0ZfT1ZFUkxBWWAgaXMgYSB0aGluZy5cblxuU28sIHN5emthbGxlciAqY2FuKiBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyBieSBsb2FkaW5nIERUIG92ZXJsYXlzISBUaGlzIG1lYW5zIGFueSBwbGF0Zm9ybSBkcml2ZXIgd2l0aCBhbiBgb2ZfbWF0Y2hfdGFibGVgIGlzIHJlYWNoYWJsZSEgVGhlIGBiY21hX2hvc3Rfc29jX2RyaXZlcmAgaGFzIGBvZl9tYXRjaF90YWJsZSA9IGJjbWFfaG9zdF9zb2Nfb2ZfbWF0Y2hgLiBBbmQgdGhhdCBgb2ZfbWF0Y2hfdGFibGVgIGhhcyBgLmNvbXBhdGlibGUgPSBcImJyY20sYnVzLWF4aVwiYC4gQnJpbGxpYW50ISBTeXprYWxsZXIgY2FuIGxvYWQgYSBEVCBvdmVybGF5IHdpdGggdGhhdCBjb21wYXRpYmxlIHN0cmluZywgYW5kIHRyaWdnZXIgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLlxuXG5ZZXMsIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLlxuXG5MZXQncyBtb3ZlIG9uIGFuZCBmaWd1cmUgb3V0IHdoYXQgY29uZmlncyBhcmUgbmVlZGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjI0LjczNzI5NzA1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0OTY4MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJDTUFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoyOmNvbmZpZyBCQ01BX1BPU1NJQkxFXFxuZHJpdmVycy9iY21hL0tjb25maWctMy1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjc6bWVudWNvbmZpZyBCQ01BXFxuZHJpdmVycy9iY21hL0tjb25maWctOC1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gc3BlY2lmaWMgQU1CQVxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnPTE0PWlmIEJDTUFcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE2LSMgU3VwcG9ydCBmb3IgQmxvY2stSS9PLiBTRUxFQ1QgdGhpcyBmcm9tIHRoZSBkcml2ZXIgdGhhdCBuZWVkcyBpdC5cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxNzpjb25maWcgQkNNQV9CTE9DS0lPXFxuZHJpdmVycy9iY21hL0tjb25maWctMTgtXFx0Ym9vbFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTE5LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjIwOmNvbmZpZyBCQ01BX0hPU1RfUENJX1BPU1NJQkxFXFxuZHJpdmVycy9iY21hL0tjb25maWctMjEtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9iY21hL0tjb25maWctMjQtXFxuZHJpdmVycy9iY21hL0tjb25maWc6MjU6Y29uZmlnIEJDTUFfSE9TVF9QQ0lcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTMwLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjMxOmNvbmZpZyBCQ01BX0hPU1RfU09DXFxuZHJpdmVycy9iY21hL0tjb25maWctMzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgQkNNQSBpbiBhIFNvQ1xcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjQxOmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy00Mi1cXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTU2LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjU3OmNvbmZpZyBCQ01BX0RSSVZFUl9QQ0lfSE9TVE1PREVcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy01OC1cXHRib29sIFxcXCJEcml2ZXIgZm9yIFBDSSBjb3JlIHdvcmtpbmcgaW4gaG9zdG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy02Mi1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo2Mzpjb25maWcgQkNNQV9EUklWRVJfTUlQU1xcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTY0LVxcdGJvb2wgXFxcIkJDTUEgQnJvYWRjb20gTUlQUyBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTcxLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjcyOmNvbmZpZyBCQ01BX1BGTEFTSFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTczLVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnOjc3OmNvbmZpZyBCQ01BX1NGTEFTSFxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcIkNoaXBDb21tb24tYXR0YWNoZWQgc2VyaWFsIGZsYXNoIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy04OC1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo4OTpjb25maWcgQkNNQV9ORkxBU0hcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05MC1cXHRib29sXFxuLS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05My1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzo5NDpjb25maWcgQkNNQV9EUklWRVJfR01BQ19DTU5cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy05NS1cXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIEdCSVQgTUFDIENPTU1PTiBjb3JlIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMDI6Y29uZmlnIEJDTUFfRFJJVkVSX0dQSU9cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMDMtXFx0Ym9vbCBcXFwiQkNNQSBHUElPIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmNtYS9LY29uZmlnLTExMC1cXG5kcml2ZXJzL2JjbWEvS2NvbmZpZzoxMTE6Y29uZmlnIEJDTUFfREVCVUdcXG5kcml2ZXJzL2JjbWEvS2NvbmZpZy0xMTItXFx0Ym9vbCBcXFwiQkNNQSBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU0OjI0Ljc4MDc5NzU5NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODk0MTIzMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIG9uIEJDTUEgYW5kIGl0cyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB3b3JraW5nIHdpdGggYEJDTUFgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIGBCQ01BX0hPU1RfU09DYC4gU2VlbXMgbGlrZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoYXQgYEJDTUFfSE9TVF9TT0NgIHBhcnQsIGFzIGl0cyBiZWhhdmlvciB3aWxsIGxpa2VseSBkaWN0YXRlIGhvdyBgQkNNQWAgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcGllY2VzIHRoaXMgaG9zdCBzaWRlIFNPQyBlbGVtZW50IHJlcXVpcmVzIG9yIHJlbGllcyB1cG9uLCBhcyB0aGlzIHdpbGwgZGlyZWN0bHkgaW5mbHVlbmNlIG15IGltcGxlbWVudGF0aW9uIHBsYW4gZm9yIHRoZSBicm9hZGVyIGBCQ01BYCBzeXN0ZW0uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjb25zaWRlciBhbnkgYXJjaGl0ZWN0dXJhbCBpbXBhY3QgdGhhdCB0aGVzZSBjb25zdHJhaW50cyBoYXZlIG9uIHRoZSBgQkNNQWAgbW9kdWxlIGFzIGEgd2hvbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzc0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6MzIuNjc0OTIzMDIxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmNtYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI1OlxcdGNvbmZpZyBCQ01BX0hPU1RfUENJXFxuICAyNjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIG9uIFBDSS1ob3N0IGJ1c1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxcbiAgMjg6XFx0XFx0c2VsZWN0IEJDTUFfRFJJVkVSX1BDSVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBCQ01BX0hPU1RfU09DXFxuICAzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBCQ01BIGluIGEgU29DXFxcIlxcbiAgMzM6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG4gIDM0OlxcdFxcdGhlbHBcXG4gIDM1OlxcdFxcdCAgSG9zdCBpbnRlcmZhY2UgZm9yIGEgQnJvYWRjb20gQUlYIGJ1cyBkaXJlY3RseSBtYXBwZWQgaW50b1xcbiAgMzY6XFx0XFx0ICB0aGUgbWVtb3J5LiBUaGlzIG9ubHkgd29ya3Mgd2l0aCB0aGUgQnJvYWRjb20gU29DcyBmcm9tIHRoZVxcbiAgMzc6XFx0XFx0ICBCQ000N1hYIGxpbmUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQkNNQV9EUklWRVJfUENJXFxuICA0MjpcXHRcXHRib29sIFxcXCJCQ01BIEJyb2FkY29tIFBDSSBjb3JlIGRyaXZlclxcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUENJXFxuICA0NDpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6MzIuNjc0OTg2MDQxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA4ODYyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2VsbC12ZXJzZWQgaW4gdGhpcyBhcmVhOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgQkNNQV9IT1NUX1NPQ2AgaXMgY2xlYXJseSBidWlsdCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHdlIGhhdmUgYEhBU19JT01FTWAgZW5hYmxlZC4gTWFrZXMgc2Vuc2U7IHR5cGljYWxseSwgeW91IG5lZWQgZGlyZWN0IEkvTyBtZW1vcnkgYWNjZXNzIGZvciB0aGF0IGtpbmQgb2YgbG93LWxldmVsIFNPQyBpbnRlcmFjdGlvbi4gTm93LCB0aGUgYEJDTUFgIGRyaXZlciBpdHNlbGYgYWxzbyBoaW5nZXMgb24gYEhBU19JT01FTWAuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZXBlbmRlbmN5LiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgc2hhcmVkLCBmdW5kYW1lbnRhbCByZXNvdXJjZSBiZXR3ZWVuIHRob3NlIHR3byBtb2R1bGVzIHRoYXQgaGFzIHRoZSBtZW1vcnkgbWFwcGluZyByZXF1aXJlbWVudCwgbGV0J3MgbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYEJDTUFgIGFsc28gbmVlZHMgZGlyZWN0IG1lbW9yeSBhY2Nlc3MuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBCQ01BYCB0byBlbnN1cmUgbm90aGluZyBpcyBtaXNzaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjU0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDozOC41NDU4NzQ4MTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9iY21hL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjb25maWcgQkNNQV9QT1NTSUJMRVxcbiAgIDM6XFx0XFx0Ym9vbFxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgSEFTX0RNQVxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXG4gICA3OlxcdG1lbnVjb25maWcgQkNNQVxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIHNwZWNpZmljIEFNQkFcXFwiXFxuICAgOTpcXHRcXHRkZXBlbmRzIG9uIEJDTUFfUE9TU0lCTEVcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgQnVzIGRyaXZlciBmb3IgQnJvYWRjb20gc3BlY2lmaWMgQWR2YW5jZWQgTWljcm9jb250cm9sbGVyIEJ1c1xcbiAgMTI6XFx0XFx0ICBBcmNoaXRlY3R1cmUuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIEJDTUFcXG4gIDE1OlxcdFxcbiAgMTY6XFx0IyBTdXBwb3J0IGZvciBCbG9jay1JL08uIFNFTEVDVCB0aGlzIGZyb20gdGhlIGRyaXZlciB0aGF0IG5lZWRzIGl0LlxcbiAgMTc6XFx0Y29uZmlnIEJDTUFfQkxPQ0tJT1xcbiAgMTg6XFx0XFx0Ym9vbFxcbiAgMTk6XFx0XFxuICAyMDpcXHRjb25maWcgQkNNQV9IT1NUX1BDSV9QT1NTSUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDozOC41NDU5MzQ0OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjQxMTQ0NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCQ01BIE1vZHVsZSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdXNpbmcgYm90aCBgQkNNQWAgYW5kIGBCQ01BX0hPU1RfU09DYCBzaG91bGQgY292ZXIgdGhlIHByaW1hcnkgbmVlZHMuIEJ1dCwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24sIEknbGwgYWxzbyBpbmNsdWRlIGBCQ01BX0hPU1RfUENJYC4gSXQncyBhbHdheXMgYmVzdCB0byBiZSBjb21wcmVoZW5zaXZlIHdoZW4gZGVhbGluZyB3aXRoIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgYmNtYV9ob3N0X3NvY19wcm9iZWAgYW5kIGBiY21hX2J1c19yZWdpc3RlcmAuIFRob3NlIHNlZW0gbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludHMgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpbnRlcmZhY2VzLiBBbmQsIHRvIGJlIGV4dHJhIHRob3JvdWdoLCBsZXQgbWUgYWxzbyBub3RlIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgIGFuZCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzYCDigJMgdGhlc2UgbG9vayBjcml0aWNhbCBmb3Igb3ZlcmFsbCBkZXZpY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEJDTUEgZnJhbWV3b3JrLlxuXG5JJ3ZlIGp1c3QgY29uZmlybWVkIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgIGlzLCBhcyBleHBlY3RlZCwgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQncyBnb29kIHRvIGtub3cgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLiBXYWl0LCBob2xkIG9uLi4uIGBiY21hX2J1c19yZWdpc3RlcmAgaXMgKmV4cG9ydGVkKj8gVGhhdOKAmXMgaW50ZXJlc3RpbmcuIFRoYXQgY291bGQgYmUgc2lnbmlmaWNhbnQgZm9yIGV4dGVybmFsIGludGVyYWN0aW9ucyBvciBtb2R1bGUgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDMuNzg3MDgyMzAzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYzMTk4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDMuODMyNzI1MjE5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4ODY5MTk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKldhaXQsIFRoYXQgQVBJIElzbid0IEV4cG9zZWQ/KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIEJDTUEgYnVzIGRyaXZlciwgYW5kIEkgaGl0IGEgc25hZy4gSSB3YXMgZXhwZWN0aW5nIHRvIHVzZSBgYmNtYV9idXNfcmVnaXN0ZXJgIHRvIGJyaW5nIHRoZSBidXMgaW50byBhIHVzYWJsZSBzdGF0ZS4gQnV0IEkganVzdCBjaGVja2VkIHRoZSBzeW1ib2wgdGFibGUsIGFuZCBpdCdzIG5vdCBleHBvcnRlZC4gKlRoYXQncyogbm90IGdvb2QuIE5vdyBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFuIGFsdGVybmF0aXZlIEFQSSBjYWxsIHRoYXQgZG9lcyB0aGUgc2FtZSB0aGluZywgb3IgaWYgSSBoYXZlIHRvIGdvIGRpZ2dpbmcgdGhyb3VnaCB0aGUgdXBzdHJlYW0gZHJpdmVyIGNvZGUgdG8gc2VlIGlmIHRoZXJlJ3MgYSBkaWZmZXJlbnQgbWVhbnMgb2YgaW5pdGlhbGl6YXRpb24gdGhhdCdzIGV4cGVjdGVkLiBJcyBpdCB3cmFwcGVkIGluc2lkZSBhbm90aGVyIG1vZHVsZSBJIGhhdmUgbWlzc2VkPyBUaGlzIGlzIGdvaW5nIHRvIHNsb3cgdGhpbmdzIGRvd24gY29uc2lkZXJhYmx5LiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBidXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGFyZSBkb25lIGNvcnJlY3RseS4gVGltZSB0byBncmFiIHRoZSBzb3VyY2UgY29kZSwgdHJhY2UgdGhlIGNhbGwgc3RhY2ssIGFuZCBzZWUgd2hhdCB0aGUgaW50ZW5kZWQgZGVzaWduIHBhdHRlcm4gaXMuIEkgYW0gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBCQ01BIGFyY2hpdGVjdHVyZSwgYnV0IHRoZXNlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgY2FuIGJlIHRyaWNreS4gVGhpcyBsYWNrIG9mIGEgZGlyZWN0IEFQSSBmdW5jdGlvbiBpcyB1bmV4cGVjdGVkLCBhbmQgbWVhbnMgSSBuZWVkIHRvIHJlLWV2YWx1YXRlIG15IGFwcHJvYWNoLiBJIG5lZWQgdG8ga25vdyB3aHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTQ6NDguNzE5NjQ2ODI5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX2J1c19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2JjbWEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaD0yOD12b2lkIGJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oOjI5OmludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oLTMwLXZvaWQgYmNtYV9idXNfdW5yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7XFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYz0xNjA9c3RhdGljIGludCBiY21hX2hvc3RfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuLS1cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjItXFx0LyogUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYzoyMjM6XFx0ZXJyID0gYmNtYV9idXNfcmVnaXN0ZXIoYnVzKTtcXG5kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYy0yMjQtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jPTIwMz1zdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIyOS1cXHQvKiBSZWdpc3RlciAqL1xcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jOjIzMDpcXHRlcnIgPSBiY21hX2J1c19yZWdpc3RlcihidXMpO1xcbmRyaXZlcnMvYmNtYS9ob3N0X3NvYy5jLTIzMS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz0zNjg9dm9pZCBiY21hX3VucmVnaXN0ZXJfY29yZXMoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTM4Ny1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjM4ODppbnQgYmNtYV9idXNfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpXFxuZHJpdmVycy9iY21hL21haW4uYy0zODkte1xcbi0tXFxuZHJpdmVycy9iY21hL21haW4uYz02Mzg9c3RhdGljIGludCBiY21hX2RldmljZV91ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY0Ny1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY0ODpzdGF0aWMgdW5zaWduZWQgaW50IGJjbWFfYnVzX3JlZ2lzdGVyZWQ7XFxuZHJpdmVycy9iY21hL21haW4uYy02NDktXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jPTY1NT1zdGF0aWMgaW50IF9faW5pdCBiY21hX2luaXRfYnVzX3JlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY1OC1cXG5kcml2ZXJzL2JjbWEvbWFpbi5jOjY1OTpcXHRpZiAoYmNtYV9idXNfcmVnaXN0ZXJlZClcXG5kcml2ZXJzL2JjbWEvbWFpbi5jLTY2MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjYzLVxcdGlmICghZXJyKVxcbmRyaXZlcnMvYmNtYS9tYWluLmM6NjY0OlxcdFxcdGJjbWFfYnVzX3JlZ2lzdGVyZWQgPSAxO1xcbmRyaXZlcnMvYmNtYS9tYWluLmMtNjY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NDo0OC43NjM2OTIxMDVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjA4MzgxNzc3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJDTUEgTW9kdWxlJ3MgUmVhY2hhYmlsaXR5IGFuZCBSZWxldmFudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGVycm9yIHBhdGggaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdGhlIHB1YmxpY2x5IHZpc2libGUgZW50cnkgcG9pbnRzLCBidXQgbGV0J3MgYmUgdGhvcm91Z2guXG5cbkZpcnN0LCBpdCdzIGNsZWFyIHRoYXQgdGhlIHRhcmdldCBpc24ndCBleHBvcnRlZCwgaXQncyBpbnRlcm5hbCB0byB0aGUgYGJjbWFgIG1vZHVsZS4gSG93ZXZlciwgYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2AgaW1tZWRpYXRlbHkgc3RhbmQgb3V0IGJlY2F1c2UgdGhleSBhcmUgbm9uLXN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCByZWFjaGFiaWxpdHkuIGBiY21hX2hvc3Rfc29jX3Byb2JlYCBpcyBzdGF0aWMsIHdoaWNoIEknZCB1c3VhbGx5IGRpc21pc3MsIGJ1dCB3YWl04oCmXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgICppcyogYWN0dWFsbHkgcmVhY2hhYmxlLiBBaCwgcmlnaHQuIFBsYXRmb3JtIGRldmljZXMsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIERUIG92ZXJsYXlzLCBvciBvdGhlciBpbmplY3Rpb24gbWVjaGFuaXNtcywgbWFrZSB0aGVzZSBwcm9iZXMgdmlhYmxlIHBhdGhzLiBBbmQgYGJjbWFfaG9zdF9wY2lfcHJvYmVgLCBiZWluZyBhIFBDSSBwcm9iZSBmdW5jdGlvbiwgaXMgZXF1YWxseSByZWFjaGFibGUgdmlhIHNvbWV0aGluZyBsaWtlIFN5emthbGxlciB3aGljaCBjYW4gaW5qZWN0IFBDSSBkZXZpY2VzLiBTbywgYm90aCBhcmUgdmFsaWQgdGFyZ2V0cy5cblxuTm93LCBsZXQncyBlbnVtZXJhdGUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuc3VyZSB3ZSBjb3ZlciB0aGUgYmFzZXMuIEkgc2VlIGBDT05GSUdfQkNNQWAsIGBDT05GSUdfQkNNQV9IT1NUX1NPQ2AsIGFuZCBgQ09ORklHX0JDTUFfSE9TVF9QQ0lgIGFyZSByZWxldmFudCBoZXJlLlxuXG5SZXZpZXdpbmcgb3RoZXIgZnVuY3Rpb25zLCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyBzdGF0aWMsIHNvIEkgY2FuIHByb2JhYmx5IGlnbm9yZSB0aGF0LCBidXQgYGJjbWFfYnVzX3JlZ2lzdGVyYCBpcyBub24tc3RhdGljIGFuZCAqY3J1Y2lhbGx5KiwgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2AgaXMgYWxzbyBub24tc3RhdGljLlxuXG5UaGUgcGF0Y2gncyBzdGF0ZWQgcHVycG9zZSBpcyB0byBjb3JyZWN0IGVycm9yIGhhbmRsaW5nIGluIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgY2xlYW51cCBpbiB0aGUgZXZlbnQgdGhhdCBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0aW5nIHRvIGRldmljZSBpbml0aWFsaXphdGlvbiwgdGhlcmVmb3JlIGl0IHNob3VsZCBiZSByZWFjaGVkIHZpYSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cblxuQmFzZWQgb24gdGhpcywgdGhlIGNvcmUgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6XG5cbiogICBgYmNtYV9idXNfcmVnaXN0ZXJgXG4qICAgYGJjbWFfdW5yZWdpc3Rlcl9jb3Jlc2BcbiogICBgYmNtYV9ob3N0X3NvY19wcm9iZWAgKERlc3BpdGUgYmVpbmcgc3RhdGljLCBpdCdzIGEgcHJvYmUgZnVuY3Rpb24gdXNlZCBieSBhIGRyaXZlciBhbmQgaXMgbm90IGxpa2VseSB0byBiZSBpbmxpbmVkIGFuZCAqaXMqIGEga2V5IGVudHJ5IHBvaW50KVxuKiAgIGBiY21hX2hvc3RfcGNpX3Byb2JlYCAoU2FtZSByZWFzb25pbmcgYXMgYWJvdmUpXG5cbkFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcmVtYWluOlxuXG4qICAgYEJDTUFgXG4qICAgYEJDTUFfSE9TVF9TT0NgXG4qICAgYEJDTUFfSE9TVF9QQ0lgXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBUaGlzIGFuYWx5c2lzIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIHJldmlldyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTYwLCJPdXRwdXRUb2tlbnMiOjE0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NTowOS42MDE4NzIyOTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjExNjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkNNQVwiLFxuICAgIFwiQkNNQV9IT1NUX1NPQ1wiLFxuICAgIFwiQkNNQV9IT1NUX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJjbWFfYnVzX3JlZ2lzdGVyXCIsXG4gICAgXCJiY21hX3VucmVnaXN0ZXJfY29yZXNcIixcbiAgICBcImJjbWFfaG9zdF9zb2NfcHJvYmVcIixcbiAgICBcImJjbWFfaG9zdF9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBwYXRoIGR1cmluZyBCQ01BIGJ1cyByZWdpc3RyYXRpb24uIElmIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHMsIGl0IG5vdyBwcm9wZXJseSBwcm9wYWdhdGVzIHRoZSBlcnJvciBhbmQgY2xlYW5zIHVwIHRoZSByZWdpc3RlcmVkIGNvcmVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gZGV2aWNlIGluaXRpYWxpemF0aW9uIGVycm9yIGhhbmRsaW5nLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHBsYXRmb3JtIG9yIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQ01BXCIsXG4gICAgXCJCQ01BX0hPU1RfU09DXCIsXG4gICAgXCJCQ01BX0hPU1RfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmNtYV9idXNfcmVnaXN0ZXJcIixcbiAgICBcImJjbWFfdW5yZWdpc3Rlcl9jb3Jlc1wiLFxuICAgIFwiYmNtYV9ob3N0X3NvY19wcm9iZVwiLFxuICAgIFwiYmNtYV9ob3N0X3BjaV9wcm9iZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIHBhdGggZHVyaW5nIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbi4gSWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgaXQgbm93IHByb3Blcmx5IHByb3BhZ2F0ZXMgdGhlIGVycm9yIGFuZCBjbGVhbnMgdXAgdGhlIHJlZ2lzdGVyZWQgY29yZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gZXJyb3IgaGFuZGxpbmcsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgcGxhdGZvcm0gb3IgUENJIGRldmljZSBpbmplY3Rpb24gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NTowOS42ODM5OTU5MjVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDIyMDYxMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MDkuNjg0NDk4MDI0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NDIxNTU0Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkNGYyNjQxOTQxYzA2OGM5OTI4MDdmNmFkZWE4YjE5NjVhYzVkMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDExOjUzOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuaW5kZXggMjBiMTgxNmM1NzBiMi4uMGJlYzBkMDA1Yjg5ZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jXG4rKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuY1xuQEAgLTIzNiw2ICsyMzYsNyBAQCBzdGF0aWMgaW50IGJjbWFfaG9zdF9zb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX3VubWFwX21taW86XG4rXHRiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKTtcbiBcdGlvdW5tYXAoYnVzLVx1MDAzZW1taW8pO1xuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL21haW4uYyBiL2RyaXZlcnMvYmNtYS9tYWluLmNcbmluZGV4IDcyZjA0NWU2ZWQ1MTMuLjU1ZDE3NTQ2Yzc5N2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2JjbWEvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2JjbWEvbWFpbi5jXG5AQCAtNDc3LDggKzQ3Nyw5IEBAIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcbiBcdH1cbiBcbiBcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXG4tXHRiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKTtcbi1cbitcdGVyciA9IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhidXMpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbiBcdGJjbWFfaW5mbyhidXMsIFwiQnVzIHJlZ2lzdGVyZWRcXG5cIik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjA5LjY4NDQ5OTIwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDI1NTE2OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGNoYW5nZXMsIHN1bW1hcml6ZWQgYXMgYSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIEJDTUEgRHJpdmVyIE1vZGlmaWNhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9iY21hL2hvc3Rfc29jLmNgIGFuZCBgZHJpdmVycy9iY21hL21haW4uY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXNlIGFyZSBjb3JlIEJDTUEgKEJyb2FkY29tIENvbW1vbiBBcmNoaXRlY3R1cmUpIGJ1cyBkcml2ZXIgY29tcG9uZW50cy5cblxuSW4gYGJjbWFfaG9zdF9zb2NfcHJvYmVgLCBpdCdzIGFkZGluZyBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKGJ1cyk7YCB0byB0aGUgYGVycl91bm1hcF9tbWlvYCBlcnJvciBwYXRoLiBUaGF0IG1ha2VzIHNlbnNlLiBJZiB0aGVyZSdzIGEgbWVtb3J5IG1hcHBpbmcgZXJyb3IgZHVyaW5nIHByb2JlLCB3ZSBuZWVkIHRvIGNsZWFuIHVwIGFueSBwYXJ0aWFsbHkgcmVnaXN0ZXJlZCBjb3Jlcy4gSXQncyBhIGdvb2QgcHJhY3RpY2UgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIHByZXZlbnRpbmcgZGFuZ2xpbmcgcmVmZXJlbmNlcywgYW5kIGVuc3VyaW5nIGEgY2xlYW4gcm9sbGJhY2suXG5cbk5vdywgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCwgdGhlcmUncyBhIGNoZWNrIGZvciB0aGUgcmV0dXJuIHZhbHVlIG9mIGBiY21hX3JlZ2lzdGVyX2RldmljZXMoYnVzKWAsIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBpZiBpdCdzIGFuIGVycm9yLiBPa2F5LCBzbyBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSB0cmllcyB0byByZWdpc3RlciB0aGUgZGV2aWNlcyBvbiB0aGUgYnVzLCBhbmQgYW55IGVycm9yIGluIHRoYXQgZnVuY3Rpb24gc2hvdWxkIGJlIHByb3BhZ2F0ZWQgYmFjayB1cCB0byB0aGUgY2FsbGluZyBmdW5jdGlvbiwgYGJjbWFfYnVzX3JlZ2lzdGVyYC5cblxuV2FpdCBhIHNlY29uZCwgaXMgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgcmV0dXJuaW5nIGFuIGludGVnZXI/IEkgbmVlZCB0byBjb25maXJtIHRoZSB0eXBlIGl0IHJldHVybnMuIFRoYXQncyB1bnVzdWFsIHRvIGhhdmUgYW4gYGludGAgZm9yIGEgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9iY21hL21haW4uY2AgcmlnaHQgYXdheSwgdG8gZ2V0IHRoZSByZXR1cm4gdHlwZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjE0LjcxMDAxOTUzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2MzEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiY21hX3JlZ2lzdGVyX2RldmljZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iY21hL21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jPTI3OD1zdGF0aWMgdm9pZCBiY21hX3JlZ2lzdGVyX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSlcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkwLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM6MjkxOnN0YXRpYyBpbnQgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKHN0cnVjdCBiY21hX2J1cyAqYnVzKVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtMjkyLXtcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmM9Mzg4PWludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4tLVxcbmRyaXZlcnMvYmNtYS9tYWluLmMtNDc5LVxcdC8qIFJlZ2lzdGVyIGZvdW5kIGNvcmVzICovXFxuZHJpdmVycy9iY21hL21haW4uYzo0ODA6XFx0ZXJyID0gYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKGJ1cyk7XFxuZHJpdmVycy9iY21hL21haW4uYy00ODEtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MTQuNzU4Mjg2ODg1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQ2ODMwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCQ01BIEJ1cyBSZWdpc3RyYXRpb24gRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBkZWFsaW5nIHdpdGggZXJyb3IgaGFuZGxpbmcgaW4gYGJjbWFfYnVzX3JlZ2lzdGVyYCBhbmQgYGJjbWFfaG9zdF9zb2NfcHJvYmVgLiBFc3NlbnRpYWxseSwgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlc2AgZmFpbHMgd2l0aGluIGBiY21hX2J1c19yZWdpc3RlcmAsIHRoZSBlcnJvciBpcyBwcm9wZXJseSByZXR1cm5lZCBub3cuIFRoYXQncyBnb29kLiBJbiBgYmNtYV9ob3N0X3NvY19wcm9iZWAsIGlmIGBiY21hX2J1c19yZWdpc3RlcmAgZmFpbHMsIGl0IHVzZWQgdG8ganVtcCB0byBgZXJyX3VubWFwX21taW9gLCBhbmQgbm93IGl0IGFsc28gY29ycmVjdGx5IGNhbGxzIGBiY21hX3VucmVnaXN0ZXJfY29yZXMoYnVzKWAuXG5cblRoaXMgaXMgY2xhc3NpYyByZXNvdXJjZSBsZWFrIHByZXZlbnRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBvciBzb21ldGhpbmcgc2ltaWxhciBpbiB0aG9zZSBlcnJvciBwYXRocy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgcG90ZW50aWFsIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIGJ1dCB0aGlzIGxvb2tzIHByZXR0eSBjbGVhbi4gSXQncyBqdXN0IGFib3V0IGNsZWFudXAgYW5kIG1ha2luZyBzdXJlIGV2ZXJ5dGhpbmcgZ2V0cyB1bnJlZ2lzdGVyZWQgY29ycmVjdGx5IGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBJdCdzIGFkZGluZyB0aGF0IGBiY21hX3VucmVnaXN0ZXJfY29yZXNgIGNhbGwgYW5kIGNoZWNraW5nIGl0cyByZXR1cm4gdmFsdWUgd2hpY2ggc2VlbXMgc3RhbmRhcmQgZm9yIHRoZXNlIHR5cGVzIG9mIGZpeGVzLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4IGZvciBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWx1cmUgcGF0aHMuXG5cbldlJ3JlIGluIGdvb2Qgc2hhcGUgc2luY2UgS0FTQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3Mg4oCTIHdl4oCZcmUgY292ZXJlZCB0aGVyZS4gQWxzbywgS01TQU4gaGFuZGxlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgdGhlcmUncyBub3RoaW5nIGluIHRoaXMgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIGFueS4gSSBzdGlsbCB3YW50IHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIGBiY21hX3JlZ2lzdGVyX2RldmljZXNgLCBidXQgYmFzZWQgb24gYSBxdWljayBzY2FuLCB0aGlzIGFsbCBzZWVtcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMTo1NToyMS42MjI5NzIyNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2JjbWEvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MTpcXHRzdGF0aWMgaW50IGJjbWFfcmVnaXN0ZXJfZGV2aWNlcyhzdHJ1Y3QgYmNtYV9idXMgKmJ1cylcXG4gMjkyOlxcdHtcXG4gMjkzOlxcdFxcdHN0cnVjdCBiY21hX2RldmljZSAqY29yZTtcXG4gMjk0OlxcdFxcdGludCBlcnI7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY29yZSwgXFx1MDAyNmJ1cy1cXHUwMDNlY29yZXMsIGxpc3QpIHtcXG4gMjk3OlxcdFxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdFxcdC8qIFdlIHN1cHBvcnQgdGhhdCBjb3JlIG91cnNlbHZlcyAqL1xcbiAzMDA6XFx0XFx0XFx0c3dpdGNoIChjb3JlLVxcdTAwM2VpZC5pZCkge1xcbiAzMDE6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9DSElQQ09NTU9OOlxcbiAzMDI6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfQ0hJUENPTU1PTjpcXG4gMzAzOlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX05TX0NISVBDT01NT05fQjpcXG4gMzA0OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSTpcXG4gMzA1OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX1BDSUU6XFxuIDMwNjpcXHRcXHRcXHRjYXNlIEJDTUFfQ09SRV9QQ0lFMjpcXG4gMzA3OlxcdFxcdFxcdGNhc2UgQkNNQV9DT1JFX01JUFNfNzRLOlxcbiAzMDg6XFx0XFx0XFx0Y2FzZSBCQ01BX0NPUkVfNDcwNl9NQUNfR0JJVF9DT01NT046XFxuIDMwOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzEwOlxcdFxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0XFx0LyogRWFybHkgY29yZXMgd2VyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgKi9cXG4gMzEzOlxcdFxcdFxcdGlmIChiY21hX2lzX2NvcmVfbmVlZGVkX2Vhcmx5KGNvcmUtXFx1MDAzZWlkLmlkKSlcXG4gMzE0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTU6XFx0XFxuIDMxNjpcXHRcXHRcXHRucCA9IGNvcmUtXFx1MDAzZWRldi5vZl9ub2RlO1xcbiAzMTc6XFx0XFx0XFx0aWYgKG5wIFxcdTAwMjZcXHUwMDI2ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSlcXG4gMzE4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRcXHQvKiBPbmx5IGZpcnN0IEdNQUMgY29yZSBvbiBCQ000NzA2IGlzIGNvbm5lY3RlZCBhbmQgd29ya2luZyAqL1xcbiAzMjE6XFx0XFx0XFx0aWYgKGNvcmUtXFx1MDAzZWlkLmlkID09IEJDTUFfQ09SRV80NzA2X01BQ19HQklUIFxcdTAwMjZcXHUwMDI2XFxuIDMyMjpcXHRcXHRcXHQgICAgY29yZS1cXHUwMDNlY29yZV91bml0IFxcdTAwM2UgMClcXG4gMzIzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRcXHRiY21hX3JlZ2lzdGVyX2NvcmUoYnVzLCBjb3JlKTtcXG4gMzI2OlxcdFxcdH1cXG4gMzI3OlxcdFxcbiAzMjg6XFx0I2lmZGVmIENPTkZJR19CQ01BX1BGTEFTSFxcbiAzMjk6XFx0XFx0aWYgKGJ1cy1cXHUwMDNlZHJ2X2NjLnBmbGFzaC5wcmVzZW50KSB7XFxuIDMzMDpcXHRcXHRcXHRlcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoXFx1MDAyNmJjbWFfcGZsYXNoX2Rldik7XFxuIDMzMTpcXHRcXHRcXHRpZiAoZXJyKVxcbiAzMzI6XFx0XFx0XFx0XFx0YmNtYV9lcnIoYnVzLCBcXFwiRXJyb3IgcmVnaXN0ZXJpbmcgcGFyYWxsZWwgZmxhc2hcXFxcblxcXCIpO1xcbiAzMzM6XFx0XFx0fVxcbiAzMzQ6XFx0I2VuZGlmXFxuIDMzNTpcXHRcXG4gMzM2OlxcdCNpZmRlZiBDT05GSUdfQkNNQV9TRkxBU0hcXG4gMzM3OlxcdFxcdGlmIChidXMtXFx1MDAzZWRydl9jYy5zZmxhc2gucHJlc2VudCkge1xcbiAzMzg6XFx0XFx0XFx0ZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKFxcdTAwMjZiY21hX3NmbGFzaF9kZXYpO1xcbiAzMzk6XFx0XFx0XFx0aWYgKGVycilcXG4gMzQwOlxcdFxcdFxcdFxcdGJjbWFfZXJyKGJ1cywgXFxcIkVycm9yIHJlZ2lzdGVyaW5nIHNlcmlhbCBmbGFzaFxcXFxuXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDExOjU1OjIxLjYyMzA1NzA4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODI5NzM5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJ3ZlIHJldmlld2VkIHRoZSBjb2RlLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQncyB0aWdodGVuaW5nIHVwIGhvdyBlcnJvcnMgYXJlIHByb3BhZ2F0ZWQgZnJvbSBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGFuZCBtYWtpbmcgc3VyZSBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCBpbiB0aGUgU29DIHByb2JlIGVycm9yIHBhdGguIFRoaXMgcHJldmVudHMgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaWYgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlscywgYW5kIHRob3NlIGtpbmRzIG9mIGJ1Z3MgYXJlIGxpa2VseSBjYXVnaHQgYnkgS0FTQU4gYW5kIGttZW1sZWFrIGFueXdheS5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyDigJMgZXJyb3IgcHJvcGFnYXRpb24gYW5kIGNsZWFudXAg4oCTIGFuZCB0aGUgZmFjdCB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBvciBtb2RpZmljYXRpb25zIHRvIGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpc24ndCB3YXJyYW50ZWQgaW4gdGhpcyBjYXNlLiBUaGUgaW1wcm92ZW1lbnRzIHdpbGwgY29udHJpYnV0ZSB0byBtb3JlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGJ1cyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjMsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTE6NTU6MjcuMTA2MDM0NzU5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgQkNNQSBidXMgcmVnaXN0cmF0aW9uIHBhdGguIEl0IGVuc3VyZXMgdGhhdCBpZiBgYmNtYV9yZWdpc3Rlcl9kZXZpY2VzKClgIGZhaWxzLCB0aGUgZXJyb3IgaXMgcHJvcGFnYXRlZCwgYW5kIGluIHRoZSBob3N0IFNvQyBwcm9iZSBlcnJvciBwYXRoLCBgYmNtYV91bnJlZ2lzdGVyX2NvcmVzKClgIGlzIGNhbGxlZCB0byBwcm9wZXJseSBjbGVhbiB1cCByZWdpc3RlcmVkIGNvcmVzLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3Mgb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3Mgb24gZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIHBhdGhzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBrbWVtbGVhay4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IGRhdGEgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbHRlciBsb2dpYyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIEJDTUEgYnVzIHJlZ2lzdHJhdGlvbiBwYXRoLiBJdCBlbnN1cmVzIHRoYXQgaWYgYGJjbWFfcmVnaXN0ZXJfZGV2aWNlcygpYCBmYWlscywgdGhlIGVycm9yIGlzIHByb3BhZ2F0ZWQsIGFuZCBpbiB0aGUgaG9zdCBTb0MgcHJvYmUgZXJyb3IgcGF0aCwgYGJjbWFfdW5yZWdpc3Rlcl9jb3JlcygpYCBpcyBjYWxsZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVnaXN0ZXJlZCBjb3Jlcy4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzIG9uIGRldmljZSByZWdpc3RyYXRpb24gZmFpbHVyZSBwYXRocywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQga21lbWxlYWsuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBkYXRhIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgYWx0ZXIgbG9naWMgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow6lpjs[1] Phase: Succeeded StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 11:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 11:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2] Phase: Succeeded StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 11:55:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 11:55:38 +0000 UTC FinishedAt: 2026-08-13 11:55:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflow6lpjs/series-workflow6lpjs-convert-artifact-2380093487/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 11:55:48 +0000 UTC FinishedAt: 2026-08-13 12:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 11:55:48 +0000 UTC FinishedAt: 2026-08-13 12:11:48 +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:*6a898815-a248-44c7-b766-0a6a9ff0ae8a,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-workflow6lpjs/series-workflow6lpjs-convert-artifact-2380093487/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": "7c241ddf-4a34-4ef1-91d5-bfbd99f1f8db", "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-workflow6lpjs/series-workflow6lpjs-build-action-806018549/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 11:55:48 +0000 UTC FinishedAt: 2026-08-13 12:11:38 +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:*6a898815-a248-44c7-b766-0a6a9ff0ae8a,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-workflow6lpjs/series-workflow6lpjs-convert-artifact-2380093487/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": "7c241ddf-4a34-4ef1-91d5-bfbd99f1f8db", "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-workflow6lpjs/series-workflow6lpjs-build-action-806018549/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 12:11:48 +0000 UTC FinishedAt: 2026-08-13 12:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 12:11:48 +0000 UTC FinishedAt: 2026-08-13 12:11:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 12:11:48 +0000 UTC FinishedAt: 2026-08-13 12:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 12:11:48 +0000 UTC FinishedAt: 2026-08-13 12:11:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.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-workflow6lpjs/series-workflow6lpjs-convert-artifact-826745214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-13 12:11:58 +0000 UTC FinishedAt: 2026-08-13 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-13 12:11:58 +0000 UTC FinishedAt: 2026-08-13 12:14:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c241ddf-4a34-4ef1-91d5-bfbd99f1f8db,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-workflow6lpjs/series-workflow6lpjs-build-action-806018549/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-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-13 12:14:28 +0000 UTC FinishedAt: 2026-08-13 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-13 12:14:28 +0000 UTC FinishedAt: 2026-08-13 12:14:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-13 12:14:28 +0000 UTC FinishedAt: 2026-08-13 12:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-13 12:14:28 +0000 UTC FinishedAt: 2026-08-13 12:31:15 +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:*6a898815-a248-44c7-b766-0a6a9ff0ae8a,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-workflow6lpjs/series-workflow6lpjs-convert-artifact-826745214/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": "9cc9773d-aa26-4e39-b0b2-cb0181956a36", "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-workflow6lpjs/series-workflow6lpjs-build-action-3921538514/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-13 12:14:28 +0000 UTC FinishedAt: 2026-08-13 12:31:05 +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:*6a898815-a248-44c7-b766-0a6a9ff0ae8a,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-workflow6lpjs/series-workflow6lpjs-convert-artifact-826745214/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": "9cc9773d-aa26-4e39-b0b2-cb0181956a36", "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-workflow6lpjs/series-workflow6lpjs-build-action-3921538514/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-13 12:31:15 +0000 UTC FinishedAt: 2026-08-13 12:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-13 12:31:15 +0000 UTC FinishedAt: 2026-08-13 12:31:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-13 12:31:15 +0000 UTC FinishedAt: 2026-08-13 12:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-13 12:31:15 +0000 UTC FinishedAt: 2026-08-13 12:33:24 +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:*9cc9773d-aa26-4e39-b0b2-cb0181956a36,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-workflow6lpjs/series-workflow6lpjs-build-action-3921538514/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-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7c241ddf-4a34-4ef1-91d5-bfbd99f1f8db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9cc9773d-aa26-4e39-b0b2-cb0181956a36,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-workflow6lpjs/series-workflow6lpjs-build-action-806018549/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-workflow6lpjs/series-workflow6lpjs-build-action-3921538514/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 12:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 12:33:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6lpjs/series-workflow6lpjs-convert-artifact-3154366851/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 12:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 12:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-13 12:33:34 +0000 UTC FinishedAt: 2026-08-13 12:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-13 12:33:44 +0000 UTC FinishedAt: 2026-08-13 13:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6lpjs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bcma_bus_register","bcma_unregister_cores","bcma_host_soc_probe","bcma_host_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["BCMA","BCMA_HOST_SOC","BCMA_HOST_PCI"],"series_id":"94e4f2c4-1ace-484d-b7b6-17c257273211","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-13 12:33:44 +0000 UTC FinishedAt: 2026-08-13 13:36:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7c241ddf-4a34-4ef1-91d5-bfbd99f1f8db,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9cc9773d-aa26-4e39-b0b2-cb0181956a36,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-workflow6lpjs/series-workflow6lpjs-build-action-806018549/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-workflow6lpjs/series-workflow6lpjs-build-action-3921538514/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-workflow6lpjs/series-workflow6lpjs-convert-artifact-3154366851/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,}