Name: series-workflowsm79d Phase: Succeeded StartedAt: 2026-06-27 06:15:56 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[0] Phase: Succeeded StartedAt: 2026-06-27 06:15:56 +0000 UTC FinishedAt: 2026-06-27 06:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[0].run-triage Phase: Succeeded StartedAt: 2026-06-27 06:15:56 +0000 UTC FinishedAt: 2026-06-27 06:25:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCTEONTX2_PF", "OCTEONTX2_AF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCTEONTX2_PF", "OCTEONTX2_AF" ], "series_id": "3426495d-296b-4329-84ca-14aa8d79ca85" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "otx2_free_sq_res", "otx2_init_hw_resources", "otx2_free_hw_resources" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DVEVPTlRYMl9QRiYjMzQ7LAogICAgJiMzNDtPQ1RFT05UWDJfQUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgICAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXHUwMDNlc3FiX3B0cnMgZm9yIHVudXNlZCBRb1MgcXVldWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24gaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIHZQQ0kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjU0YjdiZmQyMTFkMjg5NGEyMjFlNzlkOGE5ZTU2OTYwMzc2MTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IDQxYTBlYmRmMjAxZTcxLi44OGFjODUzNTQ0NDU0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xNTY4LDE0ICYjNDM7MTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRvdHgyX3NxX2ZyZWVfc3FicyhwZik7XG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpOyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRzcSA9IFx1MDAyNnFzZXQtXHUwMDNlc3FbcWlkeF07XG4tXHRcdC8qIFNraXAgZnJlZWluZyBRb3MgcXVldWVzIGlmIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZCAqL1xuLVx0XHRpZiAoIXNxLVx1MDAzZXNxZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlKTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlX3JpbmcpO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4tXHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRzb19oZHJzKTtcbi1cdFx0a2ZyZWUoc3EtXHUwMDNlc2cpO1xuJiM0MztcdFx0Lyogc3EtXHUwMDNlc3FlIGlzIG5vdCBpbml0aWFsaXplZCBmb3IgdW51c2VkIFFvUyBxdWV1ZXMgKi9cbiYjNDM7XHRcdGlmIChzcS1cdTAwM2VzcWUpIHtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlKTtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlX3JpbmcpO1xuJiM0MztcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4mIzQzO1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRzb19oZHJzKTtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldGltZXN0YW1wcyk7XG4mIzQzO1x0XHRcdGtmcmVlKHNxLVx1MDAzZXNnKTtcbiYjNDM7XHRcdH1cbiBcdFx0a2ZyZWUoc3EtXHUwMDNlc3FiX3B0cnMpO1xuIFx0fVxuIH1cbkBAIC0xNzEwLDEzICYjNDM7MTcxMSwxMiBAQCBpbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJfZnJlZV9uaXhfcXVldWVzOlxuLVx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG4gXHRvdHgyX2ZyZWVfY3FfcmVzKHBmKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTklYX0FRX0NUWVBFX1JRLCBmYWxzZSk7XG4gZXJyX2ZyZWVfdHhzY2g6XG4gXHRvdHgyX3R4c2NocV9zdG9wKHBmKTtcbiBlcnJfZnJlZV9zcV9wdHJzOlxuLVx0b3R4Ml9zcV9mcmVlX3NxYnMocGYpO1xuJiM0MztcdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIGVycl9mcmVlX3JxX3B0cnM6XG4gXHRvdHgyX2ZyZWVfYXVyYV9wdHIocGYsIEFVUkFfTklYX1JRKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTlBBX0FRX0NUWVBFX1BPT0wsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DVEVPTlRYMl9QRiYjMzQ7LAogICAgJiMzNDtPQ1RFT05UWDJfQUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgICAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXHUwMDNlc3FiX3B0cnMgZm9yIHVudXNlZCBRb1MgcXVldWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24gaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIHZQQ0kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmNTRiN2JmZDIxMWQyODk0YTIyMWU3OWQ4YTllNTY5NjAzNzYxNGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwNjoyNDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCmluZGV4IDQxYTBlYmRmMjAxZTcxLi44OGFjODUzNTQ0NDU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xNTY4LDE0ICYjNDM7MTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJb3R4Ml9zcV9mcmVlX3NxYnMocGYpOwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpOyBxaWR4JiM0MzsmIzQzOykgewogCQlzcSA9ICZhbXA7cXNldC0mZ3Q7c3FbcWlkeF07Ci0JCS8qIFNraXAgZnJlZWluZyBRb3MgcXVldWVzIGlmIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZCAqLwotCQlpZiAoIXNxLSZndDtzcWUpCi0JCQljb250aW51ZTsKLQkJcW1lbV9mcmVlKHBmLSZndDtkZXYsIHNxLSZndDtzcWUpOwotCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3NxZV9yaW5nKTsKLQkJcW1lbV9mcmVlKHBmLSZndDtkZXYsIHNxLSZndDtjcHRfcmVzcCk7Ci0JCXFtZW1fZnJlZShwZi0mZ3Q7ZGV2LCBzcS0mZ3Q7dHNvX2hkcnMpOwotCQlrZnJlZShzcS0mZ3Q7c2cpOwomIzQzOwkJLyogc3EtJmd0O3NxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovCiYjNDM7CQlpZiAoc3EtJmd0O3NxZSkgewomIzQzOwkJCXFtZW1fZnJlZShwZi0mZ3Q7ZGV2LCBzcS0mZ3Q7c3FlKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3NxZV9yaW5nKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O2NwdF9yZXNwKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3Rzb19oZHJzKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3RpbWVzdGFtcHMpOwomIzQzOwkJCWtmcmVlKHNxLSZndDtzZyk7CiYjNDM7CQl9CiAJCWtmcmVlKHNxLSZndDtzcWJfcHRycyk7CiAJfQogfQpAQCAtMTcxMCwxMyAmIzQzOzE3MTEsMTIgQEAgaW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZikKIAlyZXR1cm4gZXJyOwogCiBlcnJfZnJlZV9uaXhfcXVldWVzOgotCW90eDJfZnJlZV9zcV9yZXMocGYpOwogCW90eDJfZnJlZV9jcV9yZXMocGYpOwogCW90eDJfY3R4X2Rpc2FibGUobWJveCwgTklYX0FRX0NUWVBFX1JRLCBmYWxzZSk7CiBlcnJfZnJlZV90eHNjaDoKIAlvdHgyX3R4c2NocV9zdG9wKHBmKTsKIGVycl9mcmVlX3NxX3B0cnM6Ci0Jb3R4Ml9zcV9mcmVlX3NxYnMocGYpOwomIzQzOwlvdHgyX2ZyZWVfc3FfcmVzKHBmKTsKIGVycl9mcmVlX3JxX3B0cnM6CiAJb3R4Ml9mcmVlX2F1cmFfcHRyKHBmLCBBVVJBX05JWF9SUSk7CiAJb3R4Ml9jdHhfZGlzYWJsZShtYm94LCBOUEFfQVFfQ1RZUEVfUE9PTCwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoOiBPY3Rlb25UWDIgTklDKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZSBmcmVlaW5nIGluIGBvdHgyX2ZyZWVfc3FfcmVzYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYGtmcmVlKHNxLSZndDt0aW1lc3RhbXBzKWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IGBrZnJlZShzcS0mZ3Q7c3FiX3B0cnMpYCBpcyAqYWx3YXlzKiBjYWxsZWQsIGV2ZW4gaWYgdGhlIHF1ZXVlIGlzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZCAoYCFzcS0mZ3Q7c3FlYCkuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGBjb250aW51ZWAgdGhhdCB3b3VsZCBza2lwIGZyZWVpbmcgYHNxYl9wdHJzYCBpZiBgc3EtJmd0O3NxZWAgd2FzIE5VTEwuIE5vdyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgaXMgc3RydWN0dXJlZCBzbyB0aGF0IGBrZnJlZShzcS0mZ3Q7c3FiX3B0cnMpYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBhbGwgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZCBvbiBxdWV1ZSBkZXN0cnVjdGlvbiwgYXMgc2tpcHBpbmcgdGhpcyBzdGVwIGNvdWxkIGxlYWQgdG8gc3VidGxlIG1lbW9yeSBsZWFrcy4KCkFsc28sIEkgc2VlIGEgY2hhbmdlIGluIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AuIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBgb3R4Ml9mcmVlX3NxX3Jlc2AgaW4gdGhlIGVycm9yIHBhdGguIEkgd29uZGVyIHdoeSB0aGV5IG1hZGUgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhhcmR3YXJlIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGRyaXZlci4KCk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGNhbiB0aGlzIGJlIGhpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBOSUMsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgcXVlc3Rpb24gZm9yIGZ1enppbmcuIFVubGVzcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24sIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSB0eXBpY2FsbHkgdHJpY2t5IHRvIGZ1enogd2l0aCBzeXprYWxsZXIuIElmIGl0JiMzOTtzIGEgVVNCIG9yIHZpcnR1YWwgZGV2aWNlIGl0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGZ1enphYmxlLiBIb3dldmVyLCBpZiBQQ0kgZnV6emluZyBpcyBlbmFibGVkLCBvciBpZiBpdCBpcyBhIFVTQiBkZXZpY2UgdGhhdCBjb3VsZCBvcGVuIHVwIHBvc3NpYmlsaXRpZXMuIEkgcmVjYWxsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHJpZ2h0PyBUaHJvdWdoIHZQQ0ksIG9yLCBJIHRoaW5rLCBldmVuIGJ5IGp1c3QgdGhyb3dpbmcgcmFuZG9tIGRldmljZSBJRHMgaWYgUENJIGZ1enppbmcgaXMgdHVybmVkIG9uLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCBpZiByZWFjaGFibGUsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zLCBzbyBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4Olx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDktXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM4Mz1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MDgtXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDItXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4NDM6XHRcdFx0XHRcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0NC1cdGlmICghcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9Mjk1MD1zdGF0aWMgaW50IGNneF9wcmludF9kbWFjX2ZsdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjk2MjpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOTYzLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0zMDEwPXN0YXRpYyBpbnQgY2d4X3ByaW50X2Z3ZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzAxOC1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQyLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTk4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjU5OTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYwMC1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTU9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYxNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE9DVEVPTlRYMl9QRiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9DVEVPTlRYMl9QRmAgZHJpdmVyLiBJdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRmAgZGV2aWNlICgweEEwNjMpLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtjYW4gd2UgZnV6eiB0aGlzIHRoaW5nIHdpdGggU3l6a2FsbGVyIHVzaW5nIHZQQ0k/JiMzNDsgVGhlIHByZS1yZXF1aXNpdGUsIG9mIGNvdXJzZSwgaXMgdGhhdCBgQ09ORklHX1BDSWAgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYW5kIHRoZSBkcml2ZXIgaXRzZWxmIG5lZWRzIHRvIGJlIGxvYWRlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIGEga2V5IHF1ZXN0aW9uIGhlcmUuIElmIHdlIGNhbiBpbmplY3QgYSBmYWtlIFBDSSBkZXZpY2UgdXNpbmcgU3l6a2FsbGVyLCB3aXRoIGEgYFBDSV9WRU5ET1JfSURfQ0FWSVVNYCB2ZW5kb3IgSUQgYW5kIGRldmljZSBJRCBgMHhBMDYzYCwgdGhlbiB0aGUgZHJpdmVyJiMzOTtzIGBwcm9iZWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIGFpbWluZyBmb3IuCgpOb3csIGJlZm9yZSBJIG1vdmUgb24sIGxldCYjMzk7cyBsb29rIGZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19PQ1RFT05UWDJfUEZgIGlzIHRoZSBtYWluIHRoaW5nIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEJ1dCwgSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG90eDJfZnJlZV9zcV9yZXNgIGFuZCBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AuIFRoZSBjcml0aWNhbCBwb2ludCBub3cgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlIGR1cmluZyB0aGUgcHJvYmUsIG9yIHdoZW4gYnJpbmdpbmcgdXAgdGhlIGludGVyZmFjZT8gSXQgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGNvdWxkIGJlIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTEwODA9aW50IG90eDJfYWxsb2NfcXVldWVfbWVtKHN0cnVjdCBvdHgyX25pYyAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTA4MTppbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTA4Mi12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0xNTg0PXN0YXRpYyBpbnQgb3R4Ml9nZXRfcmJ1Zl9zaXplKHN0cnVjdCBvdHgyX25pYyAqcGYsIGludCBtdHUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNjExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNjEyOmludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE2MTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc0My19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3NDQ6RVhQT1JUX1NZTUJPTChvdHgyX2luaXRfaHdfcmVzb3VyY2VzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc0NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE5NjU9aW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTk3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTk3OTpcdGVyciA9IG90eDJfaW5pdF9od19yZXNvdXJjZXMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xOTgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9NTk3PXN0YXRpYyBpbnQgcnZ1X3JlcF9yc3JjX2luaXQoc3RydWN0IG90eDJfbmljICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy02MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NjEwOlx0ZXJyID0gb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy02MTEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzb3VyY2UgaW5pdGlhbGl6YXRpb24gYW5kIGZyZWVpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIGBvdHgyYCBkcml2ZXIsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqUmVzb3VyY2UgTWFuYWdlbWVudCBpbiB0aGUgb3R4MiBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIHByZXR0eSBjcnVjaWFsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3R4Ml9vcGVuYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgaXMgYnJvdWdodCBvbmxpbmUuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZm9yIHRoZSBkZXZpY2UmIzM5O3Mgb3BlcmF0aW9uLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBlcnJvciBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgY2FsbGVkIGlmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscyAqZHVyaW5nKiB0aGUgcmVzb3VyY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFueSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHJlc291cmNlcyBpZiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgcnVucyBpbnRvIGEgc25hZywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgdXNlZCBvbiB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgY2FyZWZ1bCBkZXNpZ24gdG8gZ3JhY2VmdWxseSBoYW5kbGUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMuIEZpbmFsbHksIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCBwcm9iYWJseSBhbHNvIGNhbGxzIGBvdHgyX2ZyZWVfc3FfcmVzYCB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBzaHV0IGRvd24sIGFuZCB0aGVyZWZvcmUgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RhbmRhcmQgYW5kIHJlc3BvbnNpYmxlIHBhdHRlcm4gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIGVuc3VyaW5nIHRoYXQgcmVzb3VyY2VzIGFyZSBlaXRoZXIgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgZGVhbGxvY2F0ZWQgaW4gdGhlIGV2ZW50IG9mIGVycm9ycyBvciBzaHV0ZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE1NDU9c3RhdGljIHZvaWQgb3R4Ml9mcmVlX2NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTU1OTpzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE1NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTYxMj1pbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTcxOC1lcnJfZnJlZV9zcV9wdHJzOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNzE5Olx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3MjAtZXJyX2ZyZWVfcnFfcHRyczpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE3NDY9dm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNzg4Olx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODMKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIE9UWDIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgb3R4Ml9mcmVlX3NxX3Jlc2AgZnVuY3Rpb24gaXMgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgaW4gdHdvIGtleSBwbGFjZXM6IGFzIHBhcnQgb2YgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYW5kIGFsc28gd2l0aGluIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCwgd2hpY2ggZ2V0cyBpbnZva2VkIGR1cmluZyB0aGluZ3MgbGlrZSBhIGRldmljZSBzdG9wLiBIbW1tLCB0aGUgc2VxdWVuY2UgaXMgc3RhcnRpbmcgdG8gY29tZSBpbnRvIGZvY3VzLgoKQnV0IGEgcXVlc3Rpb24gcG9wcGVkIGludG8gbXkgaGVhZDogZG9lcyBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYWN0dWFsbHkgcGVyZm9ybSBhbnkgaGFyZHdhcmUgY29tbXVuaWNhdGlvbj8gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIElmIGl0IGRvZXMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQgY291bGQgZmFpbCBlYXJseSBvbiwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIHNldHVwIHdoZXJlIHRoZSBoYXJkd2FyZSBtaWdodCBub3QgYmUgcGh5c2ljYWxseSBwcmVzZW50LCBwZXJoYXBzIHJlcHJlc2VudGVkIGJ5IGp1c3QgYSBwbGFjZWhvbGRlciBvciAmIzM0O2Zha2UmIzM0OyBQQ0kgZGV2aWNlLiBXZSYjMzk7ZCBzZWUgaXQgdGhlbi4KCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgY29uZmlybSBvciBkaXNwZWwgdGhpcyBoeXBvdGhlc2lzLiBHb3R0YSBleGFtaW5lIHRoYXQgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEyOlx0aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcbjE2MTM6XHR7XG4xNjE0Olx0XHRzdHJ1Y3Qgbml4X2xmX2ZyZWVfcmVxICpmcmVlX3JlcTtcbjE2MTU6XHRcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGYtXHUwMDNlbWJveDtcbjE2MTY6XHRcdHN0cnVjdCBvdHgyX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuMTYxNzpcdFx0c3RydWN0IG1zZ19yZXEgKnJlcTtcbjE2MTg6XHRcdGludCBlcnIgPSAwLCBsdmw7XG4xNjE5Olx0XG4xNjIwOlx0XHQvKiBTZXQgcmVxdWlyZWQgTlBBIExGJiMzOTtzIHBvb2wgY291bnRzXG4xNjIxOlx0XHQgKiBBdXJhcyBhbmQgUG9vbHMgYXJlIHVzZWQgaW4gYSAxOjEgbWFwcGluZyxcbjE2MjI6XHRcdCAqIHNvLCBhdXJhIGNvdW50ID0gcG9vbCBjb3VudC5cbjE2MjM6XHRcdCAqL1xuMTYyNDpcdFx0aHctXHUwMDNlcnFwb29sX2NudCA9IGh3LVx1MDAzZXJ4X3F1ZXVlcztcbjE2MjU6XHRcdGh3LVx1MDAzZXNxcG9vbF9jbnQgPSBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpO1xuMTYyNjpcdFx0aHctXHUwMDNlcG9vbF9jbnQgPSBody1cdTAwM2VycXBvb2xfY250ICYjNDM7IGh3LVx1MDAzZXNxcG9vbF9jbnQ7XG4xNjI3Olx0XG4xNjI4Olx0XHRpZiAoIW90eDJfcmVwX2RldihwZi1cdTAwM2VwZGV2KSkge1xuMTYyOTpcdFx0XHQvKiBNYXhpbXVtIGhhcmR3YXJlIHN1cHBvcnRlZCB0cmFuc21pdCBsZW5ndGggKi9cbjE2MzA6XHRcdFx0cGYtXHUwMDNldHhfbWF4X3BrdGxlbiA9IHBmLVx1MDAzZW5ldGRldi1cdTAwM2VtYXhfbXR1ICYjNDM7IE9UWDJfRVRIX0hMRU47XG4xNjMxOlx0XHRcdHBmLVx1MDAzZXJic2l6ZSA9IG90eDJfZ2V0X3JidWZfc2l6ZShwZiwgcGYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSk7XG4xNjMyOlx0XHR9XG4xNjMzOlx0XG4xNjM0Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4xNjM1Olx0XHQvKiBOUEEgaW5pdCAqL1xuMTYzNjpcdFx0ZXJyID0gb3R4Ml9jb25maWdfbnBhKHBmKTtcbjE2Mzc6XHRcdGlmIChlcnIpXG4xNjM4Olx0XHRcdGdvdG8gZXhpdDtcbjE2Mzk6XHRcbjE2NDA6XHRcdC8qIE5JWCBpbml0ICovXG4xNjQxOlx0XHRlcnIgPSBvdHgyX2NvbmZpZ19uaXgocGYpO1xuMTY0MjpcdFx0aWYgKGVycilcbjE2NDM6XHRcdFx0Z290byBlcnJfZnJlZV9ucGFfbGY7XG4xNjQ0Olx0XG4xNjQ1Olx0XHQvKiBEZWZhdWx0IGRpc2FibGUgYmFja3ByZXNzdXJlIG9uIE5JWC1DUFQgKi9cbjE2NDY6XHRcdG90eDJfbml4X2NwdF9jb25maWdfYnAocGYsIGZhbHNlKTtcbjE2NDc6XHRcbjE2NDg6XHRcdC8qIEVuYWJsZSBiYWNrcHJlc3N1cmUgZm9yIENHWCBtYXBwZWQgUEYvVkZzICovXG4xNjQ5Olx0XHRpZiAoIWlzX290eDJfbGJrdmYocGYtXHUwMDNlcGRldikpXG4xNjUwOlx0XHRcdG90eDJfbml4X2NvbmZpZ19icChwZiwgdHJ1ZSk7XG4xNjUxOlx0XG4xNjUyOlx0XHQvKiBJbml0IEF1cmFzIGFuZCBwb29scyB1c2VkIGJ5IE5JWCBSUSwgZm9yIGZyZWUgYnVmZmVyIHB0cnMgKi9cbjE2NTM6XHRcdGVyciA9IG90eDJfcnFfYXVyYV9wb29sX2luaXQocGYpO1xuMTY1NDpcdFx0aWYgKGVycikge1xuMTY1NTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE2NTY6XHRcdFx0Z290byBlcnJfZnJlZV9uaXhfbGY7XG4xNjU3Olx0XHR9XG4xNjU4Olx0XHQvKiBJbml0IEF1cmFzIGFuZCBwb29scyB1c2VkIGJ5IE5JWCBTUSwgZm9yIHF1ZXVlaW5nIFNRRXMgKi9cbjE2NTk6XHRcdGVyciA9IG90eDJfc3FfYXVyYV9wb29sX2luaXQocGYpO1xuMTY2MDpcdFx0aWYgKGVycikge1xuMTY2MTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE2NjI6XHRcdFx0Z290byBlcnJfZnJlZV9ycV9wdHJzO1xuMTY2MzpcdFx0fVxuMTY2NDpcdFxuMTY2NTpcdFx0ZXJyID0gb3R4Ml90eHNjaF9hbGxvYyhwZik7XG4xNjY2Olx0XHRpZiAoZXJyKSB7XG4xNjY3Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY2ODpcdFx0XHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XG4xNjY5Olx0XHR9XG4xNjcwOlx0XG4xNjcxOlx0I2lmZGVmIENPTkZJR19EQ0JcbjE2NzI6XHRcdGlmIChwZi1cdTAwM2VwZmNfZW4pIHtcbjE2NzM6XHRcdFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2FsbG9jKHBmKTtcbjE2NzQ6XHRcdFx0aWYgKGVycikge1xuMTY3NTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY3NjpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfc3FfcHRycztcbjE2Nzc6XHRcdFx0fVxuMTY3ODpcdFx0fVxuMTY3OTpcdCNlbmRpZlxuMTY4MDpcdFxuMTY4MTpcdFx0ZXJyID0gb3R4Ml9jb25maWdfbml4X3F1ZXVlcyhwZik7XG4xNjgyOlx0XHRpZiAoZXJyKSB7XG4xNjgzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY4NDpcdFx0XHRnb3RvIGVycl9mcmVlX3R4c2NoO1xuMTY4NTpcdFx0fVxuMTY4NjpcdFxuMTY4NzpcdFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4xNjg4Olx0XHRcdGludCBpZHg7XG4xNjg5Olx0XG4xNjkwOlx0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCYjNDM7JiM0MzspIHtcbjE2OTE6XHRcdFx0XHRlcnIgPSBvdHgyX3R4c2NocV9jb25maWcocGYsIGx2bCwgaWR4LCBmYWxzZSk7XG4xNjkyOlx0XHRcdFx0aWYgKGVycikge1xuMTY5MzpcdFx0XHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBjb25maWcgVFhTQ0hcXG5cJiMzNDspO1xuMTY5NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4xNjk1Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XG4xNjk2Olx0XHRcdFx0fVxuMTY5NzpcdFx0XHR9XG4xNjk4Olx0XHR9XG4xNjk5Olx0XG4xNzAwOlx0I2lmZGVmIENPTkZJR19EQ0JcbjE3MDE6XHRcdGlmIChwZi1cdTAwM2VwZmNfZW4pIHtcbjE3MDI6XHRcdFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2NvbmZpZyhwZik7XG4xNzAzOlx0XHRcdGlmIChlcnIpIHtcbjE3MDQ6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE3MDU6XHRcdFx0XHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XG4xNzA2Olx0XHRcdH1cbjE3MDc6XHRcdH1cbjE3MDg6XHQjZW5kaWZcbjE3MDk6XHRcbjE3MTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTcxMTpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBPVFgyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGEgcG90ZW50aWFsIGlzc3VlLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSBleGFtaW5pbmcgaXMgY2xlYXJseSByZXNwb25zaWJsZSBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHRoZSBoYXJkd2FyZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBPVFgyJiMzOTtzIHRyYW5zbWl0IHNjaGVkdWxlci4gTXkgY29uY2VybiBzdGVtcyBmcm9tIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgb3R4Ml90eHNjaF9hbGxvY2AgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZV9zcV9wdHJzYCwgd2hpY2ggdGhlbiBjYWxscyBgb3R4Ml9mcmVlX3NxX3Jlc2AuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4gSG93ZXZlciwgaWYgYG90eDJfY29uZmlnX25peF9xdWV1ZXNgIGZhaWxzLCB3ZSBicmFuY2ggdG8gYGVycl9mcmVlX3R4c2NoYCwgd2hpY2ggY2FsbHMgYG90eDJfdHhzY2hxX3N0b3BgIGJlZm9yZSB0aGVuIG1vdmluZyB0byBgZXJyX2ZyZWVfc3FfcHRyc2AuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgaXMgdGhpcyBlcnJvciBmbG93IGNvcnJlY3RseSBmcmVlaW5nICphbGwqIGFsbG9jYXRlZCByZXNvdXJjZXMuCgpUaGUgY3J1eCBvZiB0aGUgbWF0dGVyLCBhY2NvcmRpbmcgdG8gdGhlIHBhdGNoLCBpcyBhbiBpZGVudGlmaWVkIG1lbW9yeSBsZWFrIGNvbmNlcm5pbmcgYHNxLSZndDt0aW1lc3RhbXBzYCBhbmQgYHNxLSZndDtzcWJfcHRyc2AuIFRoZXkmIzM5O3JlIGFwcGFyZW50bHkgbm90IGJlaW5nIHByb3Blcmx5IHJlbGVhc2VkIGluIHNvbWUgZmFpbHVyZSBzY2VuYXJpb3MuIFRoaXMgaXMgYSBjcml0aWNhbCBpc3N1ZS4gV2UgbmVlZCB0byBjb25maXJtIHRoZSBjb2RlIG5vdyBlbnN1cmVzIHRob3NlIGFyZSBhbHdheXMgY29ycmVjdGx5IGZyZWVkLgoKTmV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHJlYWNoIHRoaXMgY29kZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IHVzaW5nIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgZXZlbiBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHRhcmdldCB0aGlzIGRyaXZlcj8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0LiBTbywgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBnZXQgaXQgdG8gaW5qZWN0IHRoZSBQQ0kgZGV2aWNlLCBgb3R4Ml9wcm9iZWAgd291bGQgYmUgY2FsbGVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGF0aCB0byB0aGUgZHJpdmVyLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciB0aGlzIGNvZGUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGNoZWNrIHRoZSBgb3R4Ml9wcm9iZWAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzEyMT1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzEyMzpzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTQxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvdHgyX3BmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1NDMtXHQuaWRfdGFibGUgPSBvdHgyX3BmX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTQ0Olx0LnByb2JlID0gb3R4Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU0NS1cdC5zaHV0ZG93biA9IG90eDJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4MgoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGBvdHgyX3Byb2JlYCYjMzk7cyBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGlzIGBvdHgyX3Byb2JlYCBmdW5jdGlvbiBpcyBhbGwgYWJvdXQuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHByb2Nlc3Mgb2YgaW52ZXN0aWdhdGlvbiwgb2YgZXhhbWluYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBleHBlY3RlZCBvdXRjb21lcyBhcmUuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLCBtYXliZSByZWFkaW5nIHRoZSBjb2RlLCBjaGVja2luZyBmb3IgZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBydW5uaW5nIGl0IGluIGEgc2FuZGJveCBlbnZpcm9ubWVudCB0byBzZWUgaXRzIGJlaGF2aW9yIGZpcnN0aGFuZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCwgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBLbm93aW5nIHRoZSBkZXRhaWxzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMjM6XHRzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjMxMjQ6XHR7XG4zMTI1Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjMxMjY6XHRcdGludCBlcnIsIHFjb3VudCwgcW9zX3R4cXM7XG4zMTI3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMzEyODpcdFx0c3RydWN0IG90eDJfbmljICpwZjtcbjMxMjk6XHRcdHN0cnVjdCBvdHgyX2h3ICpodztcbjMxMzA6XHRcbjMxMzE6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcbjMxMzI6XHRcdGlmIChlcnIpIHtcbjMxMzM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcblwmIzM0Oyk7XG4zMTM0Olx0XHRcdHJldHVybiBlcnI7XG4zMTM1Olx0XHR9XG4zMTM2Olx0XG4zMTM3Olx0XHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgRFJWX05BTUUpO1xuMzEzODpcdFx0aWYgKGVycikge1xuMzEzOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7UENJIHJlcXVlc3QgcmVnaW9ucyBmYWlsZWQgMHgleFxcblwmIzM0OywgZXJyKTtcbjMxNDA6XHRcdFx0cmV0dXJuIGVycjtcbjMxNDE6XHRcdH1cbjMxNDI6XHRcbjMxNDM6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNDgpKTtcbjMxNDQ6XHRcdGlmIChlcnIpIHtcbjMxNDU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RNQSBtYXNrIGNvbmZpZyBmYWlsZWQsIGFib3J0XFxuXCYjMzQ7KTtcbjMxNDY6XHRcdFx0cmV0dXJuIGVycjtcbjMxNDc6XHRcdH1cbjMxNDg6XHRcbjMxNDk6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuMzE1MDpcdFxuMzE1MTpcdFx0LyogU2V0IG51bWJlciBvZiBxdWV1ZXMgKi9cbjMxNTI6XHRcdHFjb3VudCA9IG1pbl90KGludCwgbnVtX29ubGluZV9jcHVzKCksIE9UWDJfTUFYX0NRX0NOVCk7XG4zMTUzOlx0XHRxb3NfdHhxcyA9IG1pbl90KGludCwgcWNvdW50LCBPVFgyX1FPU19NQVhfTEVBRl9OT0RFUyk7XG4zMTU0Olx0XG4zMTU1Olx0XHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwZiksIHFjb3VudCAmIzQzOyBxb3NfdHhxcywgcWNvdW50KTtcbjMxNTY6XHRcdGlmICghbmV0ZGV2KVxuMzE1NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNTg6XHRcbjMxNTk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpO1xuMzE2MDpcdFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4zMTYxOlx0XHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4zMTYyOlx0XHRwZi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4zMTYzOlx0XHRwZi1cdTAwM2VwZGV2ID0gcGRldjtcbjMxNjQ6XHRcdHBmLVx1MDAzZWRldiA9IGRldjtcbjMxNjU6XHRcdHBmLVx1MDAzZXRvdGFsX3ZmcyA9IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldik7XG4zMTY2Olx0XHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuMzE2NzpcdFxuMzE2ODpcdFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbjMxNjk6XHRcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuMzE3MDpcdFx0aHctXHUwMDNlcnhfcXVldWVzID0gcWNvdW50O1xuMzE3MTpcdFx0aHctXHUwMDNldHhfcXVldWVzID0gcWNvdW50O1xuMzE3MjpcdFx0aHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgPSBxY291bnQ7XG4zMTczOlx0XHRody1cdTAwM2VtYXhfcXVldWVzID0gcWNvdW50O1xuMzE3NDpcdFx0aHctXHUwMDNlcmJ1Zl9sZW4gPSBPVFgyX0RFRkFVTFRfUkJVRl9MRU47XG4zMTc1Olx0XHQvKiBVc2UgQ1FFIG9mIDEyOCBieXRlIGRlc2NyaXB0b3Igc2l6ZSBieSBkZWZhdWx0ICovXG4zMTc2Olx0XHRody1cdTAwM2V4cWVfc2l6ZSA9IDEyODtcbjMxNzc6XHRcbjMxNzg6XHRcdGVyciA9IG90eDJfaW5pdF9yc3JjKHBkZXYsIHBmKTtcbjMxNzk6XHRcdGlmIChlcnIpXG4zMTgwOlx0XHRcdGdvdG8gZXJyX2ZyZWVfbmV0ZGV2O1xuMzE4MTpcdFxuMzE4MjpcdFx0ZXJyID0gb3R4Ml9zZXRfcmVhbF9udW1fcXVldWVzKG5ldGRldiwgaHctXHUwMDNldHhfcXVldWVzLCBody1cdTAwM2VyeF9xdWV1ZXMpO1xuMzE4MzpcdFx0aWYgKGVycilcbjMxODQ6XHRcdFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XG4zMTg1Olx0XG4zMTg2Olx0XHQvKiBBc3NpZ24gZGVmYXVsdCBtYWMgYWRkcmVzcyAqL1xuMzE4NzpcdFx0b3R4Ml9nZXRfbWFjX2Zyb21fYWYobmV0ZGV2KTtcbjMxODg6XHRcbjMxODk6XHRcdC8qIERvbiYjMzk7dCBjaGVjayBmb3IgZXJyb3IuICBQcm9jZWVkIHdpdGhvdXQgcHRwICovXG4zMTkwOlx0XHRvdHgyX3B0cF9pbml0KHBmKTtcbjMxOTE6XHRcbjMxOTI6XHRcdC8qIE5QQSYjMzk7cyBwb29sIGlzIGEgc3RhY2sgdG8gd2hpY2ggU1cgZnJlZXMgYnVmZmVyIHBvaW50ZXJzIHZpYSBBdXJhLlxuMzE5MzpcdFx0ICogSFcgYWxsb2NhdGVzIGJ1ZmZlciBwb2ludGVyIGZyb20gc3RhY2sgYW5kIHVzZXMgaXQgZm9yIERNQSYjMzk7aW5nXG4zMTk0Olx0XHQgKiBpbmdyZXNzIHBhY2tldC4gSW4gc29tZSBzY2VuYXJpb3MgSFcgY2FuIGZyZWUgYmFjayBhbGxvY2F0ZWQgYnVmZmVyXG4zMTk1Olx0XHQgKiBwb2ludGVycyB0byBwb29sLiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIFNXIHRvIG1haW50YWluIGFcbjMxOTY6XHRcdCAqIHBhcmFsbGVsIGxpc3Qgd2hlcmUgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGJ1ZmZlciBwb2ludGVycyAoSU9WQXMpXG4zMTk3Olx0XHQgKiBnaXZlbiB0byBIVyBjYW4gYmUgc2F2ZWQgZm9yIGxhdGVyIHJlZmVyZW5jZS5cbjMxOTg6XHRcdCAqXG4zMTk5Olx0XHQgKiBTbyB0aGUgb25seSB3YXkgdG8gY29udmVydCBSeCBwYWNrZXQmIzM5O3MgYnVmZmVyIGFkZHJlc3MgaXMgdG8gdXNlXG4zMjAwOlx0XHQgKiBJT01NVSYjMzk7cyBpb3ZhX3RvX3BoeXMoKSBoYW5kbGVyIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIGFkZHJlc3MgYnlcbjMyMDE6XHRcdCAqIHdhbGtpbmcgdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gdGFibGVzLlxuMzIwMjpcdFx0ICovXG4zMjAzOlx0XHRwZi1cdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcbjMyMDQ6XHRcbjMyMDU6XHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IChORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4zMjA2Olx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWEhBU0ggfFxuMzIwNzpcdFx0XHRcdCAgICAgICBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuMzIwODpcdFx0XHRcdCAgICAgICBORVRJRl9GX0dTT19VRFBfTDQpO1xuMzIwOTpcdFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbjMyMTA6XHRcbjMyMTE6XHRcdGVyciA9IG90eDJfbWNhbV9mbG93X2luaXQocGYpO1xuMzIxMjpcdFx0aWYgKGVycilcbjMyMTM6XHRcdFx0Z290byBlcnJfcHRwX2Rlc3Ryb3k7XG4zMjE0Olx0XG4zMjE1Olx0XHRvdHgyX3NldF9od19jYXBhYmlsaXRpZXMocGYpO1xuMzIxNjpcdFxuMzIxNzpcdFx0ZXJyID0gY24xMGtfbWNzX2luaXQocGYpO1xuMzIxODpcdFx0aWYgKGVycilcbjMyMTk6XHRcdFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcbjMyMjA6XHRcbjMyMjE6XHRcdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKVxuMzIyMjpcdFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDM5CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBSZXNvdXJjZSBJbml0aWFsaXphdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyBpbnRvIGFjdGlvbiwgY2FsbGluZyBgb3R4Ml9pbml0X3JzcmNgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24/IExldCYjMzk7cyBkaXNzZWN0IGBvdHgyX2luaXRfcnNyY2AuIEkmIzM5O20gZ29pbmcgdG8gYmUgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBJcyBpdCBtZW1vcnksIGhhcmR3YXJlIHBlcmlwaGVyYWxzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFsbCBvZiB0aGUgYWJvdmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtaW5nIHN1Z2dlc3RzIHJlc291cmNlIGluaXRpYWxpemF0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlLiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgYG90eDJfaW5pdF9yc3JjYCBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25mbGljdHMgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYW5kbGVkIGdyYWNlZnVsbHk/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyByZXNvdXJjZSBzZXR1cD8gTXkgY2hlY2tsaXN0IGluY2x1ZGVzIHZlcmlmeWluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2luZywgY2hlY2tpbmcgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoYXQgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhlIHJlc291cmNlIGluaXRpYWxpemF0aW9uIGFyZSBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGRlcGVuZHMgb24sIHRvby4gQXJlIHRoZXJlIGFueSBnbG9iYWwgdmFyaWFibGVzIGJlaW5nIHNldCwgb3Igb3RoZXIgbW9kdWxlcyB0aGF0IGFyZSBwcmVyZXF1aXNpdGVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDM2Olx0XG4zMDM3Olx0XHRudW1fdmVjID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpO1xuMzAzODpcdFx0aHctXHUwMDNlaXJxX25hbWUgPSBkZXZtX2ttYWxsb2NfYXJyYXkoXHUwMDI2aHctXHUwMDNlcGRldi1cdTAwM2VkZXYsIG51bV92ZWMsIE5BTUVfU0laRSxcbjMwMzk6XHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbjMwNDA6XHRcdGlmICghaHctXHUwMDNlaXJxX25hbWUpXG4zMDQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzA0MjpcdFxuMzA0MzpcdFx0aHctXHUwMDNlYWZmaW5pdHlfbWFzayA9IGRldm1fa2NhbGxvYyhcdTAwMjZody1cdTAwM2VwZGV2LVx1MDAzZWRldiwgbnVtX3ZlYyxcbjMwNDQ6XHRcdFx0XHRcdFx0IHNpemVvZihjcHVtYXNrX3Zhcl90KSwgR0ZQX0tFUk5FTCk7XG4zMDQ1Olx0XHRpZiAoIWh3LVx1MDAzZWFmZmluaXR5X21hc2spXG4zMDQ2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzA0NzpcdFxuMzA0ODpcdFx0LyogTWFwIENTUnMgKi9cbjMwNDk6XHRcdHBmLVx1MDAzZXJlZ19iYXNlID0gcGNpbV9pb21hcChwZGV2LCBQQ0lfQ0ZHX1JFR19CQVJfTlVNLCAwKTtcbjMwNTA6XHRcdGlmICghcGYtXHUwMDNlcmVnX2Jhc2UpIHtcbjMwNTE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuYWJsZSB0byBtYXAgcGh5c2ljYWwgZnVuY3Rpb24gQ1NScywgYWJvcnRpbmdcXG5cJiMzNDspO1xuMzA1MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMwNTM6XHRcdH1cbjMwNTQ6XHRcbjMwNTU6XHRcdGVyciA9IG90eDJfY2hlY2tfcGZfdXNhYmxlKHBmKTtcbjMwNTY6XHRcdGlmIChlcnIpXG4zMDU3Olx0XHRcdHJldHVybiBlcnI7XG4zMDU4Olx0XG4zMDU5Olx0XHRpZiAoIWlzX2NuMjBrKHBmLVx1MDAzZXBkZXYpKVxuMzA2MDpcdFx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgUlZVX1BGX0lOVF9WRUNfQ05ULFxuMzA2MTpcdFx0XHRcdFx0XHQgICAgUlZVX1BGX0lOVF9WRUNfQ05ULCBQQ0lfSVJRX01TSVgpO1xuMzA2MjpcdFx0ZWxzZVxuMzA2MzpcdFx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgUlZVX01CT1hfUEZfSU5UX1ZFQ19DTlQsXG4zMDY0Olx0XHRcdFx0XHRcdCAgICBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcbjMwNjU6XHRcdFx0XHRcdFx0ICAgIFBDSV9JUlFfTVNJWCk7XG4zMDY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zMDY3Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRmFpbGVkIHRvIGFsbG9jICVkIElSUSB2ZWN0b3JzXFxuXCYjMzQ7LFxuMzA2ODpcdFx0XHRcdF9fZnVuY19fLCBudW1fdmVjKTtcbjMwNjk6XHRcdFx0cmV0dXJuIGVycjtcbjMwNzA6XHRcdH1cbjMwNzE6XHRcbjMwNzI6XHRcdG90eDJfc2V0dXBfZGV2X2h3X3NldHRpbmdzKHBmKTtcbjMwNzM6XHRcbjMwNzQ6XHRcdGlmIChpc19jbjIwayhwZi1cdTAwM2VwZGV2KSlcbjMwNzU6XHRcdFx0Y24yMGtfaW5pdChwZik7XG4zMDc2Olx0XHRlbHNlXG4zMDc3Olx0XHRcdG90eDJfaW5pdF9od19vcHMocGYpO1xuMzA3ODpcdFxuMzA3OTpcdFx0LyogSW5pdCBQRiBcdTAwM2M9XHUwMDNlIEFGIG1haWxib3ggc3R1ZmYgKi9cbjMwODA6XHRcdGVyciA9IG90eDJfcGZhZl9tYm94X2luaXQocGYpO1xuMzA4MTpcdFx0aWYgKGVycilcbjMwODI6XHRcdFx0Z290byBlcnJfZnJlZV9pcnFfdmVjdG9ycztcbjMwODM6XHRcbjMwODQ6XHRcdC8qIFJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0ICovXG4zMDg1Olx0XHRlcnIgPSBvdHgyX3JlZ2lzdGVyX21ib3hfaW50cihwZiwgdHJ1ZSk7XG4zMDg2Olx0XHRpZiAoZXJyKVxuMzA4NzpcdFx0XHRnb3RvIGVycl9tYm94X2Rlc3Ryb3k7XG4zMDg4Olx0XG4zMDg5Olx0XHQvKiBSZXF1ZXN0IEFGIHRvIGF0dGFjaCBOUEEgYW5kIE5JWCBMRnMgdG8gdGhpcyBQRi5cbjMwOTA6XHRcdCAqIE5JWCBhbmQgTlBBIExGcyBhcmUgbmVlZGVkIGZvciB0aGlzIFBGIHRvIGZ1bmN0aW9uIGFzIGEgTklDLlxuMzA5MTpcdFx0ICovXG4zMDkyOlx0XHRlcnIgPSBvdHgyX2F0dGFjaF9ucGFfbml4KHBmKTtcbjMwOTM6XHRcdGlmIChlcnIpXG4zMDk0Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbWJveF9pbnRyO1xuMzA5NTpcdFxuMzA5NjpcdFx0ZXJyID0gb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhwZik7XG4zMDk3Olx0XHRpZiAoZXJyKVxuMzA5ODpcdFx0XHRnb3RvIGVycl9kZXRhY2hfcnNyYztcbjMwOTk6XHRcbjMxMDA6XHRcdGVyciA9IGNuMTBrX2xtdHN0X2luaXQocGYpO1xuMzEwMTpcdFx0aWYgKGVycilcbjMxMDI6XHRcdFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XG4zMTAzOlx0XG4zMTA0Olx0XHRyZXR1cm4gMDtcbjMxMDU6XHRcbjMxMDY6XHRlcnJfZGV0YWNoX3JzcmM6XG4zMTA3Olx0XHRpZiAocGYtXHUwMDNlaHcubG10X2luZm8pXG4zMTA4Olx0XHRcdGZyZWVfcGVyY3B1KHBmLVx1MDAzZWh3LmxtdF9pbmZvKTtcbjMxMDk6XHRcdGlmICh0ZXN0X2JpdChDTjEwS19MTVRTVCwgXHUwMDI2cGYtXHUwMDNlaHcuY2FwX2ZsYWcpKVxuMzExMDpcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBwZi1cdTAwM2VkeW5jX2xtdCk7XG4zMTExOlx0XHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXHUwMDI2cGYtXHUwMDNlbWJveCk7XG4zMTEyOlx0ZXJyX2Rpc2FibGVfbWJveF9pbnRyOlxuMzExMzpcdFx0b3R4Ml9kaXNhYmxlX21ib3hfaW50cihwZik7XG4zMTE0Olx0ZXJyX21ib3hfZGVzdHJveTpcbjMxMTU6XHRcdG90eDJfcGZhZl9tYm94X2Rlc3Ryb3kocGYpO1xuMzExNjpcdGVycl9mcmVlX2lycV92ZWN0b3JzOlxuMzExNzpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldik7XG4zMTE4Olx0XG4zMTE5Olx0XHRyZXR1cm4gZXJyO1xuMzEyMDpcdH1cbjMxMjE6XHRFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbjMxMjI6XHRcbjMxMjM6XHRzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjMxMjQ6XHR7XG4zMTI1Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjMxMjY6XHRcdGludCBlcnIsIHFjb3VudCwgcW9zX3R4cXM7XG4zMTI3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMzEyODpcdFx0c3RydWN0IG90eDJfbmljICpwZjtcbjMxMjk6XHRcdHN0cnVjdCBvdHgyX2h3ICpodztcbjMxMzA6XHRcbjMxMzE6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcbjMxMzI6XHRcdGlmIChlcnIpIHtcbjMxMzM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcblwmIzM0Oyk7XG4zMTM0Olx0XHRcdHJldHVybiBlcnI7XG4zMTM1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gUmVzb3VyY2UgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBvdHgyX2luaXRfcnNyY2AgYW5kIGl0cyBmaXJzdCBjYWxsIHRvIGBvdHgyX2NoZWNrX3BmX3VzYWJsZShwZilgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgY2FsbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHBoeXNpY2FsIGZ1bmN0aW9uLCAmIzM0O3BmLCYjMzQ7IGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gKnVzZSogd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjcml0ZXJpYS4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG90eDJfY2hlY2tfcGZfdXNhYmxlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBjb25maWd1cmF0aW9uIHN0YXRlLCBwZXJoYXBzIGV2ZW4gcmVzb3VyY2UgYXZhaWxhYmlsaXR5PyBMZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IG1ha2VzIGEgUEYgJiMzNDt1c2FibGUmIzM0OyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfY2hlY2tfcGZfdXNhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD0xMDgzPWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDg0OmludCBvdHgyX2NoZWNrX3BmX3VzYWJsZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTEwODUtaW50IG90eDJfcGZhZl9tYm94X2luaXQoc3RydWN0IG90eDJfbmljICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTQ0PWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5NTU6aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yOTU2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTMwMzE9aW50IG90eDJfaW5pdF9yc3JjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzA1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzA1NTpcdGVyciA9IG90eDJfY2hlY2tfcGZfdXNhYmxlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzA1Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzU3CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgb3R4Ml9jaGVja19wZl91c2FibGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgaW4gZGV0ZXJtaW5pbmcgdGhlIHZpYWJpbGl0eSBvZiBhIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgb24gdGhpcyBzeXN0ZW0uIEl0IHByb2JhYmx5IGNoZWNrcyBmb3IgYSB2YXJpZXR5IG9mIGNvbmRpdGlvbnMgYmVmb3JlIGFsbG93aW5nIHRoYXQgUEYgdG8gYmUgYnJvdWdodCBvbmxpbmUgb3IgdXNlZCBpbiBzb21lIGNhcGFjaXR5LiBJcyBpdCBkZWFsaW5nIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBvciBtYXliZSBldmVuIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl04oCZcyBhIGNoZWNrLCBtYWtpbmcgbWUgYW50aWNpcGF0ZSBhIGJvb2xlYW4gcmV0dXJuIG9yIHNvbWUgZm9ybSBvZiBzdGF0dXMgY29kZS4gVGhlICYjMzQ7b3R4MiYjMzQ7IHByZWZpeCBpcyBhIGNsdWUgdG8gd2hpY2ggcGxhdGZvcm0gb3IgaGFyZHdhcmUgdGhpcyByZWxhdGVzIHRvLCB3aGljaCBzaG91bGQgaGVscCB0byBxdWlja2x5IGNhdGVnb3JpemUgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTU6XHRpbnQgb3R4Ml9jaGVja19wZl91c2FibGUoc3RydWN0IG90eDJfbmljICpuaWMpXG4yOTU2Olx0e1xuMjk1NzpcdFx0dTY0IHJldjtcbjI5NTg6XHRcbjI5NTk6XHRcdHJldiA9IG90eDJfcmVhZDY0KG5pYywgUlZVX1BGX0JMT0NLX0FERFJYX0RJU0MoQkxLQUREUl9SVlVNKSk7XG4yOTYwOlx0XHRyZXYgPSAocmV2IFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4RkY7XG4yOTYxOlx0XHQvKiBDaGVjayBpZiBBRiBoYXMgc2V0dXAgcmV2aXNpb24gZm9yIFJWVU0gYmxvY2ssXG4yOTYyOlx0XHQgKiBvdGhlcndpc2UgdGhpcyBkcml2ZXIgcHJvYmUgc2hvdWxkIGJlIGRlZmVycmVkXG4yOTYzOlx0XHQgKiB1bnRpbCBBRiBkcml2ZXIgY29tZXMgdXAuXG4yOTY0Olx0XHQgKi9cbjI5NjU6XHRcdGlmICghcmV2KSB7XG4yOTY2Olx0XHRcdGRldl93YXJuKG5pYy1cdTAwM2VkZXYsXG4yOTY3Olx0XHRcdFx0IFwmIzM0O0FGIGlzIG5vdCBpbml0aWFsaXplZCwgZGVmZXJyaW5nIHByb2JlXFxuXCYjMzQ7KTtcbjI5Njg6XHRcdFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XG4yOTY5Olx0XHR9XG4yOTcwOlx0XHRyZXR1cm4gMDtcbjI5NzE6XHR9XG4yOTcyOlx0XG4yOTczOlx0aW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcbjI5NzQ6XHR7XG4yOTc1Olx0XHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbjI5NzY6XHRcdGludCBudW1fdmVjLCBlcnI7XG4yOTc3Olx0XG4yOTc4Olx0XHQvKiBOUEEgaW50ZXJydXB0cyBhcmUgaW5vdCByZWdpc3RlcmVkLCBzbyBhbGxvYyBvbmx5XG4yOTc5Olx0XHQgKiB1cHRvIE5JWCB2ZWN0b3Igb2Zmc2V0LlxuMjk4MDpcdFx0ICovXG4yOTgxOlx0XHRudW1fdmVjID0gaHctXHUwMDNlbml4X21zaXhvZmY7XG4yOTgyOlx0XHRudW1fdmVjICYjNDM7PSBOSVhfTEZfQ0lOVF9WRUNfU1RBUlQgJiM0MzsgaHctXHUwMDNlbWF4X3F1ZXVlcztcbjI5ODM6XHRcbjI5ODQ6XHRcdG90eDJfZGlzYWJsZV9tYm94X2ludHIocGYpO1xuMjk4NTpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldik7XG4yOTg2Olx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgbnVtX3ZlYywgbnVtX3ZlYywgUENJX0lSUV9NU0lYKTtcbjI5ODc6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI5ODg6XHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gcmVhbGxvYyAlZCBJUlEgdmVjdG9yc1xcblwmIzM0OyxcbjI5ODk6XHRcdFx0XHRfX2Z1bmNfXywgbnVtX3ZlYyk7XG4yOTkwOlx0XHRcdHJldHVybiBlcnI7XG4yOTkxOlx0XHR9XG4yOTkyOlx0XG4yOTkzOlx0XHRyZXR1cm4gb3R4Ml9yZWdpc3Rlcl9tYm94X2ludHIocGYsIGZhbHNlKTtcbjI5OTQ6XHR9XG4yOTk1Olx0RVhQT1JUX1NZTUJPTChvdHgyX3JlYWxsb2NfbXNpeF92ZWN0b3JzKTtcbjI5OTY6XHRcbjI5OTc6XHRzdGF0aWMgaW50IG90eDJfc3Jpb3ZfdmZjZmdfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuMjk5ODpcdHtcbjI5OTk6XHRcdGludCBpO1xuMzAwMDpcdFxuMzAwMTpcdFx0cGYtXHUwMDNldmZfY29uZmlncyA9IGRldm1fa2NhbGxvYyhwZi1cdTAwM2VkZXYsIHBmLVx1MDAzZXRvdGFsX3ZmcyxcbjMwMDI6XHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcpLFxuMzAwMzpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4zMDA0Olx0XHRpZiAoIXBmLVx1MDAzZXZmX2NvbmZpZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODI2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9jdGVvbiBUWDIgUEYgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYG90eDJfY2hlY2tfcGZfdXNhYmxlYCBmdW5jdGlvbiByZWFkcyBhIGhhcmR3YXJlIHJlZ2lzdGVyLCBgUlZVX1BGX0JMT0NLX0FERFJYX0RJU0NgLCB3aGljaCBpbmZsdWVuY2VzIHRoZSBwcm9iZSBwcm9jZXNzLiBJbiBhIFN5emthbGxlciBlbnZpcm9ubWVudCwgdGhpcyByZWFkIHdpbGwgbGlrZWx5IHJldHVybiAwIG9yIDB4RkZGRkZGRkYgaW5pdGlhbGx5LCBidXQgd2UgKmNhbiogaW5qZWN0IGEgbm9uLXplcm8gdmFsdWUgdG8gYnlwYXNzIHRoZSBkZWZlcnJhbCwgd2hpY2ggaXMga2V5IHRvIHRyaWdnZXJpbmcgdGhlIHByb2JsZW1hdGljIGNvZGUgcGF0aC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGEgbWFpbGJveCB1c2luZyBgb3R4Ml9wZmFmX21ib3hfaW5pdGAgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQWRtaW4gRnVuY3Rpb24gKEFGKSBkcml2ZXIuIFRoZSBleGlzdGVuY2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEFGIGRyaXZlciwgY29udHJvbGxlZCBieSBgQ09ORklHX09DVEVPTlRYMl9BRmAsIGlzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gSWYgdGhlIEFGIGRyaXZlciBpc24mIzM5O3QgbG9hZGVkIG9yIGZ1bmN0aW9uYWwsIHRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGxpa2VseSB0byBmYWlsLCBsZWFkaW5nIHRvIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nLiBIb3dldmVyLCBldmVuIGlmIHRoZSBBRiBkcml2ZXIgaXMgbm90IHBlcmZlY3RseSBmdW5jdGlvbmFsLCBTeXprYWxsZXIgKnNob3VsZCogc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZSBQRiBkcml2ZXIgaW5kZXBlbmRlbnRseSBpZiB3ZSBjYW4gbW9jayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMuCgpUaGUgbWFpbGJveCBpbnRlcmFjdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSBtZW1vcnktYmFzZWQgY29tbXVuaWNhdGlvbjogUEYgd3JpdGVzIHRvIGEgbWVtb3J5IHJlZ2lvbiBhbmQgcmluZ3MgYSBkb29yYmVsbC4gVGhlIEFGIGRyaXZlciB0aGVuIGhhbmRsZXMgdGhlIGludGVycnVwdC4gVGhpcyBpbnRyb2R1Y2VzIGEgcG9zc2libGUgaW50ZXJhY3Rpb24gc3VyZmFjZSBpZiAqYm90aCogZHJpdmVycyAoUEYgYW5kIEFGKSBhcmUgYmVpbmcgZnV6emVkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU6IG1vcmUgYXR0YWNrIHN1cmZhY2UuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBvdHgyX2ZyZWVfc3FfcmVzYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2Agb3IgZHVyaW5nIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIGNhbGxlZCBieSBgb3R4Ml9vcGVuYCwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBicm91Z2h0IHVwIChlLmcuLCBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgKS4gU28sIGNhbiB3ZSBicmluZyB1cCB0aGUgbmV0ZGV2PyBZZXMsIGlmIGBwcm9iZWAgc3VjY2VlZHMgYW5kIHRoZSBuZXR3b3JrIGRldmljZSBpcyByZWdpc3RlcmVkLCBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwIHdpbGwgaW52b2tlIGBvdHgyX29wZW5gLCB3aGljaCB0aGVuIGNhbGxzIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIHBhdGggbm93IGNhbGxzIGBvdHgyX2ZyZWVfc3FfcmVzYCwgdGhlIGV4YWN0IHBsYWNlIHdoZXJlIHRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LCBhIG1lbW9yeSBsZWFrLiBGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGJlY2F1c2UgYnVnIGZpeGVzIGFyZSBpbXBvcnRhbnQgdG8gZnV6ei4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQgYENPTkZJR19PQ1RFT05UWDJfUEZgIGFuZCBgQ09ORklHX09DVEVPTlRYMl9BRmAuIFdoaWxlIHRoZSBBRiBtaWdodCBiZSAmIzM0O25lZWRlZCYjMzQ7LCB3ZSB3aWxsIHRyeSB0byBtYWtlIHRoaXMgaGFwcGVuIGluZGVwZW5kZW50bHkuIE5vdywgbGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4Olx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDktXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM4Mz1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MDgtXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDItXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4NDM6XHRcdFx0XHRcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0NC1cdGlmICghcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9Mjk1MD1zdGF0aWMgaW50IGNneF9wcmludF9kbWFjX2ZsdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjk2MjpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOTYzLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0zMDEwPXN0YXRpYyBpbnQgY2d4X3ByaW50X2Z3ZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzAxOC1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQyLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTk4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjU5OTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYwMC1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTU9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYxNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxODQKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb25zIGBPQ1RFT05UWDJfUEZgIGFuZCBgT0NURU9OVFgyX0FGYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZ1bmN0aW9uIGBvdHgyX2ZyZWVfc3FfcmVzYCBhbmQgdGhlIHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLiBJIHNlZSB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkIC0gZ29vZCB0byBjb25maXJtIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQgYXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGZvciBmdXp6aW5nLgoKUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBzbyBpdCYjMzk7cyByZWFjaGFibGUuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGFsbCB0aHJlZSBmdW5jdGlvbnMsIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCwgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBhbmQgYG90eDJfZnJlZV9zcV9yZXNgLCB0byBteSBsaXN0LgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudD8gVGhlIGBQQ0lgIGNvbmZpZyBpcyByZXF1aXJlZCBmb3IgUENJIGRyaXZlcnMsIHdoaWNoIHRoaXMgY2xlYXJseSBpcywgYnV0IHRoYXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSB0aGUgcHJvYmxlbSBoZXJlLiBOb3csIEkgc2hvdWxkIG1ha2UgZG91YmxlLXN1cmUgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVhY2hhYmxlLiBMZXQgbWUgc2VlLi4uIElmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscywgaXQgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHRvIGNsZWFuIHVwLiBJZiBpdCBzdWNjZWVkcywgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHdpbGwgY2FsbCBpdCB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCBzbyB3ZSBkZWZpbml0ZWx5IGhpdCB0aGF0IGNvZGVwYXRoIHRoZW4uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVub3VnaCB0byBjb252aW5jZSBtZSB0aGF0IHRoZSBlcnJvciBwYXRocyBpbiB0aGlzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSBRb1MgcXVldWVzLCByZXByZXNlbnQgYSB2YWxpZCBhcmVhIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NURU9OVFgyX1BGJiMzNDssCiAgICAmIzM0O09DVEVPTlRYMl9BRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290eDJfZnJlZV9zcV9yZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9pbml0X2h3X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cdTAwM2V0aW1lc3RhbXBzIGFuZCBzcS1cdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NURU9OVFgyX1BGJiMzNDssCiAgICAmIzM0O09DVEVPTlRYMl9BRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290eDJfZnJlZV9zcV9yZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9pbml0X2h3X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cdTAwM2V0aW1lc3RhbXBzIGFuZCBzcS1cdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjM4LjEzNjAxNzc5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDk0NjIxOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDozOC4xMzYwMjIyNDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDkwOTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhmNTRiN2JmZDIxMWQyODk0YTIyMWU3OWQ4YTllNTY5NjAzNzYxNGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCA0MWEwZWJkZjIwMWU3MS4uODhhYzg1MzU0NDQ1NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTU2OCwxNCArMTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG90eDJfZ2V0X3RvdGFsX3R4X3F1ZXVlcyhwZik7IHFpZHgrKykge1xcbiBcXHRcXHRzcSA9IFxcdTAwMjZxc2V0LVxcdTAwM2VzcVtxaWR4XTtcXG4tXFx0XFx0LyogU2tpcCBmcmVlaW5nIFFvcyBxdWV1ZXMgaWYgdGhleSBhcmUgbm90IGluaXRpYWxpemVkICovXFxuLVxcdFxcdGlmICghc3EtXFx1MDAzZXNxZSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlc3FlKTtcXG4tXFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2VzcWVfcmluZyk7XFxuLVxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlY3B0X3Jlc3ApO1xcbi1cXHRcXHRxbWVtX2ZyZWUocGYtXFx1MDAzZWRldiwgc3EtXFx1MDAzZXRzb19oZHJzKTtcXG4tXFx0XFx0a2ZyZWUoc3EtXFx1MDAzZXNnKTtcXG4rXFx0XFx0Lyogc3EtXFx1MDAzZXNxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovXFxuK1xcdFxcdGlmIChzcS1cXHUwMDNlc3FlKSB7XFxuK1xcdFxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlc3FlKTtcXG4rXFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2VzcWVfcmluZyk7XFxuK1xcdFxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlY3B0X3Jlc3ApO1xcbitcXHRcXHRcXHRxbWVtX2ZyZWUocGYtXFx1MDAzZWRldiwgc3EtXFx1MDAzZXRzb19oZHJzKTtcXG4rXFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2V0aW1lc3RhbXBzKTtcXG4rXFx0XFx0XFx0a2ZyZWUoc3EtXFx1MDAzZXNnKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRrZnJlZShzcS1cXHUwMDNlc3FiX3B0cnMpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTcxMCwxMyArMTcxMSwxMiBAQCBpbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiBcXG4gZXJyX2ZyZWVfbml4X3F1ZXVlczpcXG4tXFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuIFxcdG90eDJfZnJlZV9jcV9yZXMocGYpO1xcbiBcXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5JWF9BUV9DVFlQRV9SUSwgZmFsc2UpO1xcbiBlcnJfZnJlZV90eHNjaDpcXG4gXFx0b3R4Ml90eHNjaHFfc3RvcChwZik7XFxuIGVycl9mcmVlX3NxX3B0cnM6XFxuLVxcdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcXG4rXFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuIGVycl9mcmVlX3JxX3B0cnM6XFxuIFxcdG90eDJfZnJlZV9hdXJhX3B0cihwZiwgQVVSQV9OSVhfUlEpO1xcbiBcXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5QQV9BUV9DVFlQRV9QT09MLCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6MzguNTIxNTg3NTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcwOTA0Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ1RFT05UWDJfUEZcIixcbiAgICBcIk9DVEVPTlRYMl9BRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm90eDJfZnJlZV9zcV9yZXNcIixcbiAgICBcIm90eDJfaW5pdF9od19yZXNvdXJjZXNcIixcbiAgICBcIm90eDJfZnJlZV9od19yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXFx1MDAzZXRpbWVzdGFtcHMgYW5kIHNxLVxcdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjU0YjdiZmQyMTFkMjg5NGEyMjFlNzlkOGE5ZTU2OTYwMzc2MTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggNDFhMGViZGYyMDFlNzEuLjg4YWM4NTM1NDQ0NTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE1NjgsMTQgKzE1NjgsMTUgQEAgc3RhdGljIHZvaWQgb3R4Ml9mcmVlX3NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0b3R4Ml9zcV9mcmVlX3NxYnMocGYpO1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2Mgb3R4Ml9nZXRfdG90YWxfdHhfcXVldWVzKHBmKTsgcWlkeCsrKSB7XG4gXHRcdHNxID0gXHUwMDI2cXNldC1cdTAwM2VzcVtxaWR4XTtcbi1cdFx0LyogU2tpcCBmcmVlaW5nIFFvcyBxdWV1ZXMgaWYgdGhleSBhcmUgbm90IGluaXRpYWxpemVkICovXG4tXHRcdGlmICghc3EtXHUwMDNlc3FlKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWUpO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWVfcmluZyk7XG4tXHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZWNwdF9yZXNwKTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldHNvX2hkcnMpO1xuLVx0XHRrZnJlZShzcS1cdTAwM2VzZyk7XG4rXHRcdC8qIHNxLVx1MDAzZXNxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovXG4rXHRcdGlmIChzcS1cdTAwM2VzcWUpIHtcbitcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWUpO1xuK1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXNxZV9yaW5nKTtcbitcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4rXHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldHNvX2hkcnMpO1xuK1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRpbWVzdGFtcHMpO1xuK1x0XHRcdGtmcmVlKHNxLVx1MDAzZXNnKTtcbitcdFx0fVxuIFx0XHRrZnJlZShzcS1cdTAwM2VzcWJfcHRycyk7XG4gXHR9XG4gfVxuQEAgLTE3MTAsMTMgKzE3MTEsMTIgQEAgaW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX2ZyZWVfbml4X3F1ZXVlczpcbi1cdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIFx0b3R4Ml9mcmVlX2NxX3JlcyhwZik7XG4gXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5JWF9BUV9DVFlQRV9SUSwgZmFsc2UpO1xuIGVycl9mcmVlX3R4c2NoOlxuIFx0b3R4Ml90eHNjaHFfc3RvcChwZik7XG4gZXJyX2ZyZWVfc3FfcHRyczpcbi1cdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcbitcdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIGVycl9mcmVlX3JxX3B0cnM6XG4gXHRvdHgyX2ZyZWVfYXVyYV9wdHIocGYsIEFVUkFfTklYX1JRKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTlBBX0FRX0NUWVBFX1BPT0wsIHRydWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6MzguNTIxNTkwMTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5MjM2OTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2g6IE9jdGVvblRYMiBOSUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2xlYW5pbmcgdXAgdGhlIHJlc291cmNlIGZyZWVpbmcgaW4gYG90eDJfZnJlZV9zcV9yZXNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBrZnJlZShzcS1cdTAwM2V0aW1lc3RhbXBzKWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCdzIGVuc3VyaW5nIHRoYXQgYGtmcmVlKHNxLVx1MDAzZXNxYl9wdHJzKWAgaXMgKmFsd2F5cyogY2FsbGVkLCBldmVuIGlmIHRoZSBxdWV1ZSBpc24ndCBmdWxseSBpbml0aWFsaXplZCAoYCFzcS1cdTAwM2VzcWVgKS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgYGNvbnRpbnVlYCB0aGF0IHdvdWxkIHNraXAgZnJlZWluZyBgc3FiX3B0cnNgIGlmIGBzcS1cdTAwM2VzcWVgIHdhcyBOVUxMLiBOb3cgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIGlzIHN0cnVjdHVyZWQgc28gdGhhdCBga2ZyZWUoc3EtXHUwMDNlc3FiX3B0cnMpYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBhbGwgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZCBvbiBxdWV1ZSBkZXN0cnVjdGlvbiwgYXMgc2tpcHBpbmcgdGhpcyBzdGVwIGNvdWxkIGxlYWQgdG8gc3VidGxlIG1lbW9yeSBsZWFrcy5cblxuQWxzbywgSSBzZWUgYSBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cgd2l0aGluIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBvdHgyX2ZyZWVfc3FfcmVzYCBpbiB0aGUgZXJyb3IgcGF0aC4gSSB3b25kZXIgd2h5IHRoZXkgbWFkZSB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBkcml2ZXIuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGNhbiB0aGlzIGJlIGhpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBOSUMsIHNvIGl0J3MgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZy4gVW5sZXNzIHRoZXJlJ3Mgc29mdHdhcmUgZW11bGF0aW9uLCBkcml2ZXJzIGxpa2UgdGhpcyBhcmUgdHlwaWNhbGx5IHRyaWNreSB0byBmdXp6IHdpdGggc3l6a2FsbGVyLiBJZiBpdCdzIGEgVVNCIG9yIHZpcnR1YWwgZGV2aWNlIGl0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGZ1enphYmxlLiBIb3dldmVyLCBpZiBQQ0kgZnV6emluZyBpcyBlbmFibGVkLCBvciBpZiBpdCBpcyBhIFVTQiBkZXZpY2UgdGhhdCBjb3VsZCBvcGVuIHVwIHBvc3NpYmlsaXRpZXMuIEkgcmVjYWxsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHJpZ2h0PyBUaHJvdWdoIHZQQ0ksIG9yLCBJIHRoaW5rLCBldmVuIGJ5IGp1c3QgdGhyb3dpbmcgcmFuZG9tIGRldmljZSBJRHMgaWYgUENJIGZ1enppbmcgaXMgdHVybmVkIG9uLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCBpZiByZWFjaGFibGUsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zLCBzbyBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDo0Ny42MTM5NjE0NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzOTQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9NTE9Y29uZmlnIFJWVV9FU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IGFmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBuaWMvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZT02PWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9NQk9YKSArPSBydnVfbWJveC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBydnVfYWYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6Njc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfQ04xMEtfUlBNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4Lmg6MTY6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXFx0XFx0MHhBMDU5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTU0PURFRklORV9TSE9XX0FUVFJJQlVURShucGNfbWNhbV9sYXlvdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2Ni1zdGF0aWMgaW50IF9fbmFtZSAjIyBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0Mi0jZGVmaW5lIFRPVEFMX1NaIChNQVhfTlVNX0JBTktTICogTUFYX05VTV9TVUJfQkFOS1MgKiBNQVhfU1VCQkFOS19ERVBUSCAqIDY0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MjQ1PXN0YXRpYyBpbnQgbnBjX21jYW1fbWlzbWF0Y2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXFxcIiV1XFxcXHQlZFxcXFx0JXVcXFxcblxcXCIgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyMTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQXFx0XFx0XFx0MHhBMDBDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXFx0XFx0MHhCMTAwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXFx0MHhCNjAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFxcdFxcdFxcdDB4QTA4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFxcdFxcdFxcdDB4QTA5RVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTkzOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk1LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk2WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTctXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwMjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NU1NX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA2LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo0NTpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjkzNDpcXHRcXHRcXHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVxcdGlmICghcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4OlxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0OS1cXHRcXHRcXHQgICAgICBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjQ6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXFx0XFx0MHhBMDY1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXFx0XFx0XFx0MHhBMDYxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zODM9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVxcdFxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XFx0XFx0XFx0XFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQwOC1cXHRcXHRpZiAoIXBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0Mi1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDQtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyOTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI5NjMtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMwMTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZndkYXRhKHN0cnVjdCBzZXFfZmlsZSAqcywgaW50IGxtYWNfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMTgtXFx0cnZ1ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcXHRcXHRcXHRcXHRcXHQgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGLCBOVUxMKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVxcdGlmICghcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgKz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICs9IHJ2dV9yZXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDItLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXFx0XFx0MHhBMDY0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDU6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXFx0XFx0MHhBMEY4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFxcdFxcdDB4QTBGN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTU5OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NTk5OlxcdHJldHVybiAocGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjAwLVxcdFxcdChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX1JWVV9SRVApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XFx0cmV0dXJuIHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zOC1cXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml92Zl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjQ6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXFx0eyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjQ3LjY2OTM2MDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5OTgxNzkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBPQ1RFT05UWDJfUEYgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgT0NURU9OVFgyX1BGYCBkcml2ZXIuIEl0J3MgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEZgIGRldmljZSAoMHhBMDYzKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiY2FuIHdlIGZ1enogdGhpcyB0aGluZyB3aXRoIFN5emthbGxlciB1c2luZyB2UENJP1wiIFRoZSBwcmUtcmVxdWlzaXRlLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYENPTkZJR19QQ0lgIG5lZWRzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGUgZHJpdmVyIGl0c2VsZiBuZWVkcyB0byBiZSBsb2FkZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIGZ1enppbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoYXQncyBhIGtleSBxdWVzdGlvbiBoZXJlLiBJZiB3ZSBjYW4gaW5qZWN0IGEgZmFrZSBQQ0kgZGV2aWNlIHVzaW5nIFN5emthbGxlciwgd2l0aCBhIGBQQ0lfVkVORE9SX0lEX0NBVklVTWAgdmVuZG9yIElEIGFuZCBkZXZpY2UgSUQgYDB4QTA2M2AsIHRoZW4gdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSdyZSBhaW1pbmcgZm9yLlxuXG5Ob3csIGJlZm9yZSBJIG1vdmUgb24sIGxldCdzIGxvb2sgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgdGhhdCBgQ09ORklHX09DVEVPTlRYMl9QRmAgaXMgdGhlIG1haW4gdGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gQnV0LCBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgb3R4Ml9mcmVlX3NxX3Jlc2AgYW5kIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gVGhlIGNyaXRpY2FsIHBvaW50IG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgZHVyaW5nIHRoZSBwcm9iZSwgb3Igd2hlbiBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlPyBJdCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgY291bGQgYmUgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6NTIuNjY5MTc5ODU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mjk2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm90eDJfaW5pdF9od19yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD0xMDgwPWludCBvdHgyX2FsbG9jX3F1ZXVlX21lbShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDgxOmludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTA4Mi12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE1ODQ9c3RhdGljIGludCBvdHgyX2dldF9yYnVmX3NpemUoc3RydWN0IG90eDJfbmljICpwZiwgaW50IG10dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTYxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE2MTI6aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE2MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzQzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3NDQ6RVhQT1JUX1NZTUJPTChvdHgyX2luaXRfaHdfcmVzb3VyY2VzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3NDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE5NjU9aW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xOTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTk3OTpcXHRlcnIgPSBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE5ODAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz01OTc9c3RhdGljIGludCBydnVfcmVwX3JzcmNfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtNjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo2MTA6XFx0ZXJyID0gb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtNjExLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjUyLjcyMzQ4MTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTM1MzQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBhbmQgZnJlZWluZyBwcm9jZXNzIHdpdGhpbiB0aGUgYG90eDJgIGRyaXZlciwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOlxuXG4qKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIG90eDIgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIHByZXR0eSBjcnVjaWFsLiBJdCdzIGNhbGxlZCBmcm9tIGBvdHgyX29wZW5gLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBpcyBicm91Z2h0IG9ubGluZS4gVGhpcyBzdWdnZXN0cyBpdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGZvciB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW9uLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBjYWxsZWQgaWYgYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGZhaWxzICpkdXJpbmcqIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGlzIGluZGljYXRlcyB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGlmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBydW5zIGludG8gYSBzbmFnLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzLiBUaGUgZmFjdCB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyB1c2VkIG9uIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBjYXJlZnVsIGRlc2lnbiB0byBncmFjZWZ1bGx5IGhhbmRsZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4gRmluYWxseSwgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHByb2JhYmx5IGFsc28gY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHNodXQgZG93biwgYW5kIHRoZXJlZm9yZSByZXNvdXJjZXMgYXJlIGZyZWVkLiBUaGlzIHNlZW1zIGxpa2UgYSBzdGFuZGFyZCBhbmQgcmVzcG9uc2libGUgcGF0dGVybiBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgZW5zdXJpbmcgdGhhdCByZXNvdXJjZXMgYXJlIGVpdGhlciBwcm9wZXJseSBpbml0aWFsaXplZCBvciBkZWFsbG9jYXRlZCBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIG9yIHNodXRkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIyMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjU2LjMxNzAxODE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgxNjMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdHgyX2ZyZWVfc3FfcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0xNTQ1PXN0YXRpYyB2b2lkIG90eDJfZnJlZV9jcV9yZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE1NTk6c3RhdGljIHZvaWQgb3R4Ml9mcmVlX3NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE2MTI9aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTcxOC1lcnJfZnJlZV9zcV9wdHJzOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTcxOTpcXHRvdHgyX2ZyZWVfc3FfcmVzKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3MjAtZXJyX2ZyZWVfcnFfcHRyczpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTc0Nj12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3ODg6XFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDo1Ni4zNzE4NDA0ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ2NDU3NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZXNvdXJjZSBNYW5hZ2VtZW50IGluIHRoZSBPVFgyIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBvdHgyX2ZyZWVfc3FfcmVzYCBmdW5jdGlvbiBpcyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGluIHR3byBrZXkgcGxhY2VzOiBhcyBwYXJ0IG9mIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGFuZCBhbHNvIHdpdGhpbiBgb3R4Ml9mcmVlX2h3X3Jlc291cmNlc2AsIHdoaWNoIGdldHMgaW52b2tlZCBkdXJpbmcgdGhpbmdzIGxpa2UgYSBkZXZpY2Ugc3RvcC4gSG1tbSwgdGhlIHNlcXVlbmNlIGlzIHN0YXJ0aW5nIHRvIGNvbWUgaW50byBmb2N1cy5cblxuQnV0IGEgcXVlc3Rpb24gcG9wcGVkIGludG8gbXkgaGVhZDogZG9lcyBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYWN0dWFsbHkgcGVyZm9ybSBhbnkgaGFyZHdhcmUgY29tbXVuaWNhdGlvbj8gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC4gSWYgaXQgZG9lcywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IGNvdWxkIGZhaWwgZWFybHkgb24sIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCB3aGVyZSB0aGUgaGFyZHdhcmUgbWlnaHQgbm90IGJlIHBoeXNpY2FsbHkgcHJlc2VudCwgcGVyaGFwcyByZXByZXNlbnRlZCBieSBqdXN0IGEgcGxhY2Vob2xkZXIgb3IgXCJmYWtlXCIgUENJIGRldmljZS4gV2UnZCBzZWUgaXQgdGhlbi5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGFuZCBjb25maXJtIG9yIGRpc3BlbCB0aGlzIGh5cG90aGVzaXMuIEdvdHRhIGV4YW1pbmUgdGhhdCBmdW5jdGlvbidzIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODMsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MDAuMjE4Mjk5OTg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjEyOlxcdGludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuMTYxMzpcXHR7XFxuMTYxNDpcXHRcXHRzdHJ1Y3Qgbml4X2xmX2ZyZWVfcmVxICpmcmVlX3JlcTtcXG4xNjE1OlxcdFxcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmLVxcdTAwM2VtYm94O1xcbjE2MTY6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4xNjE3OlxcdFxcdHN0cnVjdCBtc2dfcmVxICpyZXE7XFxuMTYxODpcXHRcXHRpbnQgZXJyID0gMCwgbHZsO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHQvKiBTZXQgcmVxdWlyZWQgTlBBIExGJ3MgcG9vbCBjb3VudHNcXG4xNjIxOlxcdFxcdCAqIEF1cmFzIGFuZCBQb29scyBhcmUgdXNlZCBpbiBhIDE6MSBtYXBwaW5nLFxcbjE2MjI6XFx0XFx0ICogc28sIGF1cmEgY291bnQgPSBwb29sIGNvdW50LlxcbjE2MjM6XFx0XFx0ICovXFxuMTYyNDpcXHRcXHRody1cXHUwMDNlcnFwb29sX2NudCA9IGh3LVxcdTAwM2VyeF9xdWV1ZXM7XFxuMTYyNTpcXHRcXHRody1cXHUwMDNlc3Fwb29sX2NudCA9IG90eDJfZ2V0X3RvdGFsX3R4X3F1ZXVlcyhwZik7XFxuMTYyNjpcXHRcXHRody1cXHUwMDNlcG9vbF9jbnQgPSBody1cXHUwMDNlcnFwb29sX2NudCArIGh3LVxcdTAwM2VzcXBvb2xfY250O1xcbjE2Mjc6XFx0XFxuMTYyODpcXHRcXHRpZiAoIW90eDJfcmVwX2RldihwZi1cXHUwMDNlcGRldikpIHtcXG4xNjI5OlxcdFxcdFxcdC8qIE1heGltdW0gaGFyZHdhcmUgc3VwcG9ydGVkIHRyYW5zbWl0IGxlbmd0aCAqL1xcbjE2MzA6XFx0XFx0XFx0cGYtXFx1MDAzZXR4X21heF9wa3RsZW4gPSBwZi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VtYXhfbXR1ICsgT1RYMl9FVEhfSExFTjtcXG4xNjMxOlxcdFxcdFxcdHBmLVxcdTAwM2VyYnNpemUgPSBvdHgyX2dldF9yYnVmX3NpemUocGYsIHBmLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW10dSk7XFxuMTYzMjpcXHRcXHR9XFxuMTYzMzpcXHRcXG4xNjM0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2MzU6XFx0XFx0LyogTlBBIGluaXQgKi9cXG4xNjM2OlxcdFxcdGVyciA9IG90eDJfY29uZmlnX25wYShwZik7XFxuMTYzNzpcXHRcXHRpZiAoZXJyKVxcbjE2Mzg6XFx0XFx0XFx0Z290byBleGl0O1xcbjE2Mzk6XFx0XFxuMTY0MDpcXHRcXHQvKiBOSVggaW5pdCAqL1xcbjE2NDE6XFx0XFx0ZXJyID0gb3R4Ml9jb25maWdfbml4KHBmKTtcXG4xNjQyOlxcdFxcdGlmIChlcnIpXFxuMTY0MzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25wYV9sZjtcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0XFx0LyogRGVmYXVsdCBkaXNhYmxlIGJhY2twcmVzc3VyZSBvbiBOSVgtQ1BUICovXFxuMTY0NjpcXHRcXHRvdHgyX25peF9jcHRfY29uZmlnX2JwKHBmLCBmYWxzZSk7XFxuMTY0NzpcXHRcXG4xNjQ4OlxcdFxcdC8qIEVuYWJsZSBiYWNrcHJlc3N1cmUgZm9yIENHWCBtYXBwZWQgUEYvVkZzICovXFxuMTY0OTpcXHRcXHRpZiAoIWlzX290eDJfbGJrdmYocGYtXFx1MDAzZXBkZXYpKVxcbjE2NTA6XFx0XFx0XFx0b3R4Ml9uaXhfY29uZmlnX2JwKHBmLCB0cnVlKTtcXG4xNjUxOlxcdFxcbjE2NTI6XFx0XFx0LyogSW5pdCBBdXJhcyBhbmQgcG9vbHMgdXNlZCBieSBOSVggUlEsIGZvciBmcmVlIGJ1ZmZlciBwdHJzICovXFxuMTY1MzpcXHRcXHRlcnIgPSBvdHgyX3JxX2F1cmFfcG9vbF9pbml0KHBmKTtcXG4xNjU0OlxcdFxcdGlmIChlcnIpIHtcXG4xNjU1OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY1NjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25peF9sZjtcXG4xNjU3OlxcdFxcdH1cXG4xNjU4OlxcdFxcdC8qIEluaXQgQXVyYXMgYW5kIHBvb2xzIHVzZWQgYnkgTklYIFNRLCBmb3IgcXVldWVpbmcgU1FFcyAqL1xcbjE2NTk6XFx0XFx0ZXJyID0gb3R4Ml9zcV9hdXJhX3Bvb2xfaW5pdChwZik7XFxuMTY2MDpcXHRcXHRpZiAoZXJyKSB7XFxuMTY2MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2NjI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9ycV9wdHJzO1xcbjE2NjM6XFx0XFx0fVxcbjE2NjQ6XFx0XFxuMTY2NTpcXHRcXHRlcnIgPSBvdHgyX3R4c2NoX2FsbG9jKHBmKTtcXG4xNjY2OlxcdFxcdGlmIChlcnIpIHtcXG4xNjY3OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY2ODpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XFxuMTY2OTpcXHRcXHR9XFxuMTY3MDpcXHRcXG4xNjcxOlxcdCNpZmRlZiBDT05GSUdfRENCXFxuMTY3MjpcXHRcXHRpZiAocGYtXFx1MDAzZXBmY19lbikge1xcbjE2NzM6XFx0XFx0XFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2FsbG9jKHBmKTtcXG4xNjc0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjc1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY3NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XFxuMTY3NzpcXHRcXHRcXHR9XFxuMTY3ODpcXHRcXHR9XFxuMTY3OTpcXHQjZW5kaWZcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0ZXJyID0gb3R4Ml9jb25maWdfbml4X3F1ZXVlcyhwZik7XFxuMTY4MjpcXHRcXHRpZiAoZXJyKSB7XFxuMTY4MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2ODQ6XFx0XFx0XFx0Z290byBlcnJfZnJlZV90eHNjaDtcXG4xNjg1OlxcdFxcdH1cXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4xNjg4OlxcdFxcdFxcdGludCBpZHg7XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4xNjkxOlxcdFxcdFxcdFxcdGVyciA9IG90eDJfdHhzY2hxX2NvbmZpZyhwZiwgbHZsLCBpZHgsIGZhbHNlKTtcXG4xNjkyOlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjkzOlxcdFxcdFxcdFxcdFxcdGRldl9lcnIocGYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBjb25maWcgVFhTQ0hcXFxcblxcXCIpO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4xNjk1OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfbml4X3F1ZXVlcztcXG4xNjk2OlxcdFxcdFxcdFxcdH1cXG4xNjk3OlxcdFxcdFxcdH1cXG4xNjk4OlxcdFxcdH1cXG4xNjk5OlxcdFxcbjE3MDA6XFx0I2lmZGVmIENPTkZJR19EQ0JcXG4xNzAxOlxcdFxcdGlmIChwZi1cXHUwMDNlcGZjX2VuKSB7XFxuMTcwMjpcXHRcXHRcXHRlcnIgPSBvdHgyX3BmY190eHNjaHFfY29uZmlnKHBmKTtcXG4xNzAzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNzA0OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTcwNTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XFxuMTcwNjpcXHRcXHRcXHR9XFxuMTcwNzpcXHRcXHR9XFxuMTcwODpcXHQjZW5kaWZcXG4xNzA5OlxcdFxcbjE3MTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4xNzExOlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjAwLjIxODQ2OTcyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTExOTQzNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiB0aGUgT1RYMiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBmdW5jdGlvbiBJJ20gZXhhbWluaW5nIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIHJlc291cmNlIGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB0aGUgaGFyZHdhcmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgT1RYMidzIHRyYW5zbWl0IHNjaGVkdWxlci4gTXkgY29uY2VybiBzdGVtcyBmcm9tIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgb3R4Ml90eHNjaF9hbGxvY2AgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZV9zcV9wdHJzYCwgd2hpY2ggdGhlbiBjYWxscyBgb3R4Ml9mcmVlX3NxX3Jlc2AuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4gSG93ZXZlciwgaWYgYG90eDJfY29uZmlnX25peF9xdWV1ZXNgIGZhaWxzLCB3ZSBicmFuY2ggdG8gYGVycl9mcmVlX3R4c2NoYCwgd2hpY2ggY2FsbHMgYG90eDJfdHhzY2hxX3N0b3BgIGJlZm9yZSB0aGVuIG1vdmluZyB0byBgZXJyX2ZyZWVfc3FfcHRyc2AuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgaXMgdGhpcyBlcnJvciBmbG93IGNvcnJlY3RseSBmcmVlaW5nICphbGwqIGFsbG9jYXRlZCByZXNvdXJjZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIsIGFjY29yZGluZyB0byB0aGUgcGF0Y2gsIGlzIGFuIGlkZW50aWZpZWQgbWVtb3J5IGxlYWsgY29uY2VybmluZyBgc3EtXHUwMDNldGltZXN0YW1wc2AgYW5kIGBzcS1cdTAwM2VzcWJfcHRyc2AuIFRoZXkncmUgYXBwYXJlbnRseSBub3QgYmVpbmcgcHJvcGVybHkgcmVsZWFzZWQgaW4gc29tZSBmYWlsdXJlIHNjZW5hcmlvcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGlzc3VlLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGUgbm93IGVuc3VyZXMgdGhvc2UgYXJlIGFsd2F5cyBjb3JyZWN0bHkgZnJlZWQuXG5cbk5leHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHJlYWNoIHRoaXMgY29kZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IHVzaW5nIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgZXZlbiBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHRhcmdldCB0aGlzIGRyaXZlcj8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0LiBTbywgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBnZXQgaXQgdG8gaW5qZWN0IHRoZSBQQ0kgZGV2aWNlLCBgb3R4Ml9wcm9iZWAgd291bGQgYmUgY2FsbGVkLiBUaGF0J3MgYSBkZWZpbml0ZSBwYXRoIHRvIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGNhcmVmdWxseSBjaGVjayB0aGUgYG90eDJfcHJvYmVgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjA1LjMzMDQxNjE3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MDExODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3R4Ml9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzEyMT1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTMxMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozMTIzOnN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM1NDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG90eDJfcGZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTQzLVxcdC5pZF90YWJsZSA9IG90eDJfcGZfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTQ0OlxcdC5wcm9iZSA9IG90eDJfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTQ1LVxcdC5zaHV0ZG93biA9IG90eDJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNTowNS4zODQwMjIxNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4OTIxNjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBgb3R4Ml9wcm9iZWAncyBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgb3R4Ml9wcm9iZWAgZnVuY3Rpb24gaXMgYWxsIGFib3V0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBwcm9jZXNzIG9mIGludmVzdGlnYXRpb24sIG9mIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgb3V0Y29tZXMgYXJlLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLCBtYXliZSByZWFkaW5nIHRoZSBjb2RlLCBjaGVja2luZyBmb3IgZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBydW5uaW5nIGl0IGluIGEgc2FuZGJveCBlbnZpcm9ubWVudCB0byBzZWUgaXRzIGJlaGF2aW9yIGZpcnN0aGFuZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cywgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEtub3dpbmcgdGhlIGRldGFpbHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwODIsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNTowOC41NzMyNDEyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMjM6XFx0c3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMzEyNDpcXHR7XFxuMzEyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjMxMjY6XFx0XFx0aW50IGVyciwgcWNvdW50LCBxb3NfdHhxcztcXG4zMTI3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuMzEyODpcXHRcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmO1xcbjMxMjk6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3O1xcbjMxMzA6XFx0XFxuMzEzMTpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuMzEzMjpcXHRcXHRpZiAoZXJyKSB7XFxuMzEzMzpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcXFxuXFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxMzU6XFx0XFx0fVxcbjMxMzY6XFx0XFxuMzEzNzpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgRFJWX05BTUUpO1xcbjMxMzg6XFx0XFx0aWYgKGVycikge1xcbjMxMzk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJQQ0kgcmVxdWVzdCByZWdpb25zIGZhaWxlZCAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjMxNDA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTQxOlxcdFxcdH1cXG4zMTQyOlxcdFxcbjMxNDM6XFx0XFx0ZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg0OCkpO1xcbjMxNDQ6XFx0XFx0aWYgKGVycikge1xcbjMxNDU6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJETUEgbWFzayBjb25maWcgZmFpbGVkLCBhYm9ydFxcXFxuXFxcIik7XFxuMzE0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxNDc6XFx0XFx0fVxcbjMxNDg6XFx0XFxuMzE0OTpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4zMTUwOlxcdFxcbjMxNTE6XFx0XFx0LyogU2V0IG51bWJlciBvZiBxdWV1ZXMgKi9cXG4zMTUyOlxcdFxcdHFjb3VudCA9IG1pbl90KGludCwgbnVtX29ubGluZV9jcHVzKCksIE9UWDJfTUFYX0NRX0NOVCk7XFxuMzE1MzpcXHRcXHRxb3NfdHhxcyA9IG1pbl90KGludCwgcWNvdW50LCBPVFgyX1FPU19NQVhfTEVBRl9OT0RFUyk7XFxuMzE1NDpcXHRcXG4zMTU1OlxcdFxcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xcyhzaXplb2YoKnBmKSwgcWNvdW50ICsgcW9zX3R4cXMsIHFjb3VudCk7XFxuMzE1NjpcXHRcXHRpZiAoIW5ldGRldilcXG4zMTU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMxNTg6XFx0XFxuMzE1OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTtcXG4zMTYwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMzE2MTpcXHRcXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuMzE2MjpcXHRcXHRwZi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbjMxNjM6XFx0XFx0cGYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjMxNjQ6XFx0XFx0cGYtXFx1MDAzZWRldiA9IGRldjtcXG4zMTY1OlxcdFxcdHBmLVxcdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xcbjMxNjY6XFx0XFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuMzE2NzpcXHRcXG4zMTY4OlxcdFxcdGh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4zMTY5OlxcdFxcdGh3LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4zMTcwOlxcdFxcdGh3LVxcdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XFxuMzE3MTpcXHRcXHRody1cXHUwMDNldHhfcXVldWVzID0gcWNvdW50O1xcbjMxNzI6XFx0XFx0aHctXFx1MDAzZW5vbl9xb3NfcXVldWVzID0gcWNvdW50O1xcbjMxNzM6XFx0XFx0aHctXFx1MDAzZW1heF9xdWV1ZXMgPSBxY291bnQ7XFxuMzE3NDpcXHRcXHRody1cXHUwMDNlcmJ1Zl9sZW4gPSBPVFgyX0RFRkFVTFRfUkJVRl9MRU47XFxuMzE3NTpcXHRcXHQvKiBVc2UgQ1FFIG9mIDEyOCBieXRlIGRlc2NyaXB0b3Igc2l6ZSBieSBkZWZhdWx0ICovXFxuMzE3NjpcXHRcXHRody1cXHUwMDNleHFlX3NpemUgPSAxMjg7XFxuMzE3NzpcXHRcXG4zMTc4OlxcdFxcdGVyciA9IG90eDJfaW5pdF9yc3JjKHBkZXYsIHBmKTtcXG4zMTc5OlxcdFxcdGlmIChlcnIpXFxuMzE4MDpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25ldGRldjtcXG4zMTgxOlxcdFxcbjMxODI6XFx0XFx0ZXJyID0gb3R4Ml9zZXRfcmVhbF9udW1fcXVldWVzKG5ldGRldiwgaHctXFx1MDAzZXR4X3F1ZXVlcywgaHctXFx1MDAzZXJ4X3F1ZXVlcyk7XFxuMzE4MzpcXHRcXHRpZiAoZXJyKVxcbjMxODQ6XFx0XFx0XFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XFxuMzE4NTpcXHRcXG4zMTg2OlxcdFxcdC8qIEFzc2lnbiBkZWZhdWx0IG1hYyBhZGRyZXNzICovXFxuMzE4NzpcXHRcXHRvdHgyX2dldF9tYWNfZnJvbV9hZihuZXRkZXYpO1xcbjMxODg6XFx0XFxuMzE4OTpcXHRcXHQvKiBEb24ndCBjaGVjayBmb3IgZXJyb3IuICBQcm9jZWVkIHdpdGhvdXQgcHRwICovXFxuMzE5MDpcXHRcXHRvdHgyX3B0cF9pbml0KHBmKTtcXG4zMTkxOlxcdFxcbjMxOTI6XFx0XFx0LyogTlBBJ3MgcG9vbCBpcyBhIHN0YWNrIHRvIHdoaWNoIFNXIGZyZWVzIGJ1ZmZlciBwb2ludGVycyB2aWEgQXVyYS5cXG4zMTkzOlxcdFxcdCAqIEhXIGFsbG9jYXRlcyBidWZmZXIgcG9pbnRlciBmcm9tIHN0YWNrIGFuZCB1c2VzIGl0IGZvciBETUEnaW5nXFxuMzE5NDpcXHRcXHQgKiBpbmdyZXNzIHBhY2tldC4gSW4gc29tZSBzY2VuYXJpb3MgSFcgY2FuIGZyZWUgYmFjayBhbGxvY2F0ZWQgYnVmZmVyXFxuMzE5NTpcXHRcXHQgKiBwb2ludGVycyB0byBwb29sLiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIFNXIHRvIG1haW50YWluIGFcXG4zMTk2OlxcdFxcdCAqIHBhcmFsbGVsIGxpc3Qgd2hlcmUgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGJ1ZmZlciBwb2ludGVycyAoSU9WQXMpXFxuMzE5NzpcXHRcXHQgKiBnaXZlbiB0byBIVyBjYW4gYmUgc2F2ZWQgZm9yIGxhdGVyIHJlZmVyZW5jZS5cXG4zMTk4OlxcdFxcdCAqXFxuMzE5OTpcXHRcXHQgKiBTbyB0aGUgb25seSB3YXkgdG8gY29udmVydCBSeCBwYWNrZXQncyBidWZmZXIgYWRkcmVzcyBpcyB0byB1c2VcXG4zMjAwOlxcdFxcdCAqIElPTU1VJ3MgaW92YV90b19waHlzKCkgaGFuZGxlciB3aGljaCB0cmFuc2xhdGVzIHRoZSBhZGRyZXNzIGJ5XFxuMzIwMTpcXHRcXHQgKiB3YWxraW5nIHRocm91Z2ggdGhlIHRyYW5zbGF0aW9uIHRhYmxlcy5cXG4zMjAyOlxcdFxcdCAqL1xcbjMyMDM6XFx0XFx0cGYtXFx1MDAzZWlvbW11X2RvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gKE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4zMjA2OlxcdFxcdFxcdFxcdCAgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhIQVNIIHxcXG4zMjA3OlxcdFxcdFxcdFxcdCAgICAgICBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbjMyMDg6XFx0XFx0XFx0XFx0ICAgICAgIE5FVElGX0ZfR1NPX1VEUF9MNCk7XFxuMzIwOTpcXHRcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuMzIxMDpcXHRcXG4zMjExOlxcdFxcdGVyciA9IG90eDJfbWNhbV9mbG93X2luaXQocGYpO1xcbjMyMTI6XFx0XFx0aWYgKGVycilcXG4zMjEzOlxcdFxcdFxcdGdvdG8gZXJyX3B0cF9kZXN0cm95O1xcbjMyMTQ6XFx0XFxuMzIxNTpcXHRcXHRvdHgyX3NldF9od19jYXBhYmlsaXRpZXMocGYpO1xcbjMyMTY6XFx0XFxuMzIxNzpcXHRcXHRlcnIgPSBjbjEwa19tY3NfaW5pdChwZik7XFxuMzIxODpcXHRcXHRpZiAoZXJyKVxcbjMyMTk6XFx0XFx0XFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcXG4zMjIwOlxcdFxcbjMyMjE6XFx0XFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVClcXG4zMjIyOlxcdFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjA4LjU3Mzg3ODMwNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY0Njk4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFJlc291cmNlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MganVtcGluZyBpbnRvIGFjdGlvbiwgY2FsbGluZyBgb3R4Ml9pbml0X3JzcmNgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24/IExldCdzIGRpc3NlY3QgYG90eDJfaW5pdF9yc3JjYC4gSSdtIGdvaW5nIHRvIGJlIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZS4gSXMgaXQgbWVtb3J5LCBoYXJkd2FyZSBwZXJpcGhlcmFscywgbmV0d29yayBpbnRlcmZhY2VzLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWluZyBzdWdnZXN0cyByZXNvdXJjZSBpbml0aWFsaXphdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBvdHgyX2luaXRfcnNyY2AgZnVuY3Rpb24uIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgY29uZmxpY3RzIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMgaGFuZGxlZCBncmFjZWZ1bGx5PyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgcmVzb3VyY2Ugc2V0dXA/IE15IGNoZWNrbGlzdCBpbmNsdWRlcyB2ZXJpZnlpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNpbmcsIGNoZWNraW5nIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFsbCByZWxldmFudCBhc3BlY3RzIG9mIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBhcmUgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uLCB0b28uIEFyZSB0aGVyZSBhbnkgZ2xvYmFsIHZhcmlhYmxlcyBiZWluZyBzZXQsIG9yIG90aGVyIG1vZHVsZXMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAzOSwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MTIuMzM4NTgwMTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDM2OlxcdFxcbjMwMzc6XFx0XFx0bnVtX3ZlYyA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4zMDM4OlxcdFxcdGh3LVxcdTAwM2VpcnFfbmFtZSA9IGRldm1fa21hbGxvY19hcnJheShcXHUwMDI2aHctXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgbnVtX3ZlYywgTkFNRV9TSVpFLFxcbjMwMzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4zMDQwOlxcdFxcdGlmICghaHctXFx1MDAzZWlycV9uYW1lKVxcbjMwNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA0MjpcXHRcXG4zMDQzOlxcdFxcdGh3LVxcdTAwM2VhZmZpbml0eV9tYXNrID0gZGV2bV9rY2FsbG9jKFxcdTAwMjZody1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBudW1fdmVjLFxcbjMwNDQ6XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjcHVtYXNrX3Zhcl90KSwgR0ZQX0tFUk5FTCk7XFxuMzA0NTpcXHRcXHRpZiAoIWh3LVxcdTAwM2VhZmZpbml0eV9tYXNrKVxcbjMwNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA0NzpcXHRcXG4zMDQ4OlxcdFxcdC8qIE1hcCBDU1JzICovXFxuMzA0OTpcXHRcXHRwZi1cXHUwMDNlcmVnX2Jhc2UgPSBwY2ltX2lvbWFwKHBkZXYsIFBDSV9DRkdfUkVHX0JBUl9OVU0sIDApO1xcbjMwNTA6XFx0XFx0aWYgKCFwZi1cXHUwMDNlcmVnX2Jhc2UpIHtcXG4zMDUxOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIG1hcCBwaHlzaWNhbCBmdW5jdGlvbiBDU1JzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuMzA1MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDUzOlxcdFxcdH1cXG4zMDU0OlxcdFxcbjMwNTU6XFx0XFx0ZXJyID0gb3R4Ml9jaGVja19wZl91c2FibGUocGYpO1xcbjMwNTY6XFx0XFx0aWYgKGVycilcXG4zMDU3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzA1ODpcXHRcXG4zMDU5OlxcdFxcdGlmICghaXNfY24yMGsocGYtXFx1MDAzZXBkZXYpKVxcbjMwNjA6XFx0XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2LCBSVlVfUEZfSU5UX1ZFQ19DTlQsXFxuMzA2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUlZVX1BGX0lOVF9WRUNfQ05ULCBQQ0lfSVJRX01TSVgpO1xcbjMwNjI6XFx0XFx0ZWxzZVxcbjMwNjM6XFx0XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2LCBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcXG4zMDY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcXG4zMDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQ0lfSVJRX01TSVgpO1xcbjMwNjY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4zMDY3OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEZhaWxlZCB0byBhbGxvYyAlZCBJUlEgdmVjdG9yc1xcXFxuXFxcIixcXG4zMDY4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBudW1fdmVjKTtcXG4zMDY5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzA3MDpcXHRcXHR9XFxuMzA3MTpcXHRcXG4zMDcyOlxcdFxcdG90eDJfc2V0dXBfZGV2X2h3X3NldHRpbmdzKHBmKTtcXG4zMDczOlxcdFxcbjMwNzQ6XFx0XFx0aWYgKGlzX2NuMjBrKHBmLVxcdTAwM2VwZGV2KSlcXG4zMDc1OlxcdFxcdFxcdGNuMjBrX2luaXQocGYpO1xcbjMwNzY6XFx0XFx0ZWxzZVxcbjMwNzc6XFx0XFx0XFx0b3R4Ml9pbml0X2h3X29wcyhwZik7XFxuMzA3ODpcXHRcXG4zMDc5OlxcdFxcdC8qIEluaXQgUEYgXFx1MDAzYz1cXHUwMDNlIEFGIG1haWxib3ggc3R1ZmYgKi9cXG4zMDgwOlxcdFxcdGVyciA9IG90eDJfcGZhZl9tYm94X2luaXQocGYpO1xcbjMwODE6XFx0XFx0aWYgKGVycilcXG4zMDgyOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxX3ZlY3RvcnM7XFxuMzA4MzpcXHRcXG4zMDg0OlxcdFxcdC8qIFJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0ICovXFxuMzA4NTpcXHRcXHRlcnIgPSBvdHgyX3JlZ2lzdGVyX21ib3hfaW50cihwZiwgdHJ1ZSk7XFxuMzA4NjpcXHRcXHRpZiAoZXJyKVxcbjMwODc6XFx0XFx0XFx0Z290byBlcnJfbWJveF9kZXN0cm95O1xcbjMwODg6XFx0XFxuMzA4OTpcXHRcXHQvKiBSZXF1ZXN0IEFGIHRvIGF0dGFjaCBOUEEgYW5kIE5JWCBMRnMgdG8gdGhpcyBQRi5cXG4zMDkwOlxcdFxcdCAqIE5JWCBhbmQgTlBBIExGcyBhcmUgbmVlZGVkIGZvciB0aGlzIFBGIHRvIGZ1bmN0aW9uIGFzIGEgTklDLlxcbjMwOTE6XFx0XFx0ICovXFxuMzA5MjpcXHRcXHRlcnIgPSBvdHgyX2F0dGFjaF9ucGFfbml4KHBmKTtcXG4zMDkzOlxcdFxcdGlmIChlcnIpXFxuMzA5NDpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX21ib3hfaW50cjtcXG4zMDk1OlxcdFxcbjMwOTY6XFx0XFx0ZXJyID0gb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhwZik7XFxuMzA5NzpcXHRcXHRpZiAoZXJyKVxcbjMwOTg6XFx0XFx0XFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XFxuMzA5OTpcXHRcXG4zMTAwOlxcdFxcdGVyciA9IGNuMTBrX2xtdHN0X2luaXQocGYpO1xcbjMxMDE6XFx0XFx0aWYgKGVycilcXG4zMTAyOlxcdFxcdFxcdGdvdG8gZXJyX2RldGFjaF9yc3JjO1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHRyZXR1cm4gMDtcXG4zMTA1OlxcdFxcbjMxMDY6XFx0ZXJyX2RldGFjaF9yc3JjOlxcbjMxMDc6XFx0XFx0aWYgKHBmLVxcdTAwM2Vody5sbXRfaW5mbylcXG4zMTA4OlxcdFxcdFxcdGZyZWVfcGVyY3B1KHBmLVxcdTAwM2Vody5sbXRfaW5mbyk7XFxuMzEwOTpcXHRcXHRpZiAodGVzdF9iaXQoQ04xMEtfTE1UU1QsIFxcdTAwMjZwZi1cXHUwMDNlaHcuY2FwX2ZsYWcpKVxcbjMxMTA6XFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHBmLVxcdTAwM2VkeW5jX2xtdCk7XFxuMzExMTpcXHRcXHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXFx1MDAyNnBmLVxcdTAwM2VtYm94KTtcXG4zMTEyOlxcdGVycl9kaXNhYmxlX21ib3hfaW50cjpcXG4zMTEzOlxcdFxcdG90eDJfZGlzYWJsZV9tYm94X2ludHIocGYpO1xcbjMxMTQ6XFx0ZXJyX21ib3hfZGVzdHJveTpcXG4zMTE1OlxcdFxcdG90eDJfcGZhZl9tYm94X2Rlc3Ryb3kocGYpO1xcbjMxMTY6XFx0ZXJyX2ZyZWVfaXJxX3ZlY3RvcnM6XFxuMzExNzpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhody1cXHUwMDNlcGRldik7XFxuMzExODpcXHRcXG4zMTE5OlxcdFxcdHJldHVybiBlcnI7XFxuMzEyMDpcXHR9XFxuMzEyMTpcXHRFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG4zMTIyOlxcdFxcbjMxMjM6XFx0c3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMzEyNDpcXHR7XFxuMzEyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjMxMjY6XFx0XFx0aW50IGVyciwgcWNvdW50LCBxb3NfdHhxcztcXG4zMTI3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuMzEyODpcXHRcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmO1xcbjMxMjk6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3O1xcbjMxMzA6XFx0XFxuMzEzMTpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuMzEzMjpcXHRcXHRpZiAoZXJyKSB7XFxuMzEzMzpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcXFxuXFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxMzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNToxMi4zMzg3NTE4NjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMTg0NTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gUmVzb3VyY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgb3R4Ml9pbml0X3JzcmNgIGFuZCBpdHMgZmlyc3QgY2FsbCB0byBgb3R4Ml9jaGVja19wZl91c2FibGUocGYpYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGF0IGNhbGwgYmVjYXVzZSBpdCdzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHBhcnRpY3VsYXIgcGh5c2ljYWwgZnVuY3Rpb24sIFwicGYsXCIgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHdlIGNhbiAqdXNlKiB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNyaXRlcmlhLiBMZXQncyBkaXZlIGludG8gdGhlIGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBjb25maWd1cmF0aW9uIHN0YXRlLCBwZXJoYXBzIGV2ZW4gcmVzb3VyY2UgYXZhaWxhYmlsaXR5PyBMZXQncyBmaWd1cmUgb3V0IHdoYXQgbWFrZXMgYSBQRiBcInVzYWJsZVwiIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE1Ljk0MDU5OTk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI4MDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdHgyX2NoZWNrX3BmX3VzYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTEwODM9aW50IG90eDJfd3FfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDg0OmludCBvdHgyX2NoZWNrX3BmX3VzYWJsZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xMDg1LWludCBvdHgyX3BmYWZfbWJveF9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTQ0PWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjk1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5NTU6aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjk1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTMwMzE9aW50IG90eDJfaW5pdF9yc3JjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zMDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzA1NTpcXHRlcnIgPSBvdHgyX2NoZWNrX3BmX3VzYWJsZShwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zMDU2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE1Ljk5NDg4ODE5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUzNzg4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgb3R4Ml9jaGVja19wZl91c2FibGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgb3R4Ml9jaGVja19wZl91c2FibGVgLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGluIGRldGVybWluaW5nIHRoZSB2aWFiaWxpdHkgb2YgYSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpIG9uIHRoaXMgc3lzdGVtLiBJdCBwcm9iYWJseSBjaGVja3MgZm9yIGEgdmFyaWV0eSBvZiBjb25kaXRpb25zIGJlZm9yZSBhbGxvd2luZyB0aGF0IFBGIHRvIGJlIGJyb3VnaHQgb25saW5lIG9yIHVzZWQgaW4gc29tZSBjYXBhY2l0eS4gSXMgaXQgZGVhbGluZyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIG9wdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdOKAmXMgYSBjaGVjaywgbWFraW5nIG1lIGFudGljaXBhdGUgYSBib29sZWFuIHJldHVybiBvciBzb21lIGZvcm0gb2Ygc3RhdHVzIGNvZGUuIFRoZSBcIm90eDJcIiBwcmVmaXggaXMgYSBjbHVlIHRvIHdoaWNoIHBsYXRmb3JtIG9yIGhhcmR3YXJlIHRoaXMgcmVsYXRlcyB0bywgd2hpY2ggc2hvdWxkIGhlbHAgdG8gcXVpY2tseSBjYXRlZ29yaXplIHRoZSBmdW5jdGlvbidzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE5LjY0ODY4MDkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NTU6XFx0aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbjI5NTY6XFx0e1xcbjI5NTc6XFx0XFx0dTY0IHJldjtcXG4yOTU4OlxcdFxcbjI5NTk6XFx0XFx0cmV2ID0gb3R4Ml9yZWFkNjQobmljLCBSVlVfUEZfQkxPQ0tfQUREUlhfRElTQyhCTEtBRERSX1JWVU0pKTtcXG4yOTYwOlxcdFxcdHJldiA9IChyZXYgXFx1MDAzZVxcdTAwM2UgMTIpIFxcdTAwMjYgMHhGRjtcXG4yOTYxOlxcdFxcdC8qIENoZWNrIGlmIEFGIGhhcyBzZXR1cCByZXZpc2lvbiBmb3IgUlZVTSBibG9jayxcXG4yOTYyOlxcdFxcdCAqIG90aGVyd2lzZSB0aGlzIGRyaXZlciBwcm9iZSBzaG91bGQgYmUgZGVmZXJyZWRcXG4yOTYzOlxcdFxcdCAqIHVudGlsIEFGIGRyaXZlciBjb21lcyB1cC5cXG4yOTY0OlxcdFxcdCAqL1xcbjI5NjU6XFx0XFx0aWYgKCFyZXYpIHtcXG4yOTY2OlxcdFxcdFxcdGRldl93YXJuKG5pYy1cXHUwMDNlZGV2LFxcbjI5Njc6XFx0XFx0XFx0XFx0IFxcXCJBRiBpcyBub3QgaW5pdGlhbGl6ZWQsIGRlZmVycmluZyBwcm9iZVxcXFxuXFxcIik7XFxuMjk2ODpcXHRcXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4yOTY5OlxcdFxcdH1cXG4yOTcwOlxcdFxcdHJldHVybiAwO1xcbjI5NzE6XFx0fVxcbjI5NzI6XFx0XFxuMjk3MzpcXHRpbnQgb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbjI5NzQ6XFx0e1xcbjI5NzU6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4yOTc2OlxcdFxcdGludCBudW1fdmVjLCBlcnI7XFxuMjk3NzpcXHRcXG4yOTc4OlxcdFxcdC8qIE5QQSBpbnRlcnJ1cHRzIGFyZSBpbm90IHJlZ2lzdGVyZWQsIHNvIGFsbG9jIG9ubHlcXG4yOTc5OlxcdFxcdCAqIHVwdG8gTklYIHZlY3RvciBvZmZzZXQuXFxuMjk4MDpcXHRcXHQgKi9cXG4yOTgxOlxcdFxcdG51bV92ZWMgPSBody1cXHUwMDNlbml4X21zaXhvZmY7XFxuMjk4MjpcXHRcXHRudW1fdmVjICs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCArIGh3LVxcdTAwM2VtYXhfcXVldWVzO1xcbjI5ODM6XFx0XFxuMjk4NDpcXHRcXHRvdHgyX2Rpc2FibGVfbWJveF9pbnRyKHBmKTtcXG4yOTg1OlxcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2KTtcXG4yOTg2OlxcdFxcdGVyciA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhody1cXHUwMDNlcGRldiwgbnVtX3ZlYywgbnVtX3ZlYywgUENJX0lSUV9NU0lYKTtcXG4yOTg3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjk4ODpcXHRcXHRcXHRkZXZfZXJyKHBmLVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIHJlYWxsb2MgJWQgSVJRIHZlY3RvcnNcXFxcblxcXCIsXFxuMjk4OTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgbnVtX3ZlYyk7XFxuMjk5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5OTE6XFx0XFx0fVxcbjI5OTI6XFx0XFxuMjk5MzpcXHRcXHRyZXR1cm4gb3R4Ml9yZWdpc3Rlcl9tYm94X2ludHIocGYsIGZhbHNlKTtcXG4yOTk0OlxcdH1cXG4yOTk1OlxcdEVYUE9SVF9TWU1CT0wob3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyk7XFxuMjk5NjpcXHRcXG4yOTk3OlxcdHN0YXRpYyBpbnQgb3R4Ml9zcmlvdl92ZmNmZ19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuMjk5ODpcXHR7XFxuMjk5OTpcXHRcXHRpbnQgaTtcXG4zMDAwOlxcdFxcbjMwMDE6XFx0XFx0cGYtXFx1MDAzZXZmX2NvbmZpZ3MgPSBkZXZtX2tjYWxsb2MocGYtXFx1MDAzZWRldiwgcGYtXFx1MDAzZXRvdGFsX3ZmcyxcXG4zMDAyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcpLFxcbjMwMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMzAwNDpcXHRcXHRpZiAoIXBmLVxcdTAwM2V2Zl9jb25maWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNToxOS42NDg4NDI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzYwNDk3MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9jdGVvbiBUWDIgUEYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAgZnVuY3Rpb24gcmVhZHMgYSBoYXJkd2FyZSByZWdpc3RlciwgYFJWVV9QRl9CTE9DS19BRERSWF9ESVNDYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgcHJvYmUgcHJvY2Vzcy4gSW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQsIHRoaXMgcmVhZCB3aWxsIGxpa2VseSByZXR1cm4gMCBvciAweEZGRkZGRkZGIGluaXRpYWxseSwgYnV0IHdlICpjYW4qIGluamVjdCBhIG5vbi16ZXJvIHZhbHVlIHRvIGJ5cGFzcyB0aGUgZGVmZXJyYWwsIHdoaWNoIGlzIGtleSB0byB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlIHBhdGguIFRoZSBjb2RlIHRoZW4gc2V0cyB1cCBhIG1haWxib3ggdXNpbmcgYG90eDJfcGZhZl9tYm94X2luaXRgIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEFkbWluIEZ1bmN0aW9uIChBRikgZHJpdmVyLiBUaGUgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBBRiBkcml2ZXIsIGNvbnRyb2xsZWQgYnkgYENPTkZJR19PQ1RFT05UWDJfQUZgLCBpcyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuIElmIHRoZSBBRiBkcml2ZXIgaXNuJ3QgbG9hZGVkIG9yIGZ1bmN0aW9uYWwsIHRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGxpa2VseSB0byBmYWlsLCBsZWFkaW5nIHRvIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nLiBIb3dldmVyLCBldmVuIGlmIHRoZSBBRiBkcml2ZXIgaXMgbm90IHBlcmZlY3RseSBmdW5jdGlvbmFsLCBTeXprYWxsZXIgKnNob3VsZCogc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZSBQRiBkcml2ZXIgaW5kZXBlbmRlbnRseSBpZiB3ZSBjYW4gbW9jayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMuXG5cblRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGludGVyZXN0aW5nOyBpdCdzIGEgbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb246IFBGIHdyaXRlcyB0byBhIG1lbW9yeSByZWdpb24gYW5kIHJpbmdzIGEgZG9vcmJlbGwuIFRoZSBBRiBkcml2ZXIgdGhlbiBoYW5kbGVzIHRoZSBpbnRlcnJ1cHQuIFRoaXMgaW50cm9kdWNlcyBhIHBvc3NpYmxlIGludGVyYWN0aW9uIHN1cmZhY2UgaWYgKmJvdGgqIGRyaXZlcnMgKFBGIGFuZCBBRikgYXJlIGJlaW5nIGZ1enplZC4gVGhhdCdzIGdvb2QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU6IG1vcmUgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG90eDJfZnJlZV9zcV9yZXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBvciBkdXJpbmcgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgaXMgY2FsbGVkIGJ5IGBvdHgyX29wZW5gLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAgKGUuZy4sIGBpcCBsaW5rIHNldCBkZXYgZXRoWCB1cGApLiBTbywgY2FuIHdlIGJyaW5nIHVwIHRoZSBuZXRkZXY/IFllcywgaWYgYHByb2JlYCBzdWNjZWVkcyBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGJyaW5naW5nIHRoZSBpbnRlcmZhY2UgdXAgd2lsbCBpbnZva2UgYG90eDJfb3BlbmAsIHdoaWNoIHRoZW4gY2FsbHMgYG90eDJfaW5pdF9od19yZXNvdXJjZXNgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgcGF0aCBub3cgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgLCB0aGUgZXhhY3QgcGxhY2Ugd2hlcmUgdGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYSBtZW1vcnkgbGVhay4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgbWFrZXMgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBiZWNhdXNlIGJ1ZyBmaXhlcyBhcmUgaW1wb3J0YW50IHRvIGZ1enouIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIGBDT05GSUdfT0NURU9OVFgyX1BGYCBhbmQgYENPTkZJR19PQ1RFT05UWDJfQUZgLiBXaGlsZSB0aGUgQUYgbWlnaHQgYmUgXCJuZWVkZWRcIiwgd2Ugd2lsbCB0cnkgdG8gbWFrZSB0aGlzIGhhcHBlbiBpbmRlcGVuZGVudGx5LiBOb3csIGxldCdzIGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODI2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MjguNDA5MzQyNDYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkyMDU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9NTE9Y29uZmlnIFJWVV9FU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IGFmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBuaWMvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZT02PWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9NQk9YKSArPSBydnVfbWJveC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBydnVfYWYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6Njc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfQ04xMEtfUlBNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4Lmg6MTY6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXFx0XFx0MHhBMDU5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTU0PURFRklORV9TSE9XX0FUVFJJQlVURShucGNfbWNhbV9sYXlvdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2Ni1zdGF0aWMgaW50IF9fbmFtZSAjIyBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0Mi0jZGVmaW5lIFRPVEFMX1NaIChNQVhfTlVNX0JBTktTICogTUFYX05VTV9TVUJfQkFOS1MgKiBNQVhfU1VCQkFOS19ERVBUSCAqIDY0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MjQ1PXN0YXRpYyBpbnQgbnBjX21jYW1fbWlzbWF0Y2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXFxcIiV1XFxcXHQlZFxcXFx0JXVcXFxcblxcXCIgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyMTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQXFx0XFx0XFx0MHhBMDBDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXFx0XFx0MHhCMTAwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXFx0MHhCNjAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFxcdFxcdFxcdDB4QTA4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFxcdFxcdFxcdDB4QTA5RVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTkzOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk1LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk2WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTctXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwMjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NU1NX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA2LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo0NTpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjkzNDpcXHRcXHRcXHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVxcdGlmICghcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4OlxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0OS1cXHRcXHRcXHQgICAgICBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjQ6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXFx0XFx0MHhBMDY1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXFx0XFx0XFx0MHhBMDYxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zODM9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVxcdFxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XFx0XFx0XFx0XFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQwOC1cXHRcXHRpZiAoIXBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0Mi1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDQtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyOTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI5NjMtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMwMTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZndkYXRhKHN0cnVjdCBzZXFfZmlsZSAqcywgaW50IGxtYWNfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMTgtXFx0cnZ1ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcXHRcXHRcXHRcXHRcXHQgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGLCBOVUxMKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVxcdGlmICghcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgKz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICs9IHJ2dV9yZXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDItLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXFx0XFx0MHhBMDY0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDU6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXFx0XFx0MHhBMEY4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFxcdFxcdDB4QTBGN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTU5OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NTk5OlxcdHJldHVybiAocGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjAwLVxcdFxcdChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX1JWVV9SRVApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XFx0cmV0dXJuIHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zOC1cXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml92Zl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjQ6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXFx0eyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjI4LjczODU1MjY0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDEwMTc0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb25zIGBPQ1RFT05UWDJfUEZgIGFuZCBgT0NURU9OVFgyX0FGYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZ1bmN0aW9uIGBvdHgyX2ZyZWVfc3FfcmVzYCBhbmQgdGhlIHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLiBJIHNlZSB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIGlubGluZWQgLSBnb29kIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBjb25zaWRlciBpdCBhcyBhIHN0YW5kYWxvbmUgZnVuY3Rpb24gZm9yIGZ1enppbmcuXG5cblJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBzbyBpdCdzIHJlYWNoYWJsZS4gSSdtIGdvaW5nIHRvIGFkZCBhbGwgdGhyZWUgZnVuY3Rpb25zLCBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AsIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCwgYW5kIGBvdHgyX2ZyZWVfc3FfcmVzYCwgdG8gbXkgbGlzdC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50PyBUaGUgYFBDSWAgY29uZmlnIGlzIHJlcXVpcmVkIGZvciBQQ0kgZHJpdmVycywgd2hpY2ggdGhpcyBjbGVhcmx5IGlzLCBidXQgdGhhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gaXQncyB1bmxpa2VseSB0byBiZSB0aGUgcHJvYmxlbSBoZXJlLiBOb3csIEkgc2hvdWxkIG1ha2UgZG91YmxlLXN1cmUgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVhY2hhYmxlLiBMZXQgbWUgc2VlLi4uIElmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscywgaXQgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHRvIGNsZWFuIHVwLiBJZiBpdCBzdWNjZWVkcywgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHdpbGwgY2FsbCBpdCB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCBzbyB3ZSBkZWZpbml0ZWx5IGhpdCB0aGF0IGNvZGVwYXRoIHRoZW4uXG5cbkFscmlnaHQsIHRoYXQncyBlbm91Z2ggdG8gY29udmluY2UgbWUgdGhhdCB0aGUgZXJyb3IgcGF0aHMgaW4gdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgUW9TIHF1ZXVlcywgcmVwcmVzZW50IGEgdmFsaWQgYXJlYSBmb3IgZnV6emluZy4gSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE4NCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MzcuMTQ4NzMwMDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4OTYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsm79d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-27 06:15:56 +0000 UTC FinishedAt: 2026-06-27 06:25:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCTEONTX2_PF", "OCTEONTX2_AF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "c75597caada080effbfbc0a7fb10dc2a3bb543ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCTEONTX2_PF", "OCTEONTX2_AF" ], "series_id": "3426495d-296b-4329-84ca-14aa8d79ca85" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "otx2_free_sq_res", "otx2_init_hw_resources", "otx2_free_hw_resources" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DVEVPTlRYMl9QRiYjMzQ7LAogICAgJiMzNDtPQ1RFT05UWDJfQUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgICAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXHUwMDNlc3FiX3B0cnMgZm9yIHVudXNlZCBRb1MgcXVldWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24gaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIHZQQ0kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZjU0YjdiZmQyMTFkMjg5NGEyMjFlNzlkOGE5ZTU2OTYwMzc2MTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IDQxYTBlYmRmMjAxZTcxLi44OGFjODUzNTQ0NDU0NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbkBAIC0xNTY4LDE0ICYjNDM7MTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4gXHRvdHgyX3NxX2ZyZWVfc3FicyhwZik7XG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpOyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRzcSA9IFx1MDAyNnFzZXQtXHUwMDNlc3FbcWlkeF07XG4tXHRcdC8qIFNraXAgZnJlZWluZyBRb3MgcXVldWVzIGlmIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZCAqL1xuLVx0XHRpZiAoIXNxLVx1MDAzZXNxZSlcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlKTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlX3JpbmcpO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4tXHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRzb19oZHJzKTtcbi1cdFx0a2ZyZWUoc3EtXHUwMDNlc2cpO1xuJiM0MztcdFx0Lyogc3EtXHUwMDNlc3FlIGlzIG5vdCBpbml0aWFsaXplZCBmb3IgdW51c2VkIFFvUyBxdWV1ZXMgKi9cbiYjNDM7XHRcdGlmIChzcS1cdTAwM2VzcWUpIHtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlKTtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNlc3FlX3JpbmcpO1xuJiM0MztcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4mIzQzO1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRzb19oZHJzKTtcbiYjNDM7XHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldGltZXN0YW1wcyk7XG4mIzQzO1x0XHRcdGtmcmVlKHNxLVx1MDAzZXNnKTtcbiYjNDM7XHRcdH1cbiBcdFx0a2ZyZWUoc3EtXHUwMDNlc3FiX3B0cnMpO1xuIFx0fVxuIH1cbkBAIC0xNzEwLDEzICYjNDM7MTcxMSwxMiBAQCBpbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0cmV0dXJuIGVycjtcbiBcbiBlcnJfZnJlZV9uaXhfcXVldWVzOlxuLVx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG4gXHRvdHgyX2ZyZWVfY3FfcmVzKHBmKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTklYX0FRX0NUWVBFX1JRLCBmYWxzZSk7XG4gZXJyX2ZyZWVfdHhzY2g6XG4gXHRvdHgyX3R4c2NocV9zdG9wKHBmKTtcbiBlcnJfZnJlZV9zcV9wdHJzOlxuLVx0b3R4Ml9zcV9mcmVlX3NxYnMocGYpO1xuJiM0MztcdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIGVycl9mcmVlX3JxX3B0cnM6XG4gXHRvdHgyX2ZyZWVfYXVyYV9wdHIocGYsIEFVUkFfTklYX1JRKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTlBBX0FRX0NUWVBFX1BPT0wsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DVEVPTlRYMl9QRiYjMzQ7LAogICAgJiMzNDtPQ1RFT05UWDJfQUYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgICAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9mcmVlX2h3X3Jlc291cmNlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXHUwMDNlc3FiX3B0cnMgZm9yIHVudXNlZCBRb1MgcXVldWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgdGVhcmRvd24gaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIHZQQ0kuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhmNTRiN2JmZDIxMWQyODk0YTIyMWU3OWQ4YTllNTY5NjAzNzYxNGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1biAyNyAwNjoyNDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCmluZGV4IDQxYTBlYmRmMjAxZTcxLi44OGFjODUzNTQ0NDU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCkBAIC0xNTY4LDE0ICYjNDM7MTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpCiAJb3R4Ml9zcV9mcmVlX3NxYnMocGYpOwogCWZvciAocWlkeCA9IDA7IHFpZHggJmx0OyBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpOyBxaWR4JiM0MzsmIzQzOykgewogCQlzcSA9ICZhbXA7cXNldC0mZ3Q7c3FbcWlkeF07Ci0JCS8qIFNraXAgZnJlZWluZyBRb3MgcXVldWVzIGlmIHRoZXkgYXJlIG5vdCBpbml0aWFsaXplZCAqLwotCQlpZiAoIXNxLSZndDtzcWUpCi0JCQljb250aW51ZTsKLQkJcW1lbV9mcmVlKHBmLSZndDtkZXYsIHNxLSZndDtzcWUpOwotCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3NxZV9yaW5nKTsKLQkJcW1lbV9mcmVlKHBmLSZndDtkZXYsIHNxLSZndDtjcHRfcmVzcCk7Ci0JCXFtZW1fZnJlZShwZi0mZ3Q7ZGV2LCBzcS0mZ3Q7dHNvX2hkcnMpOwotCQlrZnJlZShzcS0mZ3Q7c2cpOwomIzQzOwkJLyogc3EtJmd0O3NxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovCiYjNDM7CQlpZiAoc3EtJmd0O3NxZSkgewomIzQzOwkJCXFtZW1fZnJlZShwZi0mZ3Q7ZGV2LCBzcS0mZ3Q7c3FlKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3NxZV9yaW5nKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O2NwdF9yZXNwKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3Rzb19oZHJzKTsKJiM0MzsJCQlxbWVtX2ZyZWUocGYtJmd0O2Rldiwgc3EtJmd0O3RpbWVzdGFtcHMpOwomIzQzOwkJCWtmcmVlKHNxLSZndDtzZyk7CiYjNDM7CQl9CiAJCWtmcmVlKHNxLSZndDtzcWJfcHRycyk7CiAJfQogfQpAQCAtMTcxMCwxMyAmIzQzOzE3MTEsMTIgQEAgaW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZikKIAlyZXR1cm4gZXJyOwogCiBlcnJfZnJlZV9uaXhfcXVldWVzOgotCW90eDJfZnJlZV9zcV9yZXMocGYpOwogCW90eDJfZnJlZV9jcV9yZXMocGYpOwogCW90eDJfY3R4X2Rpc2FibGUobWJveCwgTklYX0FRX0NUWVBFX1JRLCBmYWxzZSk7CiBlcnJfZnJlZV90eHNjaDoKIAlvdHgyX3R4c2NocV9zdG9wKHBmKTsKIGVycl9mcmVlX3NxX3B0cnM6Ci0Jb3R4Ml9zcV9mcmVlX3NxYnMocGYpOwomIzQzOwlvdHgyX2ZyZWVfc3FfcmVzKHBmKTsKIGVycl9mcmVlX3JxX3B0cnM6CiAJb3R4Ml9mcmVlX2F1cmFfcHRyKHBmLCBBVVJBX05JWF9SUSk7CiAJb3R4Ml9jdHhfZGlzYWJsZShtYm94LCBOUEFfQVFfQ1RZUEVfUE9PTCwgdHJ1ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA3MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoOiBPY3Rlb25UWDIgTklDKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGNsZWFuaW5nIHVwIHRoZSByZXNvdXJjZSBmcmVlaW5nIGluIGBvdHgyX2ZyZWVfc3FfcmVzYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYGtmcmVlKHNxLSZndDt0aW1lc3RhbXBzKWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCYjMzk7cyBlbnN1cmluZyB0aGF0IGBrZnJlZShzcS0mZ3Q7c3FiX3B0cnMpYCBpcyAqYWx3YXlzKiBjYWxsZWQsIGV2ZW4gaWYgdGhlIHF1ZXVlIGlzbiYjMzk7dCBmdWxseSBpbml0aWFsaXplZCAoYCFzcS0mZ3Q7c3FlYCkuIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGBjb250aW51ZWAgdGhhdCB3b3VsZCBza2lwIGZyZWVpbmcgYHNxYl9wdHJzYCBpZiBgc3EtJmd0O3NxZWAgd2FzIE5VTEwuIE5vdyB0aGUgY29uZGl0aW9uYWwgYmxvY2sgaXMgc3RydWN0dXJlZCBzbyB0aGF0IGBrZnJlZShzcS0mZ3Q7c3FiX3B0cnMpYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBhbGwgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZCBvbiBxdWV1ZSBkZXN0cnVjdGlvbiwgYXMgc2tpcHBpbmcgdGhpcyBzdGVwIGNvdWxkIGxlYWQgdG8gc3VidGxlIG1lbW9yeSBsZWFrcy4KCkFsc28sIEkgc2VlIGEgY2hhbmdlIGluIHRoZSBlcnJvciBoYW5kbGluZyBmbG93IHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AuIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2FsbCB0byBgb3R4Ml9mcmVlX3NxX3Jlc2AgaW4gdGhlIGVycm9yIHBhdGguIEkgd29uZGVyIHdoeSB0aGV5IG1hZGUgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGhhcmR3YXJlIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGRyaXZlci4KCk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGNhbiB0aGlzIGJlIGhpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBOSUMsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgcXVlc3Rpb24gZm9yIGZ1enppbmcuIFVubGVzcyB0aGVyZSYjMzk7cyBzb2Z0d2FyZSBlbXVsYXRpb24sIGRyaXZlcnMgbGlrZSB0aGlzIGFyZSB0eXBpY2FsbHkgdHJpY2t5IHRvIGZ1enogd2l0aCBzeXprYWxsZXIuIElmIGl0JiMzOTtzIGEgVVNCIG9yIHZpcnR1YWwgZGV2aWNlIGl0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGZ1enphYmxlLiBIb3dldmVyLCBpZiBQQ0kgZnV6emluZyBpcyBlbmFibGVkLCBvciBpZiBpdCBpcyBhIFVTQiBkZXZpY2UgdGhhdCBjb3VsZCBvcGVuIHVwIHBvc3NpYmlsaXRpZXMuIEkgcmVjYWxsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHJpZ2h0PyBUaHJvdWdoIHZQQ0ksIG9yLCBJIHRoaW5rLCBldmVuIGJ5IGp1c3QgdGhyb3dpbmcgcmFuZG9tIGRldmljZSBJRHMgaWYgUENJIGZ1enppbmcgaXMgdHVybmVkIG9uLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCBpZiByZWFjaGFibGUsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zLCBzbyBpdCYjMzk7cyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4Olx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDktXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM4Mz1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MDgtXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDItXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4NDM6XHRcdFx0XHRcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0NC1cdGlmICghcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9Mjk1MD1zdGF0aWMgaW50IGNneF9wcmludF9kbWFjX2ZsdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjk2MjpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOTYzLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0zMDEwPXN0YXRpYyBpbnQgY2d4X3ByaW50X2Z3ZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzAxOC1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQyLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTk4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjU5OTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYwMC1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTU9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYxNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODU0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE9DVEVPTlRYMl9QRiBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYE9DVEVPTlRYMl9QRmAgZHJpdmVyLiBJdCYjMzk7cyBhIFBDSSBkcml2ZXIsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRmAgZGV2aWNlICgweEEwNjMpLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtjYW4gd2UgZnV6eiB0aGlzIHRoaW5nIHdpdGggU3l6a2FsbGVyIHVzaW5nIHZQQ0k/JiMzNDsgVGhlIHByZS1yZXF1aXNpdGUsIG9mIGNvdXJzZSwgaXMgdGhhdCBgQ09ORklHX1BDSWAgbmVlZHMgdG8gYmUgZW5hYmxlZCwgYW5kIHRoZSBkcml2ZXIgaXRzZWxmIG5lZWRzIHRvIGJlIGxvYWRlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIGZ1enppbmcuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIGEga2V5IHF1ZXN0aW9uIGhlcmUuIElmIHdlIGNhbiBpbmplY3QgYSBmYWtlIFBDSSBkZXZpY2UgdXNpbmcgU3l6a2FsbGVyLCB3aXRoIGEgYFBDSV9WRU5ET1JfSURfQ0FWSVVNYCB2ZW5kb3IgSUQgYW5kIGRldmljZSBJRCBgMHhBMDYzYCwgdGhlbiB0aGUgZHJpdmVyJiMzOTtzIGBwcm9iZWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIGFpbWluZyBmb3IuCgpOb3csIGJlZm9yZSBJIG1vdmUgb24sIGxldCYjMzk7cyBsb29rIGZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19PQ1RFT05UWDJfUEZgIGlzIHRoZSBtYWluIHRoaW5nIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQuIEJ1dCwgSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG90eDJfZnJlZV9zcV9yZXNgIGFuZCBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AuIFRoZSBjcml0aWNhbCBwb2ludCBub3cgaXMsIGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlIGR1cmluZyB0aGUgcHJvYmUsIG9yIHdoZW4gYnJpbmdpbmcgdXAgdGhlIGludGVyZmFjZT8gSXQgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhvc2UgdHdvIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGNvdWxkIGJlIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS4gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfaW5pdF9od19yZXNvdXJjZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTEwODA9aW50IG90eDJfYWxsb2NfcXVldWVfbWVtKHN0cnVjdCBvdHgyX25pYyAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTA4MTppbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTA4Mi12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0xNTg0PXN0YXRpYyBpbnQgb3R4Ml9nZXRfcmJ1Zl9zaXplKHN0cnVjdCBvdHgyX25pYyAqcGYsIGludCBtdHUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNjExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNjEyOmludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE2MTMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc0My19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3NDQ6RVhQT1JUX1NZTUJPTChvdHgyX2luaXRfaHdfcmVzb3VyY2VzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc0NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE5NjU9aW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTk3OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTk3OTpcdGVyciA9IG90eDJfaW5pdF9od19yZXNvdXJjZXMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xOTgwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM9NTk3PXN0YXRpYyBpbnQgcnZ1X3JlcF9yc3JjX2luaXQoc3RydWN0IG90eDJfbmljICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy02MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmM6NjEwOlx0ZXJyID0gb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYy02MTEtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVzb3VyY2UgaW5pdGlhbGl6YXRpb24gYW5kIGZyZWVpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIGBvdHgyYCBkcml2ZXIsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbjoKCioqUmVzb3VyY2UgTWFuYWdlbWVudCBpbiB0aGUgb3R4MiBEcml2ZXIqKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIHByZXR0eSBjcnVjaWFsLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb3R4Ml9vcGVuYCwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgaXMgYnJvdWdodCBvbmxpbmUuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgZm9yIHRoZSBkZXZpY2UmIzM5O3Mgb3BlcmF0aW9uLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBlcnJvciBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgY2FsbGVkIGlmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscyAqZHVyaW5nKiB0aGUgcmVzb3VyY2UgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhpcyBpbmRpY2F0ZXMgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIGFueSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHJlc291cmNlcyBpZiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgcnVucyBpbnRvIGEgc25hZywgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcy4gVGhlIGZhY3QgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgdXNlZCBvbiB0aGUgZXJyb3IgcGF0aCBpbXBsaWVzIGEgY2FyZWZ1bCBkZXNpZ24gdG8gZ3JhY2VmdWxseSBoYW5kbGUgaW5pdGlhbGl6YXRpb24gZmFpbHVyZXMuIEZpbmFsbHksIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCBwcm9iYWJseSBhbHNvIGNhbGxzIGBvdHgyX2ZyZWVfc3FfcmVzYCB3aGVuIHRoZSBuZXR3b3JrIGRldmljZSBpcyBzaHV0IGRvd24sIGFuZCB0aGVyZWZvcmUgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RhbmRhcmQgYW5kIHJlc3BvbnNpYmxlIHBhdHRlcm4gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIGVuc3VyaW5nIHRoYXQgcmVzb3VyY2VzIGFyZSBlaXRoZXIgcHJvcGVybHkgaW5pdGlhbGl6ZWQgb3IgZGVhbGxvY2F0ZWQgaW4gdGhlIGV2ZW50IG9mIGVycm9ycyBvciBzaHV0ZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdHgyX2ZyZWVfc3FfcmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE1NDU9c3RhdGljIHZvaWQgb3R4Ml9mcmVlX2NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTU1OTpzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE1NjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTYxMj1pbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTcxOC1lcnJfZnJlZV9zcV9wdHJzOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNzE5Olx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3MjAtZXJyX2ZyZWVfcnFfcHRyczpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE3NDY9dm9pZCBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzoxNzg4Olx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3ODktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxODMKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIE9UWDIgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBgb3R4Ml9mcmVlX3NxX3Jlc2AgZnVuY3Rpb24gaXMgdXNlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgaW4gdHdvIGtleSBwbGFjZXM6IGFzIHBhcnQgb2YgdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYW5kIGFsc28gd2l0aGluIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCwgd2hpY2ggZ2V0cyBpbnZva2VkIGR1cmluZyB0aGluZ3MgbGlrZSBhIGRldmljZSBzdG9wLiBIbW1tLCB0aGUgc2VxdWVuY2UgaXMgc3RhcnRpbmcgdG8gY29tZSBpbnRvIGZvY3VzLgoKQnV0IGEgcXVlc3Rpb24gcG9wcGVkIGludG8gbXkgaGVhZDogZG9lcyBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYWN0dWFsbHkgcGVyZm9ybSBhbnkgaGFyZHdhcmUgY29tbXVuaWNhdGlvbj8gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQuIElmIGl0IGRvZXMsIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgaXQgY291bGQgZmFpbCBlYXJseSBvbiwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIHNldHVwIHdoZXJlIHRoZSBoYXJkd2FyZSBtaWdodCBub3QgYmUgcGh5c2ljYWxseSBwcmVzZW50LCBwZXJoYXBzIHJlcHJlc2VudGVkIGJ5IGp1c3QgYSBwbGFjZWhvbGRlciBvciAmIzM0O2Zha2UmIzM0OyBQQ0kgZGV2aWNlLiBXZSYjMzk7ZCBzZWUgaXQgdGhlbi4KCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgY29uZmlybSBvciBkaXNwZWwgdGhpcyBoeXBvdGhlc2lzLiBHb3R0YSBleGFtaW5lIHRoYXQgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjEyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEyOlx0aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcbjE2MTM6XHR7XG4xNjE0Olx0XHRzdHJ1Y3Qgbml4X2xmX2ZyZWVfcmVxICpmcmVlX3JlcTtcbjE2MTU6XHRcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGYtXHUwMDNlbWJveDtcbjE2MTY6XHRcdHN0cnVjdCBvdHgyX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuMTYxNzpcdFx0c3RydWN0IG1zZ19yZXEgKnJlcTtcbjE2MTg6XHRcdGludCBlcnIgPSAwLCBsdmw7XG4xNjE5Olx0XG4xNjIwOlx0XHQvKiBTZXQgcmVxdWlyZWQgTlBBIExGJiMzOTtzIHBvb2wgY291bnRzXG4xNjIxOlx0XHQgKiBBdXJhcyBhbmQgUG9vbHMgYXJlIHVzZWQgaW4gYSAxOjEgbWFwcGluZyxcbjE2MjI6XHRcdCAqIHNvLCBhdXJhIGNvdW50ID0gcG9vbCBjb3VudC5cbjE2MjM6XHRcdCAqL1xuMTYyNDpcdFx0aHctXHUwMDNlcnFwb29sX2NudCA9IGh3LVx1MDAzZXJ4X3F1ZXVlcztcbjE2MjU6XHRcdGh3LVx1MDAzZXNxcG9vbF9jbnQgPSBvdHgyX2dldF90b3RhbF90eF9xdWV1ZXMocGYpO1xuMTYyNjpcdFx0aHctXHUwMDNlcG9vbF9jbnQgPSBody1cdTAwM2VycXBvb2xfY250ICYjNDM7IGh3LVx1MDAzZXNxcG9vbF9jbnQ7XG4xNjI3Olx0XG4xNjI4Olx0XHRpZiAoIW90eDJfcmVwX2RldihwZi1cdTAwM2VwZGV2KSkge1xuMTYyOTpcdFx0XHQvKiBNYXhpbXVtIGhhcmR3YXJlIHN1cHBvcnRlZCB0cmFuc21pdCBsZW5ndGggKi9cbjE2MzA6XHRcdFx0cGYtXHUwMDNldHhfbWF4X3BrdGxlbiA9IHBmLVx1MDAzZW5ldGRldi1cdTAwM2VtYXhfbXR1ICYjNDM7IE9UWDJfRVRIX0hMRU47XG4xNjMxOlx0XHRcdHBmLVx1MDAzZXJic2l6ZSA9IG90eDJfZ2V0X3JidWZfc2l6ZShwZiwgcGYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSk7XG4xNjMyOlx0XHR9XG4xNjMzOlx0XG4xNjM0Olx0XHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4xNjM1Olx0XHQvKiBOUEEgaW5pdCAqL1xuMTYzNjpcdFx0ZXJyID0gb3R4Ml9jb25maWdfbnBhKHBmKTtcbjE2Mzc6XHRcdGlmIChlcnIpXG4xNjM4Olx0XHRcdGdvdG8gZXhpdDtcbjE2Mzk6XHRcbjE2NDA6XHRcdC8qIE5JWCBpbml0ICovXG4xNjQxOlx0XHRlcnIgPSBvdHgyX2NvbmZpZ19uaXgocGYpO1xuMTY0MjpcdFx0aWYgKGVycilcbjE2NDM6XHRcdFx0Z290byBlcnJfZnJlZV9ucGFfbGY7XG4xNjQ0Olx0XG4xNjQ1Olx0XHQvKiBEZWZhdWx0IGRpc2FibGUgYmFja3ByZXNzdXJlIG9uIE5JWC1DUFQgKi9cbjE2NDY6XHRcdG90eDJfbml4X2NwdF9jb25maWdfYnAocGYsIGZhbHNlKTtcbjE2NDc6XHRcbjE2NDg6XHRcdC8qIEVuYWJsZSBiYWNrcHJlc3N1cmUgZm9yIENHWCBtYXBwZWQgUEYvVkZzICovXG4xNjQ5Olx0XHRpZiAoIWlzX290eDJfbGJrdmYocGYtXHUwMDNlcGRldikpXG4xNjUwOlx0XHRcdG90eDJfbml4X2NvbmZpZ19icChwZiwgdHJ1ZSk7XG4xNjUxOlx0XG4xNjUyOlx0XHQvKiBJbml0IEF1cmFzIGFuZCBwb29scyB1c2VkIGJ5IE5JWCBSUSwgZm9yIGZyZWUgYnVmZmVyIHB0cnMgKi9cbjE2NTM6XHRcdGVyciA9IG90eDJfcnFfYXVyYV9wb29sX2luaXQocGYpO1xuMTY1NDpcdFx0aWYgKGVycikge1xuMTY1NTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE2NTY6XHRcdFx0Z290byBlcnJfZnJlZV9uaXhfbGY7XG4xNjU3Olx0XHR9XG4xNjU4Olx0XHQvKiBJbml0IEF1cmFzIGFuZCBwb29scyB1c2VkIGJ5IE5JWCBTUSwgZm9yIHF1ZXVlaW5nIFNRRXMgKi9cbjE2NTk6XHRcdGVyciA9IG90eDJfc3FfYXVyYV9wb29sX2luaXQocGYpO1xuMTY2MDpcdFx0aWYgKGVycikge1xuMTY2MTpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE2NjI6XHRcdFx0Z290byBlcnJfZnJlZV9ycV9wdHJzO1xuMTY2MzpcdFx0fVxuMTY2NDpcdFxuMTY2NTpcdFx0ZXJyID0gb3R4Ml90eHNjaF9hbGxvYyhwZik7XG4xNjY2Olx0XHRpZiAoZXJyKSB7XG4xNjY3Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY2ODpcdFx0XHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XG4xNjY5Olx0XHR9XG4xNjcwOlx0XG4xNjcxOlx0I2lmZGVmIENPTkZJR19EQ0JcbjE2NzI6XHRcdGlmIChwZi1cdTAwM2VwZmNfZW4pIHtcbjE2NzM6XHRcdFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2FsbG9jKHBmKTtcbjE2NzQ6XHRcdFx0aWYgKGVycikge1xuMTY3NTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY3NjpcdFx0XHRcdGdvdG8gZXJyX2ZyZWVfc3FfcHRycztcbjE2Nzc6XHRcdFx0fVxuMTY3ODpcdFx0fVxuMTY3OTpcdCNlbmRpZlxuMTY4MDpcdFxuMTY4MTpcdFx0ZXJyID0gb3R4Ml9jb25maWdfbml4X3F1ZXVlcyhwZik7XG4xNjgyOlx0XHRpZiAoZXJyKSB7XG4xNjgzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTY4NDpcdFx0XHRnb3RvIGVycl9mcmVlX3R4c2NoO1xuMTY4NTpcdFx0fVxuMTY4NjpcdFxuMTY4NzpcdFx0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwmIzQzOyYjNDM7KSB7XG4xNjg4Olx0XHRcdGludCBpZHg7XG4xNjg5Olx0XG4xNjkwOlx0XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCYjNDM7JiM0MzspIHtcbjE2OTE6XHRcdFx0XHRlcnIgPSBvdHgyX3R4c2NocV9jb25maWcocGYsIGx2bCwgaWR4LCBmYWxzZSk7XG4xNjkyOlx0XHRcdFx0aWYgKGVycikge1xuMTY5MzpcdFx0XHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBjb25maWcgVFhTQ0hcXG5cJiMzNDspO1xuMTY5NDpcdFx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4xNjk1Olx0XHRcdFx0XHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XG4xNjk2Olx0XHRcdFx0fVxuMTY5NzpcdFx0XHR9XG4xNjk4Olx0XHR9XG4xNjk5Olx0XG4xNzAwOlx0I2lmZGVmIENPTkZJR19EQ0JcbjE3MDE6XHRcdGlmIChwZi1cdTAwM2VwZmNfZW4pIHtcbjE3MDI6XHRcdFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2NvbmZpZyhwZik7XG4xNzAzOlx0XHRcdGlmIChlcnIpIHtcbjE3MDQ6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbjE3MDU6XHRcdFx0XHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XG4xNzA2Olx0XHRcdH1cbjE3MDc6XHRcdH1cbjE3MDg6XHQjZW5kaWZcbjE3MDk6XHRcbjE3MTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuMTcxMTpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMTIKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBMZWFrIGluIHRoZSBPVFgyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIGEgcG90ZW50aWFsIGlzc3VlLiBUaGUgZnVuY3Rpb24gSSYjMzk7bSBleGFtaW5pbmcgaXMgY2xlYXJseSByZXNwb25zaWJsZSBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbiwgcGFydGljdWxhcmx5IHRoZSBoYXJkd2FyZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBPVFgyJiMzOTtzIHRyYW5zbWl0IHNjaGVkdWxlci4gTXkgY29uY2VybiBzdGVtcyBmcm9tIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgb3R4Ml90eHNjaF9hbGxvY2AgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZV9zcV9wdHJzYCwgd2hpY2ggdGhlbiBjYWxscyBgb3R4Ml9mcmVlX3NxX3Jlc2AuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4gSG93ZXZlciwgaWYgYG90eDJfY29uZmlnX25peF9xdWV1ZXNgIGZhaWxzLCB3ZSBicmFuY2ggdG8gYGVycl9mcmVlX3R4c2NoYCwgd2hpY2ggY2FsbHMgYG90eDJfdHhzY2hxX3N0b3BgIGJlZm9yZSB0aGVuIG1vdmluZyB0byBgZXJyX2ZyZWVfc3FfcHRyc2AuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgaXMgdGhpcyBlcnJvciBmbG93IGNvcnJlY3RseSBmcmVlaW5nICphbGwqIGFsbG9jYXRlZCByZXNvdXJjZXMuCgpUaGUgY3J1eCBvZiB0aGUgbWF0dGVyLCBhY2NvcmRpbmcgdG8gdGhlIHBhdGNoLCBpcyBhbiBpZGVudGlmaWVkIG1lbW9yeSBsZWFrIGNvbmNlcm5pbmcgYHNxLSZndDt0aW1lc3RhbXBzYCBhbmQgYHNxLSZndDtzcWJfcHRyc2AuIFRoZXkmIzM5O3JlIGFwcGFyZW50bHkgbm90IGJlaW5nIHByb3Blcmx5IHJlbGVhc2VkIGluIHNvbWUgZmFpbHVyZSBzY2VuYXJpb3MuIFRoaXMgaXMgYSBjcml0aWNhbCBpc3N1ZS4gV2UgbmVlZCB0byBjb25maXJtIHRoZSBjb2RlIG5vdyBlbnN1cmVzIHRob3NlIGFyZSBhbHdheXMgY29ycmVjdGx5IGZyZWVkLgoKTmV4dCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHJlYWNoIHRoaXMgY29kZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IHVzaW5nIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgZXZlbiBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHRhcmdldCB0aGlzIGRyaXZlcj8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0LiBTbywgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBnZXQgaXQgdG8gaW5qZWN0IHRoZSBQQ0kgZGV2aWNlLCBgb3R4Ml9wcm9iZWAgd291bGQgYmUgY2FsbGVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcGF0aCB0byB0aGUgZHJpdmVyLiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciB0aGlzIGNvZGUuIFNvLCBteSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGNoZWNrIHRoZSBgb3R4Ml9wcm9iZWAgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzEyMT1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzEyMzpzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0zNTQxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBvdHgyX3BmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTM1NDMtXHQuaWRfdGFibGUgPSBvdHgyX3BmX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTQ0Olx0LnByb2JlID0gb3R4Ml9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzU0NS1cdC5zaHV0ZG93biA9IG90eDJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA4MgoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIGBvdHgyX3Byb2JlYCYjMzk7cyBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgd2hhdCB0aGlzIGBvdHgyX3Byb2JlYCBmdW5jdGlvbiBpcyBhbGwgYWJvdXQuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhIHByb2Nlc3Mgb2YgaW52ZXN0aWdhdGlvbiwgb2YgZXhhbWluYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCB3aGF0IHRoZSBleHBlY3RlZCBvdXRjb21lcyBhcmUuIEVzc2VudGlhbGx5LCBJIHdhbnQgdG8gbWFwIG91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLCBtYXliZSByZWFkaW5nIHRoZSBjb2RlLCBjaGVja2luZyBmb3IgZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBydW5uaW5nIGl0IGluIGEgc2FuZGJveCBlbnZpcm9ubWVudCB0byBzZWUgaXRzIGJlaGF2aW9yIGZpcnN0aGFuZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaXRzIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCwgb2YgY291cnNlLCBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBmYWlsdXJlIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBLbm93aW5nIHRoZSBkZXRhaWxzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxMjMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMxMjM6XHRzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjMxMjQ6XHR7XG4zMTI1Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjMxMjY6XHRcdGludCBlcnIsIHFjb3VudCwgcW9zX3R4cXM7XG4zMTI3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMzEyODpcdFx0c3RydWN0IG90eDJfbmljICpwZjtcbjMxMjk6XHRcdHN0cnVjdCBvdHgyX2h3ICpodztcbjMxMzA6XHRcbjMxMzE6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcbjMxMzI6XHRcdGlmIChlcnIpIHtcbjMxMzM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcblwmIzM0Oyk7XG4zMTM0Olx0XHRcdHJldHVybiBlcnI7XG4zMTM1Olx0XHR9XG4zMTM2Olx0XG4zMTM3Olx0XHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgRFJWX05BTUUpO1xuMzEzODpcdFx0aWYgKGVycikge1xuMzEzOTpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7UENJIHJlcXVlc3QgcmVnaW9ucyBmYWlsZWQgMHgleFxcblwmIzM0OywgZXJyKTtcbjMxNDA6XHRcdFx0cmV0dXJuIGVycjtcbjMxNDE6XHRcdH1cbjMxNDI6XHRcbjMxNDM6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNDgpKTtcbjMxNDQ6XHRcdGlmIChlcnIpIHtcbjMxNDU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RNQSBtYXNrIGNvbmZpZyBmYWlsZWQsIGFib3J0XFxuXCYjMzQ7KTtcbjMxNDY6XHRcdFx0cmV0dXJuIGVycjtcbjMxNDc6XHRcdH1cbjMxNDg6XHRcbjMxNDk6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuMzE1MDpcdFxuMzE1MTpcdFx0LyogU2V0IG51bWJlciBvZiBxdWV1ZXMgKi9cbjMxNTI6XHRcdHFjb3VudCA9IG1pbl90KGludCwgbnVtX29ubGluZV9jcHVzKCksIE9UWDJfTUFYX0NRX0NOVCk7XG4zMTUzOlx0XHRxb3NfdHhxcyA9IG1pbl90KGludCwgcWNvdW50LCBPVFgyX1FPU19NQVhfTEVBRl9OT0RFUyk7XG4zMTU0Olx0XG4zMTU1Olx0XHRuZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcXMoc2l6ZW9mKCpwZiksIHFjb3VudCAmIzQzOyBxb3NfdHhxcywgcWNvdW50KTtcbjMxNTY6XHRcdGlmICghbmV0ZGV2KVxuMzE1NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMxNTg6XHRcbjMxNTk6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZXRkZXYpO1xuMzE2MDpcdFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4zMTYxOlx0XHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4zMTYyOlx0XHRwZi1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4zMTYzOlx0XHRwZi1cdTAwM2VwZGV2ID0gcGRldjtcbjMxNjQ6XHRcdHBmLVx1MDAzZWRldiA9IGRldjtcbjMxNjU6XHRcdHBmLVx1MDAzZXRvdGFsX3ZmcyA9IHBjaV9zcmlvdl9nZXRfdG90YWx2ZnMocGRldik7XG4zMTY2Olx0XHRwZi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuMzE2NzpcdFxuMzE2ODpcdFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbjMxNjk6XHRcdGh3LVx1MDAzZXBkZXYgPSBwZGV2O1xuMzE3MDpcdFx0aHctXHUwMDNlcnhfcXVldWVzID0gcWNvdW50O1xuMzE3MTpcdFx0aHctXHUwMDNldHhfcXVldWVzID0gcWNvdW50O1xuMzE3MjpcdFx0aHctXHUwMDNlbm9uX3Fvc19xdWV1ZXMgPSBxY291bnQ7XG4zMTczOlx0XHRody1cdTAwM2VtYXhfcXVldWVzID0gcWNvdW50O1xuMzE3NDpcdFx0aHctXHUwMDNlcmJ1Zl9sZW4gPSBPVFgyX0RFRkFVTFRfUkJVRl9MRU47XG4zMTc1Olx0XHQvKiBVc2UgQ1FFIG9mIDEyOCBieXRlIGRlc2NyaXB0b3Igc2l6ZSBieSBkZWZhdWx0ICovXG4zMTc2Olx0XHRody1cdTAwM2V4cWVfc2l6ZSA9IDEyODtcbjMxNzc6XHRcbjMxNzg6XHRcdGVyciA9IG90eDJfaW5pdF9yc3JjKHBkZXYsIHBmKTtcbjMxNzk6XHRcdGlmIChlcnIpXG4zMTgwOlx0XHRcdGdvdG8gZXJyX2ZyZWVfbmV0ZGV2O1xuMzE4MTpcdFxuMzE4MjpcdFx0ZXJyID0gb3R4Ml9zZXRfcmVhbF9udW1fcXVldWVzKG5ldGRldiwgaHctXHUwMDNldHhfcXVldWVzLCBody1cdTAwM2VyeF9xdWV1ZXMpO1xuMzE4MzpcdFx0aWYgKGVycilcbjMxODQ6XHRcdFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XG4zMTg1Olx0XG4zMTg2Olx0XHQvKiBBc3NpZ24gZGVmYXVsdCBtYWMgYWRkcmVzcyAqL1xuMzE4NzpcdFx0b3R4Ml9nZXRfbWFjX2Zyb21fYWYobmV0ZGV2KTtcbjMxODg6XHRcbjMxODk6XHRcdC8qIERvbiYjMzk7dCBjaGVjayBmb3IgZXJyb3IuICBQcm9jZWVkIHdpdGhvdXQgcHRwICovXG4zMTkwOlx0XHRvdHgyX3B0cF9pbml0KHBmKTtcbjMxOTE6XHRcbjMxOTI6XHRcdC8qIE5QQSYjMzk7cyBwb29sIGlzIGEgc3RhY2sgdG8gd2hpY2ggU1cgZnJlZXMgYnVmZmVyIHBvaW50ZXJzIHZpYSBBdXJhLlxuMzE5MzpcdFx0ICogSFcgYWxsb2NhdGVzIGJ1ZmZlciBwb2ludGVyIGZyb20gc3RhY2sgYW5kIHVzZXMgaXQgZm9yIERNQSYjMzk7aW5nXG4zMTk0Olx0XHQgKiBpbmdyZXNzIHBhY2tldC4gSW4gc29tZSBzY2VuYXJpb3MgSFcgY2FuIGZyZWUgYmFjayBhbGxvY2F0ZWQgYnVmZmVyXG4zMTk1Olx0XHQgKiBwb2ludGVycyB0byBwb29sLiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIFNXIHRvIG1haW50YWluIGFcbjMxOTY6XHRcdCAqIHBhcmFsbGVsIGxpc3Qgd2hlcmUgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGJ1ZmZlciBwb2ludGVycyAoSU9WQXMpXG4zMTk3Olx0XHQgKiBnaXZlbiB0byBIVyBjYW4gYmUgc2F2ZWQgZm9yIGxhdGVyIHJlZmVyZW5jZS5cbjMxOTg6XHRcdCAqXG4zMTk5Olx0XHQgKiBTbyB0aGUgb25seSB3YXkgdG8gY29udmVydCBSeCBwYWNrZXQmIzM5O3MgYnVmZmVyIGFkZHJlc3MgaXMgdG8gdXNlXG4zMjAwOlx0XHQgKiBJT01NVSYjMzk7cyBpb3ZhX3RvX3BoeXMoKSBoYW5kbGVyIHdoaWNoIHRyYW5zbGF0ZXMgdGhlIGFkZHJlc3MgYnlcbjMyMDE6XHRcdCAqIHdhbGtpbmcgdGhyb3VnaCB0aGUgdHJhbnNsYXRpb24gdGFibGVzLlxuMzIwMjpcdFx0ICovXG4zMjAzOlx0XHRwZi1cdTAwM2Vpb21tdV9kb21haW4gPSBpb21tdV9nZXRfZG9tYWluX2Zvcl9kZXYoZGV2KTtcbjMyMDQ6XHRcbjMyMDU6XHRcdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IChORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfSVBfQ1NVTSB8XG4zMjA2Olx0XHRcdFx0ICAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9SWEhBU0ggfFxuMzIwNzpcdFx0XHRcdCAgICAgICBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxuMzIwODpcdFx0XHRcdCAgICAgICBORVRJRl9GX0dTT19VRFBfTDQpO1xuMzIwOTpcdFx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbjMyMTA6XHRcbjMyMTE6XHRcdGVyciA9IG90eDJfbWNhbV9mbG93X2luaXQocGYpO1xuMzIxMjpcdFx0aWYgKGVycilcbjMyMTM6XHRcdFx0Z290byBlcnJfcHRwX2Rlc3Ryb3k7XG4zMjE0Olx0XG4zMjE1Olx0XHRvdHgyX3NldF9od19jYXBhYmlsaXRpZXMocGYpO1xuMzIxNjpcdFxuMzIxNzpcdFx0ZXJyID0gY24xMGtfbWNzX2luaXQocGYpO1xuMzIxODpcdFx0aWYgKGVycilcbjMyMTk6XHRcdFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcbjMyMjA6XHRcbjMyMjE6XHRcdGlmIChwZi1cdTAwM2VmbGFncyBcdTAwMjYgT1RYMl9GTEFHX05UVVBMRV9TVVBQT1JUKVxuMzIyMjpcdFx0XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDM5CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBSZXNvdXJjZSBJbml0aWFsaXphdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGhlIGNvZGUmIzM5O3MganVtcGluZyBpbnRvIGFjdGlvbiwgY2FsbGluZyBgb3R4Ml9pbml0X3JzcmNgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24/IExldCYjMzk7cyBkaXNzZWN0IGBvdHgyX2luaXRfcnNyY2AuIEkmIzM5O20gZ29pbmcgdG8gYmUgZ29pbmcgdGhyb3VnaCB0aGUgY29kZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBJcyBpdCBtZW1vcnksIGhhcmR3YXJlIHBlcmlwaGVyYWxzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFsbCBvZiB0aGUgYWJvdmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtaW5nIHN1Z2dlc3RzIHJlc291cmNlIGluaXRpYWxpemF0aW9uLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlLiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgYG90eDJfaW5pdF9yc3JjYCBmdW5jdGlvbi4gQXJlIHRoZXJlIGFueSByZXNvdXJjZSBjb25mbGljdHMgb3IgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYW5kbGVkIGdyYWNlZnVsbHk/IEFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGR1cmluZyByZXNvdXJjZSBzZXR1cD8gTXkgY2hlY2tsaXN0IGluY2x1ZGVzIHZlcmlmeWluZyBwcm9wZXIgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2luZywgY2hlY2tpbmcgZm9yIHByb3BlciBlcnJvciBoYW5kbGluZywgYW5kIG1ha2luZyBzdXJlIHRoYXQgYWxsIHJlbGV2YW50IGFzcGVjdHMgb2YgdGhlIHJlc291cmNlIGluaXRpYWxpemF0aW9uIGFyZSBiZWluZyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgbW9kdWxlIGRlcGVuZHMgb24sIHRvby4gQXJlIHRoZXJlIGFueSBnbG9iYWwgdmFyaWFibGVzIGJlaW5nIHNldCwgb3Igb3RoZXIgbW9kdWxlcyB0aGF0IGFyZSBwcmVyZXF1aXNpdGVzPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgaXQgdGllcyBpbnRvIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDM2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMDM2Olx0XG4zMDM3Olx0XHRudW1fdmVjID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpO1xuMzAzODpcdFx0aHctXHUwMDNlaXJxX25hbWUgPSBkZXZtX2ttYWxsb2NfYXJyYXkoXHUwMDI2aHctXHUwMDNlcGRldi1cdTAwM2VkZXYsIG51bV92ZWMsIE5BTUVfU0laRSxcbjMwMzk6XHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbjMwNDA6XHRcdGlmICghaHctXHUwMDNlaXJxX25hbWUpXG4zMDQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzA0MjpcdFxuMzA0MzpcdFx0aHctXHUwMDNlYWZmaW5pdHlfbWFzayA9IGRldm1fa2NhbGxvYyhcdTAwMjZody1cdTAwM2VwZGV2LVx1MDAzZWRldiwgbnVtX3ZlYyxcbjMwNDQ6XHRcdFx0XHRcdFx0IHNpemVvZihjcHVtYXNrX3Zhcl90KSwgR0ZQX0tFUk5FTCk7XG4zMDQ1Olx0XHRpZiAoIWh3LVx1MDAzZWFmZmluaXR5X21hc2spXG4zMDQ2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzA0NzpcdFxuMzA0ODpcdFx0LyogTWFwIENTUnMgKi9cbjMwNDk6XHRcdHBmLVx1MDAzZXJlZ19iYXNlID0gcGNpbV9pb21hcChwZGV2LCBQQ0lfQ0ZHX1JFR19CQVJfTlVNLCAwKTtcbjMwNTA6XHRcdGlmICghcGYtXHUwMDNlcmVnX2Jhc2UpIHtcbjMwNTE6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VuYWJsZSB0byBtYXAgcGh5c2ljYWwgZnVuY3Rpb24gQ1NScywgYWJvcnRpbmdcXG5cJiMzNDspO1xuMzA1MjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjMwNTM6XHRcdH1cbjMwNTQ6XHRcbjMwNTU6XHRcdGVyciA9IG90eDJfY2hlY2tfcGZfdXNhYmxlKHBmKTtcbjMwNTY6XHRcdGlmIChlcnIpXG4zMDU3Olx0XHRcdHJldHVybiBlcnI7XG4zMDU4Olx0XG4zMDU5Olx0XHRpZiAoIWlzX2NuMjBrKHBmLVx1MDAzZXBkZXYpKVxuMzA2MDpcdFx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgUlZVX1BGX0lOVF9WRUNfQ05ULFxuMzA2MTpcdFx0XHRcdFx0XHQgICAgUlZVX1BGX0lOVF9WRUNfQ05ULCBQQ0lfSVJRX01TSVgpO1xuMzA2MjpcdFx0ZWxzZVxuMzA2MzpcdFx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgUlZVX01CT1hfUEZfSU5UX1ZFQ19DTlQsXG4zMDY0Olx0XHRcdFx0XHRcdCAgICBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcbjMwNjU6XHRcdFx0XHRcdFx0ICAgIFBDSV9JUlFfTVNJWCk7XG4zMDY2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4zMDY3Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDslczogRmFpbGVkIHRvIGFsbG9jICVkIElSUSB2ZWN0b3JzXFxuXCYjMzQ7LFxuMzA2ODpcdFx0XHRcdF9fZnVuY19fLCBudW1fdmVjKTtcbjMwNjk6XHRcdFx0cmV0dXJuIGVycjtcbjMwNzA6XHRcdH1cbjMwNzE6XHRcbjMwNzI6XHRcdG90eDJfc2V0dXBfZGV2X2h3X3NldHRpbmdzKHBmKTtcbjMwNzM6XHRcbjMwNzQ6XHRcdGlmIChpc19jbjIwayhwZi1cdTAwM2VwZGV2KSlcbjMwNzU6XHRcdFx0Y24yMGtfaW5pdChwZik7XG4zMDc2Olx0XHRlbHNlXG4zMDc3Olx0XHRcdG90eDJfaW5pdF9od19vcHMocGYpO1xuMzA3ODpcdFxuMzA3OTpcdFx0LyogSW5pdCBQRiBcdTAwM2M9XHUwMDNlIEFGIG1haWxib3ggc3R1ZmYgKi9cbjMwODA6XHRcdGVyciA9IG90eDJfcGZhZl9tYm94X2luaXQocGYpO1xuMzA4MTpcdFx0aWYgKGVycilcbjMwODI6XHRcdFx0Z290byBlcnJfZnJlZV9pcnFfdmVjdG9ycztcbjMwODM6XHRcbjMwODQ6XHRcdC8qIFJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0ICovXG4zMDg1Olx0XHRlcnIgPSBvdHgyX3JlZ2lzdGVyX21ib3hfaW50cihwZiwgdHJ1ZSk7XG4zMDg2Olx0XHRpZiAoZXJyKVxuMzA4NzpcdFx0XHRnb3RvIGVycl9tYm94X2Rlc3Ryb3k7XG4zMDg4Olx0XG4zMDg5Olx0XHQvKiBSZXF1ZXN0IEFGIHRvIGF0dGFjaCBOUEEgYW5kIE5JWCBMRnMgdG8gdGhpcyBQRi5cbjMwOTA6XHRcdCAqIE5JWCBhbmQgTlBBIExGcyBhcmUgbmVlZGVkIGZvciB0aGlzIFBGIHRvIGZ1bmN0aW9uIGFzIGEgTklDLlxuMzA5MTpcdFx0ICovXG4zMDkyOlx0XHRlcnIgPSBvdHgyX2F0dGFjaF9ucGFfbml4KHBmKTtcbjMwOTM6XHRcdGlmIChlcnIpXG4zMDk0Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfbWJveF9pbnRyO1xuMzA5NTpcdFxuMzA5NjpcdFx0ZXJyID0gb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhwZik7XG4zMDk3Olx0XHRpZiAoZXJyKVxuMzA5ODpcdFx0XHRnb3RvIGVycl9kZXRhY2hfcnNyYztcbjMwOTk6XHRcbjMxMDA6XHRcdGVyciA9IGNuMTBrX2xtdHN0X2luaXQocGYpO1xuMzEwMTpcdFx0aWYgKGVycilcbjMxMDI6XHRcdFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XG4zMTAzOlx0XG4zMTA0Olx0XHRyZXR1cm4gMDtcbjMxMDU6XHRcbjMxMDY6XHRlcnJfZGV0YWNoX3JzcmM6XG4zMTA3Olx0XHRpZiAocGYtXHUwMDNlaHcubG10X2luZm8pXG4zMTA4Olx0XHRcdGZyZWVfcGVyY3B1KHBmLVx1MDAzZWh3LmxtdF9pbmZvKTtcbjMxMDk6XHRcdGlmICh0ZXN0X2JpdChDTjEwS19MTVRTVCwgXHUwMDI2cGYtXHUwMDNlaHcuY2FwX2ZsYWcpKVxuMzExMDpcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBwZi1cdTAwM2VkeW5jX2xtdCk7XG4zMTExOlx0XHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXHUwMDI2cGYtXHUwMDNlbWJveCk7XG4zMTEyOlx0ZXJyX2Rpc2FibGVfbWJveF9pbnRyOlxuMzExMzpcdFx0b3R4Ml9kaXNhYmxlX21ib3hfaW50cihwZik7XG4zMTE0Olx0ZXJyX21ib3hfZGVzdHJveTpcbjMxMTU6XHRcdG90eDJfcGZhZl9tYm94X2Rlc3Ryb3kocGYpO1xuMzExNjpcdGVycl9mcmVlX2lycV92ZWN0b3JzOlxuMzExNzpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldik7XG4zMTE4Olx0XG4zMTE5Olx0XHRyZXR1cm4gZXJyO1xuMzEyMDpcdH1cbjMxMjE6XHRFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcbjMxMjI6XHRcbjMxMjM6XHRzdGF0aWMgaW50IG90eDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbjMxMjQ6XHR7XG4zMTI1Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjMxMjY6XHRcdGludCBlcnIsIHFjb3VudCwgcW9zX3R4cXM7XG4zMTI3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuMzEyODpcdFx0c3RydWN0IG90eDJfbmljICpwZjtcbjMxMjk6XHRcdHN0cnVjdCBvdHgyX2h3ICpodztcbjMxMzA6XHRcbjMxMzE6XHRcdGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwZGV2KTtcbjMxMzI6XHRcdGlmIChlcnIpIHtcbjMxMzM6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcblwmIzM0Oyk7XG4zMTM0Olx0XHRcdHJldHVybiBlcnI7XG4zMTM1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTgyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipEaWdnaW5nIGludG8gUmVzb3VyY2UgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBvdHgyX2luaXRfcnNyY2AgYW5kIGl0cyBmaXJzdCBjYWxsIHRvIGBvdHgyX2NoZWNrX3BmX3VzYWJsZShwZilgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoYXQgY2FsbCBiZWNhdXNlIGl0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIHBoeXNpY2FsIGZ1bmN0aW9uLCAmIzM0O3BmLCYjMzQ7IGlzIGFjdHVhbGx5IHNvbWV0aGluZyB3ZSBjYW4gKnVzZSogd2l0aGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjcml0ZXJpYS4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG90eDJfY2hlY2tfcGZfdXNhYmxlYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBjb25maWd1cmF0aW9uIHN0YXRlLCBwZXJoYXBzIGV2ZW4gcmVzb3VyY2UgYXZhaWxhYmlsaXR5PyBMZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IG1ha2VzIGEgUEYgJiMzNDt1c2FibGUmIzM0OyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O290eDJfY2hlY2tfcGZfdXNhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD0xMDgzPWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDg0OmludCBvdHgyX2NoZWNrX3BmX3VzYWJsZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTEwODUtaW50IG90eDJfcGZhZl9tYm94X2luaXQoc3RydWN0IG90eDJfbmljICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTQ0PWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTI5NTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5NTU6aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0yOTU2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTMwMzE9aW50IG90eDJfaW5pdF9yc3JjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzA1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzA1NTpcdGVyciA9IG90eDJfY2hlY2tfcGZfdXNhYmxlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzA1Ni1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzU3CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgb3R4Ml9jaGVja19wZl91c2FibGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzIGNvZGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSB3YW50IHRvIHRha2UgYSBsb29rIGF0IGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAuIEkgc3VzcGVjdCB0aGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgaW4gZGV0ZXJtaW5pbmcgdGhlIHZpYWJpbGl0eSBvZiBhIHBoeXNpY2FsIGZ1bmN0aW9uIChQRikgb24gdGhpcyBzeXN0ZW0uIEl0IHByb2JhYmx5IGNoZWNrcyBmb3IgYSB2YXJpZXR5IG9mIGNvbmRpdGlvbnMgYmVmb3JlIGFsbG93aW5nIHRoYXQgUEYgdG8gYmUgYnJvdWdodCBvbmxpbmUgb3IgdXNlZCBpbiBzb21lIGNhcGFjaXR5LiBJcyBpdCBkZWFsaW5nIHdpdGggcmVzb3VyY2UgYWxsb2NhdGlvbiwgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBvciBtYXliZSBldmVuIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gVGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIGl04oCZcyBhIGNoZWNrLCBtYWtpbmcgbWUgYW50aWNpcGF0ZSBhIGJvb2xlYW4gcmV0dXJuIG9yIHNvbWUgZm9ybSBvZiBzdGF0dXMgY29kZS4gVGhlICYjMzQ7b3R4MiYjMzQ7IHByZWZpeCBpcyBhIGNsdWUgdG8gd2hpY2ggcGxhdGZvcm0gb3IgaGFyZHdhcmUgdGhpcyByZWxhdGVzIHRvLCB3aGljaCBzaG91bGQgaGVscCB0byBxdWlja2x5IGNhdGVnb3JpemUgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI5NTU6XHRpbnQgb3R4Ml9jaGVja19wZl91c2FibGUoc3RydWN0IG90eDJfbmljICpuaWMpXG4yOTU2Olx0e1xuMjk1NzpcdFx0dTY0IHJldjtcbjI5NTg6XHRcbjI5NTk6XHRcdHJldiA9IG90eDJfcmVhZDY0KG5pYywgUlZVX1BGX0JMT0NLX0FERFJYX0RJU0MoQkxLQUREUl9SVlVNKSk7XG4yOTYwOlx0XHRyZXYgPSAocmV2IFx1MDAzZVx1MDAzZSAxMikgXHUwMDI2IDB4RkY7XG4yOTYxOlx0XHQvKiBDaGVjayBpZiBBRiBoYXMgc2V0dXAgcmV2aXNpb24gZm9yIFJWVU0gYmxvY2ssXG4yOTYyOlx0XHQgKiBvdGhlcndpc2UgdGhpcyBkcml2ZXIgcHJvYmUgc2hvdWxkIGJlIGRlZmVycmVkXG4yOTYzOlx0XHQgKiB1bnRpbCBBRiBkcml2ZXIgY29tZXMgdXAuXG4yOTY0Olx0XHQgKi9cbjI5NjU6XHRcdGlmICghcmV2KSB7XG4yOTY2Olx0XHRcdGRldl93YXJuKG5pYy1cdTAwM2VkZXYsXG4yOTY3Olx0XHRcdFx0IFwmIzM0O0FGIGlzIG5vdCBpbml0aWFsaXplZCwgZGVmZXJyaW5nIHByb2JlXFxuXCYjMzQ7KTtcbjI5Njg6XHRcdFx0cmV0dXJuIC1FUFJPQkVfREVGRVI7XG4yOTY5Olx0XHR9XG4yOTcwOlx0XHRyZXR1cm4gMDtcbjI5NzE6XHR9XG4yOTcyOlx0XG4yOTczOlx0aW50IG90eDJfcmVhbGxvY19tc2l4X3ZlY3RvcnMoc3RydWN0IG90eDJfbmljICpwZilcbjI5NzQ6XHR7XG4yOTc1Olx0XHRzdHJ1Y3Qgb3R4Ml9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbjI5NzY6XHRcdGludCBudW1fdmVjLCBlcnI7XG4yOTc3Olx0XG4yOTc4Olx0XHQvKiBOUEEgaW50ZXJydXB0cyBhcmUgaW5vdCByZWdpc3RlcmVkLCBzbyBhbGxvYyBvbmx5XG4yOTc5Olx0XHQgKiB1cHRvIE5JWCB2ZWN0b3Igb2Zmc2V0LlxuMjk4MDpcdFx0ICovXG4yOTgxOlx0XHRudW1fdmVjID0gaHctXHUwMDNlbml4X21zaXhvZmY7XG4yOTgyOlx0XHRudW1fdmVjICYjNDM7PSBOSVhfTEZfQ0lOVF9WRUNfU1RBUlQgJiM0MzsgaHctXHUwMDNlbWF4X3F1ZXVlcztcbjI5ODM6XHRcbjI5ODQ6XHRcdG90eDJfZGlzYWJsZV9tYm94X2ludHIocGYpO1xuMjk4NTpcdFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldik7XG4yOTg2Olx0XHRlcnIgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMoaHctXHUwMDNlcGRldiwgbnVtX3ZlYywgbnVtX3ZlYywgUENJX0lSUV9NU0lYKTtcbjI5ODc6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbjI5ODg6XHRcdFx0ZGV2X2VycihwZi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gcmVhbGxvYyAlZCBJUlEgdmVjdG9yc1xcblwmIzM0OyxcbjI5ODk6XHRcdFx0XHRfX2Z1bmNfXywgbnVtX3ZlYyk7XG4yOTkwOlx0XHRcdHJldHVybiBlcnI7XG4yOTkxOlx0XHR9XG4yOTkyOlx0XG4yOTkzOlx0XHRyZXR1cm4gb3R4Ml9yZWdpc3Rlcl9tYm94X2ludHIocGYsIGZhbHNlKTtcbjI5OTQ6XHR9XG4yOTk1Olx0RVhQT1JUX1NZTUJPTChvdHgyX3JlYWxsb2NfbXNpeF92ZWN0b3JzKTtcbjI5OTY6XHRcbjI5OTc6XHRzdGF0aWMgaW50IG90eDJfc3Jpb3ZfdmZjZmdfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuMjk5ODpcdHtcbjI5OTk6XHRcdGludCBpO1xuMzAwMDpcdFxuMzAwMTpcdFx0cGYtXHUwMDNldmZfY29uZmlncyA9IGRldm1fa2NhbGxvYyhwZi1cdTAwM2VkZXYsIHBmLVx1MDAzZXRvdGFsX3ZmcyxcbjMwMDI6XHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcpLFxuMzAwMzpcdFx0XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG4zMDA0Olx0XHRpZiAoIXBmLVx1MDAzZXZmX2NvbmZpZ3MpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODI2CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9jdGVvbiBUWDIgUEYgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgYG90eDJfY2hlY2tfcGZfdXNhYmxlYCBmdW5jdGlvbiByZWFkcyBhIGhhcmR3YXJlIHJlZ2lzdGVyLCBgUlZVX1BGX0JMT0NLX0FERFJYX0RJU0NgLCB3aGljaCBpbmZsdWVuY2VzIHRoZSBwcm9iZSBwcm9jZXNzLiBJbiBhIFN5emthbGxlciBlbnZpcm9ubWVudCwgdGhpcyByZWFkIHdpbGwgbGlrZWx5IHJldHVybiAwIG9yIDB4RkZGRkZGRkYgaW5pdGlhbGx5LCBidXQgd2UgKmNhbiogaW5qZWN0IGEgbm9uLXplcm8gdmFsdWUgdG8gYnlwYXNzIHRoZSBkZWZlcnJhbCwgd2hpY2ggaXMga2V5IHRvIHRyaWdnZXJpbmcgdGhlIHByb2JsZW1hdGljIGNvZGUgcGF0aC4gVGhlIGNvZGUgdGhlbiBzZXRzIHVwIGEgbWFpbGJveCB1c2luZyBgb3R4Ml9wZmFmX21ib3hfaW5pdGAgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgQWRtaW4gRnVuY3Rpb24gKEFGKSBkcml2ZXIuIFRoZSBleGlzdGVuY2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEFGIGRyaXZlciwgY29udHJvbGxlZCBieSBgQ09ORklHX09DVEVPTlRYMl9BRmAsIGlzIGEgY3JpdGljYWwgZGVwZW5kZW5jeS4gSWYgdGhlIEFGIGRyaXZlciBpc24mIzM5O3QgbG9hZGVkIG9yIGZ1bmN0aW9uYWwsIHRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGxpa2VseSB0byBmYWlsLCBsZWFkaW5nIHRvIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nLiBIb3dldmVyLCBldmVuIGlmIHRoZSBBRiBkcml2ZXIgaXMgbm90IHBlcmZlY3RseSBmdW5jdGlvbmFsLCBTeXprYWxsZXIgKnNob3VsZCogc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZSBQRiBkcml2ZXIgaW5kZXBlbmRlbnRseSBpZiB3ZSBjYW4gbW9jayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMuCgpUaGUgbWFpbGJveCBpbnRlcmFjdGlvbiBpcyBpbnRlcmVzdGluZzsgaXQmIzM5O3MgYSBtZW1vcnktYmFzZWQgY29tbXVuaWNhdGlvbjogUEYgd3JpdGVzIHRvIGEgbWVtb3J5IHJlZ2lvbiBhbmQgcmluZ3MgYSBkb29yYmVsbC4gVGhlIEFGIGRyaXZlciB0aGVuIGhhbmRsZXMgdGhlIGludGVycnVwdC4gVGhpcyBpbnRyb2R1Y2VzIGEgcG9zc2libGUgaW50ZXJhY3Rpb24gc3VyZmFjZSBpZiAqYm90aCogZHJpdmVycyAoUEYgYW5kIEFGKSBhcmUgYmVpbmcgZnV6emVkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU6IG1vcmUgYXR0YWNrIHN1cmZhY2UuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGBvdHgyX2ZyZWVfc3FfcmVzYC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2Agb3IgZHVyaW5nIHJlc291cmNlIGRlYWxsb2NhdGlvbi4gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIGNhbGxlZCBieSBgb3R4Ml9vcGVuYCwgd2hpY2ggaXMsIGluIHR1cm4sIGNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSBpcyBicm91Z2h0IHVwIChlLmcuLCBgaXAgbGluayBzZXQgZGV2IGV0aFggdXBgKS4gU28sIGNhbiB3ZSBicmluZyB1cCB0aGUgbmV0ZGV2PyBZZXMsIGlmIGBwcm9iZWAgc3VjY2VlZHMgYW5kIHRoZSBuZXR3b3JrIGRldmljZSBpcyByZWdpc3RlcmVkLCBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwIHdpbGwgaW52b2tlIGBvdHgyX29wZW5gLCB3aGljaCB0aGVuIGNhbGxzIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gSWYgdGhhdCBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIHBhdGggbm93IGNhbGxzIGBvdHgyX2ZyZWVfc3FfcmVzYCwgdGhlIGV4YWN0IHBsYWNlIHdoZXJlIHRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4LCBhIG1lbW9yeSBsZWFrLiBGcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBtYWtlcyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGJlY2F1c2UgYnVnIGZpeGVzIGFyZSBpbXBvcnRhbnQgdG8gZnV6ei4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQgYENPTkZJR19PQ1RFT05UWDJfUEZgIGFuZCBgQ09ORklHX09DVEVPTlRYMl9BRmAuIFdoaWxlIHRoZSBBRiBtaWdodCBiZSAmIzM0O25lZWRlZCYjMzQ7LCB3ZSB3aWxsIHRyeSB0byBtYWtlIHRoaXMgaGFwcGVuIGluZGVwZW5kZW50bHkuIE5vdywgbGV0JiMzOTtzIGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI3IDA2OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O09DVEVPTlRYMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjY6Y29uZmlnIE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTctXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy04LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo5OmNvbmZpZyBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBSVlUgQWRtaW4gRnVuY3Rpb24gZHJpdmVyXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjExOlx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjMtXHRib29sIFwmIzM0O0Rpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjI0Olx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMjUtXHRkZWZhdWx0IG5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMTpjb25maWcgT0NURU9OVFgyX1BGXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBPY3Rlb25UWDIgTklDIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozMzpcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cdHNlbGVjdCBORVRfREVWTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjQ1OmNvbmZpZyBPQ1RFT05UWDJfVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00OC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTUxPWNvbmZpZyBSVlVfRVNXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgUlZVIEUtU3dpdGNoIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE9DVEVPTlRYMl9QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IGFmL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSAmIzQzOz0gYWYvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9NYWtlZmlsZTo4Om9iai0kKENPTkZJR19PQ1RFT05UWDJfUEYpICYjNDM7PSBuaWMvXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU9Nj1jY2ZsYWdzLXkgJiM0Mzs9IC1JJChzcmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfTUJPWCkgJiM0Mzs9IHJ2dV9tYm94Lm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgJiM0Mzs9IHJ2dV9hZi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZS05LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjZ3hfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jOjY3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTY4LVx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX0NOMTBLX1JQTSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guaC0xNS0gLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5oOjE2OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXHRcdDB4QTA1OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE1ND1ERUZJTkVfU0hPV19BVFRSSUJVVEUobnBjX21jYW1fbGF5b3V0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6MTU2OiNkZWZpbmUgX19PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfRk9QUyhfX25hbWUpXHRcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTctc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19uYW1lICMjIF9mb3BzID0ge1x0XHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcdFx0XFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNjYtc3RhdGljIGludCBfX25hbWUgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcdFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE3MC19XHRcdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNzItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yNDItI2RlZmluZSBUT1RBTF9TWiAoTUFYX05VTV9CQU5LUyAqIE1BWF9OVU1fU1VCX0JBTktTICogTUFYX1NVQkJBTktfREVQVEggKiA2NClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjQ0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTI0NT1zdGF0aWMgaW50IG5wY19tY2FtX21pc21hdGNoX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI4NC0vKiBcJiMzNDsldVxcdCVkXFx0JXVcXG5cJiMzNDsgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM6Mjg1OkRFRklORV9PQ1RFT05UWDJfREVCVUdGU19BVFRSSUJVVEVfV0lUSF9TSVpFKG5wY19tY2FtX21pc21hdGNoLCBUT1RBTF9TWik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMjg2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6MjE6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1BUUFx0XHRcdDB4QTAwQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXHRcdDB4QjEwMFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI3LSNkZWZpbmUgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYT19QVFBcdDB4QjYwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFx0XHRcdDB4QTA4NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjktI2RlZmluZSBQQ0lfREVWSURfQ04xMEtfUFRQXHRcdFx0MHhBMDlFXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MDpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5Mi1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85OHh4X1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5MzpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk0LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NlhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk3LVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5OTpcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVx0XHRcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMS1cdFx0XHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYTl9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDI6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwMy1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDQtXHRcdFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVNTV9QVFApIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNi1cdFx0XHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM9NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ2dV9pZF90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6NDU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtNDYtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTkyNz1zdGF0aWMgdm9pZCBydnVfZ2V0X2xia19idWZzaXplKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo5MzQ6XHRcdFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVx0aWYgKCFwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4Olx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0xCSyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTM0NDktXHRcdFx0ICAgICAgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjMtLyogUENJIGRldmljZSBJRHMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oOjI0OiNkZWZpbmVcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXHRcdDB4QTA2NVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVx0UENJX0RFVklEX09DVEVPTlRYMl9MQktcdFx0XHQweEEwNjFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTI2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jPTM4Mz1zdGF0aWMgdm9pZCBydnVfbGJrX3NldF9jaGFubmVscyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVx0XHRwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XHRcdFx0XHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYy00MDgtXHRcdGlmICghcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDItXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjI4NDM6XHRcdFx0XHRcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0NC1cdGlmICghcnZ1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9Mjk1MD1zdGF0aWMgaW50IGNneF9wcmludF9kbWFjX2ZsdChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjk2MjpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOTYzLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz0zMDEwPXN0YXRpYyBpbnQgY2d4X3ByaW50X2Z3ZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsbWFjX2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzAxOC1cdHJ2dSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcdFx0XHRcdFx0ICAgICBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRiwgTlVMTCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVx0aWYgKCFydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSAmIzQzOz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9WRikgJiM0Mzs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19SVlVfRVNXSVRDSCkgJiM0Mzs9IHJ2dV9yZXAub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTQyLS8qIFBDSSBkZXZpY2UgSURzICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjQ0OiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfVkZcdFx0MHhBMDY0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkZcdFx0MHhBMEY4XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC00Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjUxOiNkZWZpbmUgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQXHRcdDB4QTBGN1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNTk4LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oOjU5OTpcdHJldHVybiAocGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUZWRikgfHxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYwMC1cdFx0KHBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9SVlVfUkVQKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD02MTU9c3RhdGljIGlubGluZSBib29sIGlzX290eDJfc2RwX3JlcChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTYxNi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XHRyZXR1cm4gcGRldi1cdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvdHgyX3BmX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9QRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzgtXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM9MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfdmZfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI0Olx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjU6XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUCkgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXHR7IH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjcgMDY6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxODQKCQkJCQkJCW91dHB1dDogMTcxCgkJCQkJCQl0aG91Z2h0czogNDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb25zIGBPQ1RFT05UWDJfUEZgIGFuZCBgT0NURU9OVFgyX0FGYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZ1bmN0aW9uIGBvdHgyX2ZyZWVfc3FfcmVzYCBhbmQgdGhlIHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLiBJIHNlZSB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkIC0gZ29vZCB0byBjb25maXJtIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgaXQgYXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGZvciBmdXp6aW5nLgoKUmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBzbyBpdCYjMzk7cyByZWFjaGFibGUuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGFsbCB0aHJlZSBmdW5jdGlvbnMsIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCwgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBhbmQgYG90eDJfZnJlZV9zcV9yZXNgLCB0byBteSBsaXN0LgoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudD8gVGhlIGBQQ0lgIGNvbmZpZyBpcyByZXF1aXJlZCBmb3IgUENJIGRyaXZlcnMsIHdoaWNoIHRoaXMgY2xlYXJseSBpcywgYnV0IHRoYXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyB1bmxpa2VseSB0byBiZSB0aGUgcHJvYmxlbSBoZXJlLiBOb3csIEkgc2hvdWxkIG1ha2UgZG91YmxlLXN1cmUgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVhY2hhYmxlLiBMZXQgbWUgc2VlLi4uIElmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscywgaXQgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHRvIGNsZWFuIHVwLiBJZiBpdCBzdWNjZWVkcywgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHdpbGwgY2FsbCBpdCB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCBzbyB3ZSBkZWZpbml0ZWx5IGhpdCB0aGF0IGNvZGVwYXRoIHRoZW4uCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIGVub3VnaCB0byBjb252aW5jZSBtZSB0aGF0IHRoZSBlcnJvciBwYXRocyBpbiB0aGlzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIHRlYXJkb3duIG9mIHRoZSBRb1MgcXVldWVzLCByZXByZXNlbnQgYSB2YWxpZCBhcmVhIGZvciBmdXp6aW5nLiBJJiMzOTtsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNyAwNjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NURU9OVFgyX1BGJiMzNDssCiAgICAmIzM0O09DVEVPTlRYMl9BRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290eDJfZnJlZV9zcV9yZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9pbml0X2h3X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cdTAwM2V0aW1lc3RhbXBzIGFuZCBzcS1cdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NURU9OVFgyX1BGJiMzNDssCiAgICAmIzM0O09DVEVPTlRYMl9BRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290eDJfZnJlZV9zcV9yZXMmIzM0OywKICAgICYjMzQ7b3R4Ml9pbml0X2h3X3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cdTAwM2V0aW1lc3RhbXBzIGFuZCBzcS1cdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjM4LjEzNjAxNzc5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDk0NjIxOTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDozOC4xMzYwMjIyNDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDkwOTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDhmNTRiN2JmZDIxMWQyODk0YTIyMWU3OWQ4YTllNTY5NjAzNzYxNGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5pbmRleCA0MWEwZWJkZjIwMWU3MS4uODhhYzg1MzU0NDQ1NDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTU2OCwxNCArMTU2OCwxNSBAQCBzdGF0aWMgdm9pZCBvdHgyX2ZyZWVfc3FfcmVzKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuIFxcdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcXG4gXFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcXHUwMDNjIG90eDJfZ2V0X3RvdGFsX3R4X3F1ZXVlcyhwZik7IHFpZHgrKykge1xcbiBcXHRcXHRzcSA9IFxcdTAwMjZxc2V0LVxcdTAwM2VzcVtxaWR4XTtcXG4tXFx0XFx0LyogU2tpcCBmcmVlaW5nIFFvcyBxdWV1ZXMgaWYgdGhleSBhcmUgbm90IGluaXRpYWxpemVkICovXFxuLVxcdFxcdGlmICghc3EtXFx1MDAzZXNxZSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlc3FlKTtcXG4tXFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2VzcWVfcmluZyk7XFxuLVxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlY3B0X3Jlc3ApO1xcbi1cXHRcXHRxbWVtX2ZyZWUocGYtXFx1MDAzZWRldiwgc3EtXFx1MDAzZXRzb19oZHJzKTtcXG4tXFx0XFx0a2ZyZWUoc3EtXFx1MDAzZXNnKTtcXG4rXFx0XFx0Lyogc3EtXFx1MDAzZXNxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovXFxuK1xcdFxcdGlmIChzcS1cXHUwMDNlc3FlKSB7XFxuK1xcdFxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlc3FlKTtcXG4rXFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2VzcWVfcmluZyk7XFxuK1xcdFxcdFxcdHFtZW1fZnJlZShwZi1cXHUwMDNlZGV2LCBzcS1cXHUwMDNlY3B0X3Jlc3ApO1xcbitcXHRcXHRcXHRxbWVtX2ZyZWUocGYtXFx1MDAzZWRldiwgc3EtXFx1MDAzZXRzb19oZHJzKTtcXG4rXFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHNxLVxcdTAwM2V0aW1lc3RhbXBzKTtcXG4rXFx0XFx0XFx0a2ZyZWUoc3EtXFx1MDAzZXNnKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRrZnJlZShzcS1cXHUwMDNlc3FiX3B0cnMpO1xcbiBcXHR9XFxuIH1cXG5AQCAtMTcxMCwxMyArMTcxMSwxMiBAQCBpbnQgb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiBcXG4gZXJyX2ZyZWVfbml4X3F1ZXVlczpcXG4tXFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuIFxcdG90eDJfZnJlZV9jcV9yZXMocGYpO1xcbiBcXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5JWF9BUV9DVFlQRV9SUSwgZmFsc2UpO1xcbiBlcnJfZnJlZV90eHNjaDpcXG4gXFx0b3R4Ml90eHNjaHFfc3RvcChwZik7XFxuIGVycl9mcmVlX3NxX3B0cnM6XFxuLVxcdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcXG4rXFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuIGVycl9mcmVlX3JxX3B0cnM6XFxuIFxcdG90eDJfZnJlZV9hdXJhX3B0cihwZiwgQVVSQV9OSVhfUlEpO1xcbiBcXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5QQV9BUV9DVFlQRV9QT09MLCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6MzguNTIxNTg3NTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODcwOTA0Mjk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ1RFT05UWDJfUEZcIixcbiAgICBcIk9DVEVPTlRYMl9BRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm90eDJfZnJlZV9zcV9yZXNcIixcbiAgICBcIm90eDJfaW5pdF9od19yZXNvdXJjZXNcIixcbiAgICBcIm90eDJfZnJlZV9od19yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIG90eDJfaW5pdF9od19yZXNvdXJjZXMgYW5kIGluIG90eDJfZnJlZV9od19yZXNvdXJjZXMgYnkgY29ycmVjdGx5IGZyZWVpbmcgc3EtXFx1MDAzZXRpbWVzdGFtcHMgYW5kIHNxLVxcdTAwM2VzcWJfcHRycyBmb3IgdW51c2VkIFFvUyBxdWV1ZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBvciB0ZWFyZG93biBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgdlBDSS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZjU0YjdiZmQyMTFkMjg5NGEyMjFlNzlkOGE5ZTU2OTYwMzc2MTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdW4gMjcgMDY6MjQ6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuaW5kZXggNDFhMGViZGYyMDFlNzEuLjg4YWM4NTM1NDQ0NTQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xuQEAgLTE1NjgsMTQgKzE1NjgsMTUgQEAgc3RhdGljIHZvaWQgb3R4Ml9mcmVlX3NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxuIFx0b3R4Ml9zcV9mcmVlX3NxYnMocGYpO1xuIFx0Zm9yIChxaWR4ID0gMDsgcWlkeCBcdTAwM2Mgb3R4Ml9nZXRfdG90YWxfdHhfcXVldWVzKHBmKTsgcWlkeCsrKSB7XG4gXHRcdHNxID0gXHUwMDI2cXNldC1cdTAwM2VzcVtxaWR4XTtcbi1cdFx0LyogU2tpcCBmcmVlaW5nIFFvcyBxdWV1ZXMgaWYgdGhleSBhcmUgbm90IGluaXRpYWxpemVkICovXG4tXHRcdGlmICghc3EtXHUwMDNlc3FlKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWUpO1xuLVx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWVfcmluZyk7XG4tXHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZWNwdF9yZXNwKTtcbi1cdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldHNvX2hkcnMpO1xuLVx0XHRrZnJlZShzcS1cdTAwM2VzZyk7XG4rXHRcdC8qIHNxLVx1MDAzZXNxZSBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIHVudXNlZCBRb1MgcXVldWVzICovXG4rXHRcdGlmIChzcS1cdTAwM2VzcWUpIHtcbitcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VzcWUpO1xuK1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXNxZV9yaW5nKTtcbitcdFx0XHRxbWVtX2ZyZWUocGYtXHUwMDNlZGV2LCBzcS1cdTAwM2VjcHRfcmVzcCk7XG4rXHRcdFx0cW1lbV9mcmVlKHBmLVx1MDAzZWRldiwgc3EtXHUwMDNldHNvX2hkcnMpO1xuK1x0XHRcdHFtZW1fZnJlZShwZi1cdTAwM2VkZXYsIHNxLVx1MDAzZXRpbWVzdGFtcHMpO1xuK1x0XHRcdGtmcmVlKHNxLVx1MDAzZXNnKTtcbitcdFx0fVxuIFx0XHRrZnJlZShzcS1cdTAwM2VzcWJfcHRycyk7XG4gXHR9XG4gfVxuQEAgLTE3MTAsMTMgKzE3MTEsMTIgQEAgaW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcbiBcdHJldHVybiBlcnI7XG4gXG4gZXJyX2ZyZWVfbml4X3F1ZXVlczpcbi1cdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIFx0b3R4Ml9mcmVlX2NxX3JlcyhwZik7XG4gXHRvdHgyX2N0eF9kaXNhYmxlKG1ib3gsIE5JWF9BUV9DVFlQRV9SUSwgZmFsc2UpO1xuIGVycl9mcmVlX3R4c2NoOlxuIFx0b3R4Ml90eHNjaHFfc3RvcChwZik7XG4gZXJyX2ZyZWVfc3FfcHRyczpcbi1cdG90eDJfc3FfZnJlZV9zcWJzKHBmKTtcbitcdG90eDJfZnJlZV9zcV9yZXMocGYpO1xuIGVycl9mcmVlX3JxX3B0cnM6XG4gXHRvdHgyX2ZyZWVfYXVyYV9wdHIocGYsIEFVUkFfTklYX1JRKTtcbiBcdG90eDJfY3R4X2Rpc2FibGUobWJveCwgTlBBX0FRX0NUWVBFX1BPT0wsIHRydWUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6MzguNTIxNTkwMTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTA5MjM2OTU1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEcml2ZXIgUGF0Y2g6IE9jdGVvblRYMiBOSUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgY2xlYW5pbmcgdXAgdGhlIHJlc291cmNlIGZyZWVpbmcgaW4gYG90eDJfZnJlZV9zcV9yZXNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGBrZnJlZShzcS1cdTAwM2V0aW1lc3RhbXBzKWAgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdCdzIGVuc3VyaW5nIHRoYXQgYGtmcmVlKHNxLVx1MDAzZXNxYl9wdHJzKWAgaXMgKmFsd2F5cyogY2FsbGVkLCBldmVuIGlmIHRoZSBxdWV1ZSBpc24ndCBmdWxseSBpbml0aWFsaXplZCAoYCFzcS1cdTAwM2VzcWVgKS4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgYGNvbnRpbnVlYCB0aGF0IHdvdWxkIHNraXAgZnJlZWluZyBgc3FiX3B0cnNgIGlmIGBzcS1cdTAwM2VzcWVgIHdhcyBOVUxMLiBOb3cgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIGlzIHN0cnVjdHVyZWQgc28gdGhhdCBga2ZyZWUoc3EtXHUwMDNlc3FiX3B0cnMpYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGZvciBlbnN1cmluZyBhbGwgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZCBvbiBxdWV1ZSBkZXN0cnVjdGlvbiwgYXMgc2tpcHBpbmcgdGhpcyBzdGVwIGNvdWxkIGxlYWQgdG8gc3VidGxlIG1lbW9yeSBsZWFrcy5cblxuQWxzbywgSSBzZWUgYSBjaGFuZ2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cgd2l0aGluIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gVGhlIHBhdGNoIG1vdmVzIHRoZSBjYWxsIHRvIGBvdHgyX2ZyZWVfc3FfcmVzYCBpbiB0aGUgZXJyb3IgcGF0aC4gSSB3b25kZXIgd2h5IHRoZXkgbWFkZSB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBoYXJkd2FyZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBkcml2ZXIuXG5cbk5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGNhbiB0aGlzIGJlIGhpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGlzIGlzIGEgUENJIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBOSUMsIHNvIGl0J3MgYSBjcml0aWNhbCBxdWVzdGlvbiBmb3IgZnV6emluZy4gVW5sZXNzIHRoZXJlJ3Mgc29mdHdhcmUgZW11bGF0aW9uLCBkcml2ZXJzIGxpa2UgdGhpcyBhcmUgdHlwaWNhbGx5IHRyaWNreSB0byBmdXp6IHdpdGggc3l6a2FsbGVyLiBJZiBpdCdzIGEgVVNCIG9yIHZpcnR1YWwgZGV2aWNlIGl0IGlzIG1vcmUgbGlrZWx5IHRvIGJlIGZ1enphYmxlLiBIb3dldmVyLCBpZiBQQ0kgZnV6emluZyBpcyBlbmFibGVkLCBvciBpZiBpdCBpcyBhIFVTQiBkZXZpY2UgdGhhdCBjb3VsZCBvcGVuIHVwIHBvc3NpYmlsaXRpZXMuIEkgcmVjYWxsIHN5emthbGxlciBkb2VzIHN1cHBvcnQgUENJIGZ1enppbmcsIHJpZ2h0PyBUaHJvdWdoIHZQQ0ksIG9yLCBJIHRoaW5rLCBldmVuIGJ5IGp1c3QgdGhyb3dpbmcgcmFuZG9tIGRldmljZSBJRHMgaWYgUENJIGZ1enppbmcgaXMgdHVybmVkIG9uLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY2AuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIGZ1enphYmlsaXR5LiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0LCBpZiByZWFjaGFibGUsIGNvdWxkIHJldmVhbCBzdWJ0bGUgaXNzdWVzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBvciBzcGVjaWZpYyBlcnJvciBjb25kaXRpb25zLCBzbyBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODMsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDo0Ny42MTM5NjE0NDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzOTQyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9NTE9Y29uZmlnIFJWVV9FU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IGFmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBuaWMvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZT02PWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9NQk9YKSArPSBydnVfbWJveC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBydnVfYWYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6Njc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfQ04xMEtfUlBNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4Lmg6MTY6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXFx0XFx0MHhBMDU5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTU0PURFRklORV9TSE9XX0FUVFJJQlVURShucGNfbWNhbV9sYXlvdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2Ni1zdGF0aWMgaW50IF9fbmFtZSAjIyBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0Mi0jZGVmaW5lIFRPVEFMX1NaIChNQVhfTlVNX0JBTktTICogTUFYX05VTV9TVUJfQkFOS1MgKiBNQVhfU1VCQkFOS19ERVBUSCAqIDY0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MjQ1PXN0YXRpYyBpbnQgbnBjX21jYW1fbWlzbWF0Y2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXFxcIiV1XFxcXHQlZFxcXFx0JXVcXFxcblxcXCIgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyMTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQXFx0XFx0XFx0MHhBMDBDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXFx0XFx0MHhCMTAwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXFx0MHhCNjAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFxcdFxcdFxcdDB4QTA4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFxcdFxcdFxcdDB4QTA5RVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTkzOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk1LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk2WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTctXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwMjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NU1NX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA2LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo0NTpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjkzNDpcXHRcXHRcXHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVxcdGlmICghcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4OlxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0OS1cXHRcXHRcXHQgICAgICBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjQ6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXFx0XFx0MHhBMDY1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXFx0XFx0XFx0MHhBMDYxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zODM9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVxcdFxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XFx0XFx0XFx0XFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQwOC1cXHRcXHRpZiAoIXBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0Mi1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDQtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyOTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI5NjMtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMwMTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZndkYXRhKHN0cnVjdCBzZXFfZmlsZSAqcywgaW50IGxtYWNfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMTgtXFx0cnZ1ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcXHRcXHRcXHRcXHRcXHQgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGLCBOVUxMKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVxcdGlmICghcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgKz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICs9IHJ2dV9yZXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDItLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXFx0XFx0MHhBMDY0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDU6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXFx0XFx0MHhBMEY4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFxcdFxcdDB4QTBGN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTU5OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NTk5OlxcdHJldHVybiAocGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjAwLVxcdFxcdChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX1JWVV9SRVApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XFx0cmV0dXJuIHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zOC1cXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml92Zl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjQ6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXFx0eyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjQ3LjY2OTM2MDI1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5OTgxNzkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBPQ1RFT05UWDJfUEYgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgT0NURU9OVFgyX1BGYCBkcml2ZXIuIEl0J3MgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEZgIGRldmljZSAoMHhBMDYzKS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiY2FuIHdlIGZ1enogdGhpcyB0aGluZyB3aXRoIFN5emthbGxlciB1c2luZyB2UENJP1wiIFRoZSBwcmUtcmVxdWlzaXRlLCBvZiBjb3Vyc2UsIGlzIHRoYXQgYENPTkZJR19QQ0lgIG5lZWRzIHRvIGJlIGVuYWJsZWQsIGFuZCB0aGUgZHJpdmVyIGl0c2VsZiBuZWVkcyB0byBiZSBsb2FkZWQuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdG8gcHJvY2VlZCB3aXRoIGZ1enppbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoYXQncyBhIGtleSBxdWVzdGlvbiBoZXJlLiBJZiB3ZSBjYW4gaW5qZWN0IGEgZmFrZSBQQ0kgZGV2aWNlIHVzaW5nIFN5emthbGxlciwgd2l0aCBhIGBQQ0lfVkVORE9SX0lEX0NBVklVTWAgdmVuZG9yIElEIGFuZCBkZXZpY2UgSUQgYDB4QTA2M2AsIHRoZW4gdGhlIGRyaXZlcidzIGBwcm9iZWAgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCB3ZSdyZSBhaW1pbmcgZm9yLlxuXG5Ob3csIGJlZm9yZSBJIG1vdmUgb24sIGxldCdzIGxvb2sgZm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBzZWUgdGhhdCBgQ09ORklHX09DVEVPTlRYMl9QRmAgaXMgdGhlIG1haW4gdGhpbmcgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gQnV0LCBJIGFsc28gbm90aWNlZCB0aGF0IHRoZSBwYXRjaCBtb2RpZmllcyBgb3R4Ml9mcmVlX3NxX3Jlc2AgYW5kIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYC4gVGhlIGNyaXRpY2FsIHBvaW50IG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyByZWFjaGFibGUgZHVyaW5nIHRoZSBwcm9iZSwgb3Igd2hlbiBicmluZ2luZyB1cCB0aGUgaW50ZXJmYWNlPyBJdCBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aG9zZSB0d28gZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgY291bGQgYmUgYSBnb29kIGF0dGFjayBzdXJmYWNlLiBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGlzIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NTQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjQ6NTIuNjY5MTc5ODU1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mjk2MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm90eDJfaW5pdF9od19yZXNvdXJjZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaD0xMDgwPWludCBvdHgyX2FsbG9jX3F1ZXVlX21lbShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDgxOmludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTA4Mi12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE1ODQ9c3RhdGljIGludCBvdHgyX2dldF9yYnVmX3NpemUoc3RydWN0IG90eDJfbmljICpwZiwgaW50IG10dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTYxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE2MTI6aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE2MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzQzLX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3NDQ6RVhQT1JUX1NZTUJPTChvdHgyX2luaXRfaHdfcmVzb3VyY2VzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3NDUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE5NjU9aW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xOTc4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTk3OTpcXHRlcnIgPSBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE5ODAtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYz01OTc9c3RhdGljIGludCBydnVfcmVwX3JzcmNfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtNjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9yZXAuYzo2MTA6XFx0ZXJyID0gb3R4Ml9pbml0X2h3X3Jlc291cmNlcyhwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcmVwLmMtNjExLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjUyLjcyMzQ4MTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTM1MzQyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBhbmQgZnJlZWluZyBwcm9jZXNzIHdpdGhpbiB0aGUgYG90eDJgIGRyaXZlciwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uOlxuXG4qKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIG90eDIgRHJpdmVyKipcblxuT2theSwgc28gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGlzIHByZXR0eSBjcnVjaWFsLiBJdCdzIGNhbGxlZCBmcm9tIGBvdHgyX29wZW5gLCBzcGVjaWZpY2FsbHkgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgKGBuZXRkZXZgKSBpcyBicm91Z2h0IG9ubGluZS4gVGhpcyBzdWdnZXN0cyBpdCdzIHRoZSBwb2ludCB3aGVyZSB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGZvciB0aGUgZGV2aWNlJ3Mgb3BlcmF0aW9uLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhlIGVycm9yIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBjYWxsZWQgaWYgYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGZhaWxzICpkdXJpbmcqIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGlzIGluZGljYXRlcyB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW55IHBhcnRpYWxseSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGlmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBydW5zIGludG8gYSBzbmFnLCBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzLiBUaGUgZmFjdCB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyB1c2VkIG9uIHRoZSBlcnJvciBwYXRoIGltcGxpZXMgYSBjYXJlZnVsIGRlc2lnbiB0byBncmFjZWZ1bGx5IGhhbmRsZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcy4gRmluYWxseSwgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHByb2JhYmx5IGFsc28gY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHdoZW4gdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHNodXQgZG93biwgYW5kIHRoZXJlZm9yZSByZXNvdXJjZXMgYXJlIGZyZWVkLiBUaGlzIHNlZW1zIGxpa2UgYSBzdGFuZGFyZCBhbmQgcmVzcG9uc2libGUgcGF0dGVybiBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCwgZW5zdXJpbmcgdGhhdCByZXNvdXJjZXMgYXJlIGVpdGhlciBwcm9wZXJseSBpbml0aWFsaXplZCBvciBkZWFsbG9jYXRlZCBpbiB0aGUgZXZlbnQgb2YgZXJyb3JzIG9yIHNodXRkb3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIyMiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI0OjU2LjMxNzAxODE3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDgxNjMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdHgyX2ZyZWVfc3FfcmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0xNTQ1PXN0YXRpYyB2b2lkIG90eDJfZnJlZV9jcV9yZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE1NTk6c3RhdGljIHZvaWQgb3R4Ml9mcmVlX3NxX3JlcyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTU2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTE2MTI9aW50IG90eDJfaW5pdF9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTcxOC1lcnJfZnJlZV9zcV9wdHJzOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MTcxOTpcXHRvdHgyX2ZyZWVfc3FfcmVzKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTE3MjAtZXJyX2ZyZWVfcnFfcHRyczpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MTc0Nj12b2lkIG90eDJfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMTc4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjE3ODg6XFx0b3R4Ml9mcmVlX3NxX3JlcyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0xNzg5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNDo1Ni4zNzE4NDA0ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ2NDU3NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZXNvdXJjZSBNYW5hZ2VtZW50IGluIHRoZSBPVFgyIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGBvdHgyX2ZyZWVfc3FfcmVzYCBmdW5jdGlvbiBpcyB1c2VkLiBJdCBsb29rcyBsaWtlIGl0J3MgY2FsbGVkIGluIHR3byBrZXkgcGxhY2VzOiBhcyBwYXJ0IG9mIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGFuZCBhbHNvIHdpdGhpbiBgb3R4Ml9mcmVlX2h3X3Jlc291cmNlc2AsIHdoaWNoIGdldHMgaW52b2tlZCBkdXJpbmcgdGhpbmdzIGxpa2UgYSBkZXZpY2Ugc3RvcC4gSG1tbSwgdGhlIHNlcXVlbmNlIGlzIHN0YXJ0aW5nIHRvIGNvbWUgaW50byBmb2N1cy5cblxuQnV0IGEgcXVlc3Rpb24gcG9wcGVkIGludG8gbXkgaGVhZDogZG9lcyBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgYWN0dWFsbHkgcGVyZm9ybSBhbnkgaGFyZHdhcmUgY29tbXVuaWNhdGlvbj8gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC4gSWYgaXQgZG9lcywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IGNvdWxkIGZhaWwgZWFybHkgb24sIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cCB3aGVyZSB0aGUgaGFyZHdhcmUgbWlnaHQgbm90IGJlIHBoeXNpY2FsbHkgcHJlc2VudCwgcGVyaGFwcyByZXByZXNlbnRlZCBieSBqdXN0IGEgcGxhY2Vob2xkZXIgb3IgXCJmYWtlXCIgUENJIGRldmljZS4gV2UnZCBzZWUgaXQgdGhlbi5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYG90eDJfaW5pdF9od19yZXNvdXJjZXNgIGFuZCBjb25maXJtIG9yIGRpc3BlbCB0aGlzIGh5cG90aGVzaXMuIEdvdHRhIGV4YW1pbmUgdGhhdCBmdW5jdGlvbidzIGludGVybmFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODMsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MDAuMjE4Mjk5OTg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MTIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjEyOlxcdGludCBvdHgyX2luaXRfaHdfcmVzb3VyY2VzKHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuMTYxMzpcXHR7XFxuMTYxNDpcXHRcXHRzdHJ1Y3Qgbml4X2xmX2ZyZWVfcmVxICpmcmVlX3JlcTtcXG4xNjE1OlxcdFxcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmLVxcdTAwM2VtYm94O1xcbjE2MTY6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4xNjE3OlxcdFxcdHN0cnVjdCBtc2dfcmVxICpyZXE7XFxuMTYxODpcXHRcXHRpbnQgZXJyID0gMCwgbHZsO1xcbjE2MTk6XFx0XFxuMTYyMDpcXHRcXHQvKiBTZXQgcmVxdWlyZWQgTlBBIExGJ3MgcG9vbCBjb3VudHNcXG4xNjIxOlxcdFxcdCAqIEF1cmFzIGFuZCBQb29scyBhcmUgdXNlZCBpbiBhIDE6MSBtYXBwaW5nLFxcbjE2MjI6XFx0XFx0ICogc28sIGF1cmEgY291bnQgPSBwb29sIGNvdW50LlxcbjE2MjM6XFx0XFx0ICovXFxuMTYyNDpcXHRcXHRody1cXHUwMDNlcnFwb29sX2NudCA9IGh3LVxcdTAwM2VyeF9xdWV1ZXM7XFxuMTYyNTpcXHRcXHRody1cXHUwMDNlc3Fwb29sX2NudCA9IG90eDJfZ2V0X3RvdGFsX3R4X3F1ZXVlcyhwZik7XFxuMTYyNjpcXHRcXHRody1cXHUwMDNlcG9vbF9jbnQgPSBody1cXHUwMDNlcnFwb29sX2NudCArIGh3LVxcdTAwM2VzcXBvb2xfY250O1xcbjE2Mjc6XFx0XFxuMTYyODpcXHRcXHRpZiAoIW90eDJfcmVwX2RldihwZi1cXHUwMDNlcGRldikpIHtcXG4xNjI5OlxcdFxcdFxcdC8qIE1heGltdW0gaGFyZHdhcmUgc3VwcG9ydGVkIHRyYW5zbWl0IGxlbmd0aCAqL1xcbjE2MzA6XFx0XFx0XFx0cGYtXFx1MDAzZXR4X21heF9wa3RsZW4gPSBwZi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VtYXhfbXR1ICsgT1RYMl9FVEhfSExFTjtcXG4xNjMxOlxcdFxcdFxcdHBmLVxcdTAwM2VyYnNpemUgPSBvdHgyX2dldF9yYnVmX3NpemUocGYsIHBmLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW10dSk7XFxuMTYzMjpcXHRcXHR9XFxuMTYzMzpcXHRcXG4xNjM0OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2MzU6XFx0XFx0LyogTlBBIGluaXQgKi9cXG4xNjM2OlxcdFxcdGVyciA9IG90eDJfY29uZmlnX25wYShwZik7XFxuMTYzNzpcXHRcXHRpZiAoZXJyKVxcbjE2Mzg6XFx0XFx0XFx0Z290byBleGl0O1xcbjE2Mzk6XFx0XFxuMTY0MDpcXHRcXHQvKiBOSVggaW5pdCAqL1xcbjE2NDE6XFx0XFx0ZXJyID0gb3R4Ml9jb25maWdfbml4KHBmKTtcXG4xNjQyOlxcdFxcdGlmIChlcnIpXFxuMTY0MzpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25wYV9sZjtcXG4xNjQ0OlxcdFxcbjE2NDU6XFx0XFx0LyogRGVmYXVsdCBkaXNhYmxlIGJhY2twcmVzc3VyZSBvbiBOSVgtQ1BUICovXFxuMTY0NjpcXHRcXHRvdHgyX25peF9jcHRfY29uZmlnX2JwKHBmLCBmYWxzZSk7XFxuMTY0NzpcXHRcXG4xNjQ4OlxcdFxcdC8qIEVuYWJsZSBiYWNrcHJlc3N1cmUgZm9yIENHWCBtYXBwZWQgUEYvVkZzICovXFxuMTY0OTpcXHRcXHRpZiAoIWlzX290eDJfbGJrdmYocGYtXFx1MDAzZXBkZXYpKVxcbjE2NTA6XFx0XFx0XFx0b3R4Ml9uaXhfY29uZmlnX2JwKHBmLCB0cnVlKTtcXG4xNjUxOlxcdFxcbjE2NTI6XFx0XFx0LyogSW5pdCBBdXJhcyBhbmQgcG9vbHMgdXNlZCBieSBOSVggUlEsIGZvciBmcmVlIGJ1ZmZlciBwdHJzICovXFxuMTY1MzpcXHRcXHRlcnIgPSBvdHgyX3JxX2F1cmFfcG9vbF9pbml0KHBmKTtcXG4xNjU0OlxcdFxcdGlmIChlcnIpIHtcXG4xNjU1OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY1NjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25peF9sZjtcXG4xNjU3OlxcdFxcdH1cXG4xNjU4OlxcdFxcdC8qIEluaXQgQXVyYXMgYW5kIHBvb2xzIHVzZWQgYnkgTklYIFNRLCBmb3IgcXVldWVpbmcgU1FFcyAqL1xcbjE2NTk6XFx0XFx0ZXJyID0gb3R4Ml9zcV9hdXJhX3Bvb2xfaW5pdChwZik7XFxuMTY2MDpcXHRcXHRpZiAoZXJyKSB7XFxuMTY2MTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2NjI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9ycV9wdHJzO1xcbjE2NjM6XFx0XFx0fVxcbjE2NjQ6XFx0XFxuMTY2NTpcXHRcXHRlcnIgPSBvdHgyX3R4c2NoX2FsbG9jKHBmKTtcXG4xNjY2OlxcdFxcdGlmIChlcnIpIHtcXG4xNjY3OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY2ODpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XFxuMTY2OTpcXHRcXHR9XFxuMTY3MDpcXHRcXG4xNjcxOlxcdCNpZmRlZiBDT05GSUdfRENCXFxuMTY3MjpcXHRcXHRpZiAocGYtXFx1MDAzZXBmY19lbikge1xcbjE2NzM6XFx0XFx0XFx0ZXJyID0gb3R4Ml9wZmNfdHhzY2hxX2FsbG9jKHBmKTtcXG4xNjc0OlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjc1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTY3NjpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NxX3B0cnM7XFxuMTY3NzpcXHRcXHRcXHR9XFxuMTY3ODpcXHRcXHR9XFxuMTY3OTpcXHQjZW5kaWZcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0ZXJyID0gb3R4Ml9jb25maWdfbml4X3F1ZXVlcyhwZik7XFxuMTY4MjpcXHRcXHRpZiAoZXJyKSB7XFxuMTY4MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbjE2ODQ6XFx0XFx0XFx0Z290byBlcnJfZnJlZV90eHNjaDtcXG4xNjg1OlxcdFxcdH1cXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0Zm9yIChsdmwgPSAwOyBsdmwgXFx1MDAzYyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsKyspIHtcXG4xNjg4OlxcdFxcdFxcdGludCBpZHg7XFxuMTY4OTpcXHRcXG4xNjkwOlxcdFxcdFxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4xNjkxOlxcdFxcdFxcdFxcdGVyciA9IG90eDJfdHhzY2hxX2NvbmZpZyhwZiwgbHZsLCBpZHgsIGZhbHNlKTtcXG4xNjkyOlxcdFxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNjkzOlxcdFxcdFxcdFxcdFxcdGRldl9lcnIocGYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBjb25maWcgVFhTQ0hcXFxcblxcXCIpO1xcbjE2OTQ6XFx0XFx0XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4xNjk1OlxcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfbml4X3F1ZXVlcztcXG4xNjk2OlxcdFxcdFxcdFxcdH1cXG4xNjk3OlxcdFxcdFxcdH1cXG4xNjk4OlxcdFxcdH1cXG4xNjk5OlxcdFxcbjE3MDA6XFx0I2lmZGVmIENPTkZJR19EQ0JcXG4xNzAxOlxcdFxcdGlmIChwZi1cXHUwMDNlcGZjX2VuKSB7XFxuMTcwMjpcXHRcXHRcXHRlcnIgPSBvdHgyX3BmY190eHNjaHFfY29uZmlnKHBmKTtcXG4xNzAzOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4xNzA0OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWJveC1cXHUwMDNlbG9jayk7XFxuMTcwNTpcXHRcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25peF9xdWV1ZXM7XFxuMTcwNjpcXHRcXHRcXHR9XFxuMTcwNzpcXHRcXHR9XFxuMTcwODpcXHQjZW5kaWZcXG4xNzA5OlxcdFxcbjE3MTA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4xNzExOlxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjAwLjIxODQ2OTcyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTExOTQzNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBpbiB0aGUgT1RYMiBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gYSBwb3RlbnRpYWwgaXNzdWUuIFRoZSBmdW5jdGlvbiBJJ20gZXhhbWluaW5nIGlzIGNsZWFybHkgcmVzcG9uc2libGUgZm9yIHJlc291cmNlIGFsbG9jYXRpb24sIHBhcnRpY3VsYXJseSB0aGUgaGFyZHdhcmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgT1RYMidzIHRyYW5zbWl0IHNjaGVkdWxlci4gTXkgY29uY2VybiBzdGVtcyBmcm9tIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgb3R4Ml90eHNjaF9hbGxvY2AgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZV9zcV9wdHJzYCwgd2hpY2ggdGhlbiBjYWxscyBgb3R4Ml9mcmVlX3NxX3Jlc2AuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4gSG93ZXZlciwgaWYgYG90eDJfY29uZmlnX25peF9xdWV1ZXNgIGZhaWxzLCB3ZSBicmFuY2ggdG8gYGVycl9mcmVlX3R4c2NoYCwgd2hpY2ggY2FsbHMgYG90eDJfdHhzY2hxX3N0b3BgIGJlZm9yZSB0aGVuIG1vdmluZyB0byBgZXJyX2ZyZWVfc3FfcHRyc2AuIFRoZSBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgaXMgdGhpcyBlcnJvciBmbG93IGNvcnJlY3RseSBmcmVlaW5nICphbGwqIGFsbG9jYXRlZCByZXNvdXJjZXMuXG5cblRoZSBjcnV4IG9mIHRoZSBtYXR0ZXIsIGFjY29yZGluZyB0byB0aGUgcGF0Y2gsIGlzIGFuIGlkZW50aWZpZWQgbWVtb3J5IGxlYWsgY29uY2VybmluZyBgc3EtXHUwMDNldGltZXN0YW1wc2AgYW5kIGBzcS1cdTAwM2VzcWJfcHRyc2AuIFRoZXkncmUgYXBwYXJlbnRseSBub3QgYmVpbmcgcHJvcGVybHkgcmVsZWFzZWQgaW4gc29tZSBmYWlsdXJlIHNjZW5hcmlvcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGlzc3VlLiBXZSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvZGUgbm93IGVuc3VyZXMgdGhvc2UgYXJlIGFsd2F5cyBjb3JyZWN0bHkgZnJlZWQuXG5cbk5leHQsIEknbSB0aGlua2luZyBhYm91dCBob3cgd2UgY2FuIHJlYWNoIHRoaXMgY29kZSBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgc3BlY2lmaWNhbGx5IHVzaW5nIHN5emthbGxlci4gRG9lcyBzeXprYWxsZXIgZXZlbiBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHRhcmdldCB0aGlzIGRyaXZlcj8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHN5emthbGxlciBoYXMgc29tZSBQQ0kgZnV6emluZyBzdXBwb3J0LiBTbywgaWYgd2UgY2FuIHN1Y2Nlc3NmdWxseSBnZXQgaXQgdG8gaW5qZWN0IHRoZSBQQ0kgZGV2aWNlLCBgb3R4Ml9wcm9iZWAgd291bGQgYmUgY2FsbGVkLiBUaGF0J3MgYSBkZWZpbml0ZSBwYXRoIHRvIHRoZSBkcml2ZXIuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgdGhpcyBjb2RlLiBTbywgbXkgbmV4dCBzdGVwIGlzIHRvIGNhcmVmdWxseSBjaGVjayB0aGUgYG90eDJfcHJvYmVgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExMiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjA1LjMzMDQxNjE3N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2MDExODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3R4Ml9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzEyMT1FWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jLTMxMjItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozMTIzOnN0YXRpYyBpbnQgb3R4Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMzEyNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTM1NDE9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG90eDJfcGZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTQzLVxcdC5pZF90YWJsZSA9IG90eDJfcGZfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYzozNTQ0OlxcdC5wcm9iZSA9IG90eDJfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zNTQ1LVxcdC5zaHV0ZG93biA9IG90eDJfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNTowNS4zODQwMjIxNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4OTIxNjA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBgb3R4Ml9wcm9iZWAncyBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHdoYXQgdGhpcyBgb3R4Ml9wcm9iZWAgZnVuY3Rpb24gaXMgYWxsIGFib3V0LiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgYSBwcm9jZXNzIG9mIGludmVzdGlnYXRpb24sIG9mIGV4YW1pbmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgb3V0Y29tZXMgYXJlLiBFc3NlbnRpYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCB1bmRlcnN0YW5kaW5nLCBtYXliZSByZWFkaW5nIHRoZSBjb2RlLCBjaGVja2luZyBmb3IgZG9jdW1lbnRhdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBydW5uaW5nIGl0IGluIGEgc2FuZGJveCBlbnZpcm9ubWVudCB0byBzZWUgaXRzIGJlaGF2aW9yIGZpcnN0aGFuZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cywgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgYW5kLCBvZiBjb3Vyc2UsIGFueSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEtub3dpbmcgdGhlIGRldGFpbHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwODIsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNTowOC41NzMyNDEyNjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzEyMyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxMjM6XFx0c3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMzEyNDpcXHR7XFxuMzEyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjMxMjY6XFx0XFx0aW50IGVyciwgcWNvdW50LCBxb3NfdHhxcztcXG4zMTI3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuMzEyODpcXHRcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmO1xcbjMxMjk6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3O1xcbjMxMzA6XFx0XFxuMzEzMTpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuMzEzMjpcXHRcXHRpZiAoZXJyKSB7XFxuMzEzMzpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcXFxuXFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxMzU6XFx0XFx0fVxcbjMxMzY6XFx0XFxuMzEzNzpcXHRcXHRlcnIgPSBwY2ltX3JlcXVlc3RfYWxsX3JlZ2lvbnMocGRldiwgRFJWX05BTUUpO1xcbjMxMzg6XFx0XFx0aWYgKGVycikge1xcbjMxMzk6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJQQ0kgcmVxdWVzdCByZWdpb25zIGZhaWxlZCAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjMxNDA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zMTQxOlxcdFxcdH1cXG4zMTQyOlxcdFxcbjMxNDM6XFx0XFx0ZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg0OCkpO1xcbjMxNDQ6XFx0XFx0aWYgKGVycikge1xcbjMxNDU6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJETUEgbWFzayBjb25maWcgZmFpbGVkLCBhYm9ydFxcXFxuXFxcIik7XFxuMzE0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxNDc6XFx0XFx0fVxcbjMxNDg6XFx0XFxuMzE0OTpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4zMTUwOlxcdFxcbjMxNTE6XFx0XFx0LyogU2V0IG51bWJlciBvZiBxdWV1ZXMgKi9cXG4zMTUyOlxcdFxcdHFjb3VudCA9IG1pbl90KGludCwgbnVtX29ubGluZV9jcHVzKCksIE9UWDJfTUFYX0NRX0NOVCk7XFxuMzE1MzpcXHRcXHRxb3NfdHhxcyA9IG1pbl90KGludCwgcWNvdW50LCBPVFgyX1FPU19NQVhfTEVBRl9OT0RFUyk7XFxuMzE1NDpcXHRcXG4zMTU1OlxcdFxcdG5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xcyhzaXplb2YoKnBmKSwgcWNvdW50ICsgcW9zX3R4cXMsIHFjb3VudCk7XFxuMzE1NjpcXHRcXHRpZiAoIW5ldGRldilcXG4zMTU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjMxNTg6XFx0XFxuMzE1OTpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTtcXG4zMTYwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMzE2MTpcXHRcXHRwZiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuMzE2MjpcXHRcXHRwZi1cXHUwMDNlbmV0ZGV2ID0gbmV0ZGV2O1xcbjMxNjM6XFx0XFx0cGYtXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjMxNjQ6XFx0XFx0cGYtXFx1MDAzZWRldiA9IGRldjtcXG4zMTY1OlxcdFxcdHBmLVxcdTAwM2V0b3RhbF92ZnMgPSBwY2lfc3Jpb3ZfZ2V0X3RvdGFsdmZzKHBkZXYpO1xcbjMxNjY6XFx0XFx0cGYtXFx1MDAzZWZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047XFxuMzE2NzpcXHRcXG4zMTY4OlxcdFxcdGh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4zMTY5OlxcdFxcdGh3LVxcdTAwM2VwZGV2ID0gcGRldjtcXG4zMTcwOlxcdFxcdGh3LVxcdTAwM2VyeF9xdWV1ZXMgPSBxY291bnQ7XFxuMzE3MTpcXHRcXHRody1cXHUwMDNldHhfcXVldWVzID0gcWNvdW50O1xcbjMxNzI6XFx0XFx0aHctXFx1MDAzZW5vbl9xb3NfcXVldWVzID0gcWNvdW50O1xcbjMxNzM6XFx0XFx0aHctXFx1MDAzZW1heF9xdWV1ZXMgPSBxY291bnQ7XFxuMzE3NDpcXHRcXHRody1cXHUwMDNlcmJ1Zl9sZW4gPSBPVFgyX0RFRkFVTFRfUkJVRl9MRU47XFxuMzE3NTpcXHRcXHQvKiBVc2UgQ1FFIG9mIDEyOCBieXRlIGRlc2NyaXB0b3Igc2l6ZSBieSBkZWZhdWx0ICovXFxuMzE3NjpcXHRcXHRody1cXHUwMDNleHFlX3NpemUgPSAxMjg7XFxuMzE3NzpcXHRcXG4zMTc4OlxcdFxcdGVyciA9IG90eDJfaW5pdF9yc3JjKHBkZXYsIHBmKTtcXG4zMTc5OlxcdFxcdGlmIChlcnIpXFxuMzE4MDpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX25ldGRldjtcXG4zMTgxOlxcdFxcbjMxODI6XFx0XFx0ZXJyID0gb3R4Ml9zZXRfcmVhbF9udW1fcXVldWVzKG5ldGRldiwgaHctXFx1MDAzZXR4X3F1ZXVlcywgaHctXFx1MDAzZXJ4X3F1ZXVlcyk7XFxuMzE4MzpcXHRcXHRpZiAoZXJyKVxcbjMxODQ6XFx0XFx0XFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XFxuMzE4NTpcXHRcXG4zMTg2OlxcdFxcdC8qIEFzc2lnbiBkZWZhdWx0IG1hYyBhZGRyZXNzICovXFxuMzE4NzpcXHRcXHRvdHgyX2dldF9tYWNfZnJvbV9hZihuZXRkZXYpO1xcbjMxODg6XFx0XFxuMzE4OTpcXHRcXHQvKiBEb24ndCBjaGVjayBmb3IgZXJyb3IuICBQcm9jZWVkIHdpdGhvdXQgcHRwICovXFxuMzE5MDpcXHRcXHRvdHgyX3B0cF9pbml0KHBmKTtcXG4zMTkxOlxcdFxcbjMxOTI6XFx0XFx0LyogTlBBJ3MgcG9vbCBpcyBhIHN0YWNrIHRvIHdoaWNoIFNXIGZyZWVzIGJ1ZmZlciBwb2ludGVycyB2aWEgQXVyYS5cXG4zMTkzOlxcdFxcdCAqIEhXIGFsbG9jYXRlcyBidWZmZXIgcG9pbnRlciBmcm9tIHN0YWNrIGFuZCB1c2VzIGl0IGZvciBETUEnaW5nXFxuMzE5NDpcXHRcXHQgKiBpbmdyZXNzIHBhY2tldC4gSW4gc29tZSBzY2VuYXJpb3MgSFcgY2FuIGZyZWUgYmFjayBhbGxvY2F0ZWQgYnVmZmVyXFxuMzE5NTpcXHRcXHQgKiBwb2ludGVycyB0byBwb29sLiBUaGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIFNXIHRvIG1haW50YWluIGFcXG4zMTk2OlxcdFxcdCAqIHBhcmFsbGVsIGxpc3Qgd2hlcmUgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIGJ1ZmZlciBwb2ludGVycyAoSU9WQXMpXFxuMzE5NzpcXHRcXHQgKiBnaXZlbiB0byBIVyBjYW4gYmUgc2F2ZWQgZm9yIGxhdGVyIHJlZmVyZW5jZS5cXG4zMTk4OlxcdFxcdCAqXFxuMzE5OTpcXHRcXHQgKiBTbyB0aGUgb25seSB3YXkgdG8gY29udmVydCBSeCBwYWNrZXQncyBidWZmZXIgYWRkcmVzcyBpcyB0byB1c2VcXG4zMjAwOlxcdFxcdCAqIElPTU1VJ3MgaW92YV90b19waHlzKCkgaGFuZGxlciB3aGljaCB0cmFuc2xhdGVzIHRoZSBhZGRyZXNzIGJ5XFxuMzIwMTpcXHRcXHQgKiB3YWxraW5nIHRocm91Z2ggdGhlIHRyYW5zbGF0aW9uIHRhYmxlcy5cXG4zMjAyOlxcdFxcdCAqL1xcbjMyMDM6XFx0XFx0cGYtXFx1MDAzZWlvbW11X2RvbWFpbiA9IGlvbW11X2dldF9kb21haW5fZm9yX2RldihkZXYpO1xcbjMyMDQ6XFx0XFxuMzIwNTpcXHRcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gKE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9JUF9DU1VNIHxcXG4zMjA2OlxcdFxcdFxcdFxcdCAgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfUlhIQVNIIHxcXG4zMjA3OlxcdFxcdFxcdFxcdCAgICAgICBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfFxcbjMyMDg6XFx0XFx0XFx0XFx0ICAgICAgIE5FVElGX0ZfR1NPX1VEUF9MNCk7XFxuMzIwOTpcXHRcXHRuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXM7XFxuMzIxMDpcXHRcXG4zMjExOlxcdFxcdGVyciA9IG90eDJfbWNhbV9mbG93X2luaXQocGYpO1xcbjMyMTI6XFx0XFx0aWYgKGVycilcXG4zMjEzOlxcdFxcdFxcdGdvdG8gZXJyX3B0cF9kZXN0cm95O1xcbjMyMTQ6XFx0XFxuMzIxNTpcXHRcXHRvdHgyX3NldF9od19jYXBhYmlsaXRpZXMocGYpO1xcbjMyMTY6XFx0XFxuMzIxNzpcXHRcXHRlcnIgPSBjbjEwa19tY3NfaW5pdChwZik7XFxuMzIxODpcXHRcXHRpZiAoZXJyKVxcbjMyMTk6XFx0XFx0XFx0Z290byBlcnJfZGVsX21jYW1fZW50cmllcztcXG4zMjIwOlxcdFxcbjMyMjE6XFx0XFx0aWYgKHBmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE9UWDJfRkxBR19OVFVQTEVfU1VQUE9SVClcXG4zMjIyOlxcdFxcdFxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjA4LjU3Mzg3ODMwNVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzY0Njk4NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIFJlc291cmNlIEluaXRpYWxpemF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRoZSBjb2RlJ3MganVtcGluZyBpbnRvIGFjdGlvbiwgY2FsbGluZyBgb3R4Ml9pbml0X3JzcmNgLiBNeSBpbW1lZGlhdGUgcmVhY3Rpb24/IExldCdzIGRpc3NlY3QgYG90eDJfaW5pdF9yc3JjYC4gSSdtIGdvaW5nIHRvIGJlIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZS4gSXMgaXQgbWVtb3J5LCBoYXJkd2FyZSBwZXJpcGhlcmFscywgbmV0d29yayBpbnRlcmZhY2VzLCBhbGwgb2YgdGhlIGFib3ZlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIG5hbWluZyBzdWdnZXN0cyByZXNvdXJjZSBpbml0aWFsaXphdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZS4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGBvdHgyX2luaXRfcnNyY2AgZnVuY3Rpb24uIEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgY29uZmxpY3RzIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMgaGFuZGxlZCBncmFjZWZ1bGx5PyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgcmVzb3VyY2Ugc2V0dXA/IE15IGNoZWNrbGlzdCBpbmNsdWRlcyB2ZXJpZnlpbmcgcHJvcGVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNpbmcsIGNoZWNraW5nIGZvciBwcm9wZXIgZXJyb3IgaGFuZGxpbmcsIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFsbCByZWxldmFudCBhc3BlY3RzIG9mIHRoZSByZXNvdXJjZSBpbml0aWFsaXphdGlvbiBhcmUgYmVpbmcgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uLCB0b28uIEFyZSB0aGVyZSBhbnkgZ2xvYmFsIHZhcmlhYmxlcyBiZWluZyBzZXQsIG9yIG90aGVyIG1vZHVsZXMgdGhhdCBhcmUgcHJlcmVxdWlzaXRlcz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGl0IHRpZXMgaW50byB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAzOSwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MTIuMzM4NTgwMTYyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMzYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMDM2OlxcdFxcbjMwMzc6XFx0XFx0bnVtX3ZlYyA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4zMDM4OlxcdFxcdGh3LVxcdTAwM2VpcnFfbmFtZSA9IGRldm1fa21hbGxvY19hcnJheShcXHUwMDI2aHctXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgbnVtX3ZlYywgTkFNRV9TSVpFLFxcbjMwMzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMKTtcXG4zMDQwOlxcdFxcdGlmICghaHctXFx1MDAzZWlycV9uYW1lKVxcbjMwNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA0MjpcXHRcXG4zMDQzOlxcdFxcdGh3LVxcdTAwM2VhZmZpbml0eV9tYXNrID0gZGV2bV9rY2FsbG9jKFxcdTAwMjZody1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBudW1fdmVjLFxcbjMwNDQ6XFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihjcHVtYXNrX3Zhcl90KSwgR0ZQX0tFUk5FTCk7XFxuMzA0NTpcXHRcXHRpZiAoIWh3LVxcdTAwM2VhZmZpbml0eV9tYXNrKVxcbjMwNDY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzA0NzpcXHRcXG4zMDQ4OlxcdFxcdC8qIE1hcCBDU1JzICovXFxuMzA0OTpcXHRcXHRwZi1cXHUwMDNlcmVnX2Jhc2UgPSBwY2ltX2lvbWFwKHBkZXYsIFBDSV9DRkdfUkVHX0JBUl9OVU0sIDApO1xcbjMwNTA6XFx0XFx0aWYgKCFwZi1cXHUwMDNlcmVnX2Jhc2UpIHtcXG4zMDUxOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVW5hYmxlIHRvIG1hcCBwaHlzaWNhbCBmdW5jdGlvbiBDU1JzLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuMzA1MjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMDUzOlxcdFxcdH1cXG4zMDU0OlxcdFxcbjMwNTU6XFx0XFx0ZXJyID0gb3R4Ml9jaGVja19wZl91c2FibGUocGYpO1xcbjMwNTY6XFx0XFx0aWYgKGVycilcXG4zMDU3OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzA1ODpcXHRcXG4zMDU5OlxcdFxcdGlmICghaXNfY24yMGsocGYtXFx1MDAzZXBkZXYpKVxcbjMwNjA6XFx0XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2LCBSVlVfUEZfSU5UX1ZFQ19DTlQsXFxuMzA2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgUlZVX1BGX0lOVF9WRUNfQ05ULCBQQ0lfSVJRX01TSVgpO1xcbjMwNjI6XFx0XFx0ZWxzZVxcbjMwNjM6XFx0XFx0XFx0ZXJyID0gcGNpX2FsbG9jX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2LCBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcXG4zMDY0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBSVlVfTUJPWF9QRl9JTlRfVkVDX0NOVCxcXG4zMDY1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICBQQ0lfSVJRX01TSVgpO1xcbjMwNjY6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4zMDY3OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEZhaWxlZCB0byBhbGxvYyAlZCBJUlEgdmVjdG9yc1xcXFxuXFxcIixcXG4zMDY4OlxcdFxcdFxcdFxcdF9fZnVuY19fLCBudW1fdmVjKTtcXG4zMDY5OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzA3MDpcXHRcXHR9XFxuMzA3MTpcXHRcXG4zMDcyOlxcdFxcdG90eDJfc2V0dXBfZGV2X2h3X3NldHRpbmdzKHBmKTtcXG4zMDczOlxcdFxcbjMwNzQ6XFx0XFx0aWYgKGlzX2NuMjBrKHBmLVxcdTAwM2VwZGV2KSlcXG4zMDc1OlxcdFxcdFxcdGNuMjBrX2luaXQocGYpO1xcbjMwNzY6XFx0XFx0ZWxzZVxcbjMwNzc6XFx0XFx0XFx0b3R4Ml9pbml0X2h3X29wcyhwZik7XFxuMzA3ODpcXHRcXG4zMDc5OlxcdFxcdC8qIEluaXQgUEYgXFx1MDAzYz1cXHUwMDNlIEFGIG1haWxib3ggc3R1ZmYgKi9cXG4zMDgwOlxcdFxcdGVyciA9IG90eDJfcGZhZl9tYm94X2luaXQocGYpO1xcbjMwODE6XFx0XFx0aWYgKGVycilcXG4zMDgyOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxX3ZlY3RvcnM7XFxuMzA4MzpcXHRcXG4zMDg0OlxcdFxcdC8qIFJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0ICovXFxuMzA4NTpcXHRcXHRlcnIgPSBvdHgyX3JlZ2lzdGVyX21ib3hfaW50cihwZiwgdHJ1ZSk7XFxuMzA4NjpcXHRcXHRpZiAoZXJyKVxcbjMwODc6XFx0XFx0XFx0Z290byBlcnJfbWJveF9kZXN0cm95O1xcbjMwODg6XFx0XFxuMzA4OTpcXHRcXHQvKiBSZXF1ZXN0IEFGIHRvIGF0dGFjaCBOUEEgYW5kIE5JWCBMRnMgdG8gdGhpcyBQRi5cXG4zMDkwOlxcdFxcdCAqIE5JWCBhbmQgTlBBIExGcyBhcmUgbmVlZGVkIGZvciB0aGlzIFBGIHRvIGZ1bmN0aW9uIGFzIGEgTklDLlxcbjMwOTE6XFx0XFx0ICovXFxuMzA5MjpcXHRcXHRlcnIgPSBvdHgyX2F0dGFjaF9ucGFfbml4KHBmKTtcXG4zMDkzOlxcdFxcdGlmIChlcnIpXFxuMzA5NDpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX21ib3hfaW50cjtcXG4zMDk1OlxcdFxcbjMwOTY6XFx0XFx0ZXJyID0gb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhwZik7XFxuMzA5NzpcXHRcXHRpZiAoZXJyKVxcbjMwOTg6XFx0XFx0XFx0Z290byBlcnJfZGV0YWNoX3JzcmM7XFxuMzA5OTpcXHRcXG4zMTAwOlxcdFxcdGVyciA9IGNuMTBrX2xtdHN0X2luaXQocGYpO1xcbjMxMDE6XFx0XFx0aWYgKGVycilcXG4zMTAyOlxcdFxcdFxcdGdvdG8gZXJyX2RldGFjaF9yc3JjO1xcbjMxMDM6XFx0XFxuMzEwNDpcXHRcXHRyZXR1cm4gMDtcXG4zMTA1OlxcdFxcbjMxMDY6XFx0ZXJyX2RldGFjaF9yc3JjOlxcbjMxMDc6XFx0XFx0aWYgKHBmLVxcdTAwM2Vody5sbXRfaW5mbylcXG4zMTA4OlxcdFxcdFxcdGZyZWVfcGVyY3B1KHBmLVxcdTAwM2Vody5sbXRfaW5mbyk7XFxuMzEwOTpcXHRcXHRpZiAodGVzdF9iaXQoQ04xMEtfTE1UU1QsIFxcdTAwMjZwZi1cXHUwMDNlaHcuY2FwX2ZsYWcpKVxcbjMxMTA6XFx0XFx0XFx0cW1lbV9mcmVlKHBmLVxcdTAwM2VkZXYsIHBmLVxcdTAwM2VkeW5jX2xtdCk7XFxuMzExMTpcXHRcXHRvdHgyX2RldGFjaF9yZXNvdXJjZXMoXFx1MDAyNnBmLVxcdTAwM2VtYm94KTtcXG4zMTEyOlxcdGVycl9kaXNhYmxlX21ib3hfaW50cjpcXG4zMTEzOlxcdFxcdG90eDJfZGlzYWJsZV9tYm94X2ludHIocGYpO1xcbjMxMTQ6XFx0ZXJyX21ib3hfZGVzdHJveTpcXG4zMTE1OlxcdFxcdG90eDJfcGZhZl9tYm94X2Rlc3Ryb3kocGYpO1xcbjMxMTY6XFx0ZXJyX2ZyZWVfaXJxX3ZlY3RvcnM6XFxuMzExNzpcXHRcXHRwY2lfZnJlZV9pcnFfdmVjdG9ycyhody1cXHUwMDNlcGRldik7XFxuMzExODpcXHRcXG4zMTE5OlxcdFxcdHJldHVybiBlcnI7XFxuMzEyMDpcXHR9XFxuMzEyMTpcXHRFWFBPUlRfU1lNQk9MKG90eDJfaW5pdF9yc3JjKTtcXG4zMTIyOlxcdFxcbjMxMjM6XFx0c3RhdGljIGludCBvdHgyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuMzEyNDpcXHR7XFxuMzEyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjMxMjY6XFx0XFx0aW50IGVyciwgcWNvdW50LCBxb3NfdHhxcztcXG4zMTI3OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuMzEyODpcXHRcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmO1xcbjMxMjk6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3O1xcbjMxMzA6XFx0XFxuMzEzMTpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuMzEzMjpcXHRcXHRpZiAoZXJyKSB7XFxuMzEzMzpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxcXFxuXFxcIik7XFxuMzEzNDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjMxMzU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNToxMi4zMzg3NTE4NjJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMTg0NTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gUmVzb3VyY2UgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgb3R4Ml9pbml0X3JzcmNgIGFuZCBpdHMgZmlyc3QgY2FsbCB0byBgb3R4Ml9jaGVja19wZl91c2FibGUocGYpYC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byB0aGF0IGNhbGwgYmVjYXVzZSBpdCdzIHRoZSBnYXRla2VlcGVyLCByaWdodD8gSXQncyBwcm9iYWJseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciBhIHBhcnRpY3VsYXIgcGh5c2ljYWwgZnVuY3Rpb24sIFwicGYsXCIgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHdlIGNhbiAqdXNlKiB3aXRoaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNyaXRlcmlhLiBMZXQncyBkaXZlIGludG8gdGhlIGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBXaGF0IGFyZSB0aGUgY2hlY2tzIGJlaW5nIHBlcmZvcm1lZD8gQXJlIHdlIGxvb2tpbmcgYXQgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLCBjb25maWd1cmF0aW9uIHN0YXRlLCBwZXJoYXBzIGV2ZW4gcmVzb3VyY2UgYXZhaWxhYmlsaXR5PyBMZXQncyBmaWd1cmUgb3V0IHdoYXQgbWFrZXMgYSBQRiBcInVzYWJsZVwiIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5ODIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE1Ljk0MDU5OTk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI4MDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdHgyX2NoZWNrX3BmX3VzYWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oPTEwODM9aW50IG90eDJfd3FfaW5pdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDoxMDg0OmludCBvdHgyX2NoZWNrX3BmX3VzYWJsZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xMDg1LWludCBvdHgyX3BmYWZfbWJveF9pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYz0yOTQ0PWludCBvdHgyX3dxX2luaXQoc3RydWN0IG90eDJfbmljICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjk1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjI5NTU6aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMtMjk1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jPTMwMzE9aW50IG90eDJfaW5pdF9yc3JjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zMDU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM6MzA1NTpcXHRlcnIgPSBvdHgyX2NoZWNrX3BmX3VzYWJsZShwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zMDU2LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE1Ljk5NDg4ODE5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjUzNzg4Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgb3R4Ml9jaGVja19wZl91c2FibGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBjb2RlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBgb3R4Ml9jaGVja19wZl91c2FibGVgLiBJIHN1c3BlY3QgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGluIGRldGVybWluaW5nIHRoZSB2aWFiaWxpdHkgb2YgYSBwaHlzaWNhbCBmdW5jdGlvbiAoUEYpIG9uIHRoaXMgc3lzdGVtLiBJdCBwcm9iYWJseSBjaGVja3MgZm9yIGEgdmFyaWV0eSBvZiBjb25kaXRpb25zIGJlZm9yZSBhbGxvd2luZyB0aGF0IFBGIHRvIGJlIGJyb3VnaHQgb25saW5lIG9yIHVzZWQgaW4gc29tZSBjYXBhY2l0eS4gSXMgaXQgZGVhbGluZyB3aXRoIHJlc291cmNlIGFsbG9jYXRpb24sIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIG9wdGlvbnM/IFRoZSBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBpdOKAmXMgYSBjaGVjaywgbWFraW5nIG1lIGFudGljaXBhdGUgYSBib29sZWFuIHJldHVybiBvciBzb21lIGZvcm0gb2Ygc3RhdHVzIGNvZGUuIFRoZSBcIm90eDJcIiBwcmVmaXggaXMgYSBjbHVlIHRvIHdoaWNoIHBsYXRmb3JtIG9yIGhhcmR3YXJlIHRoaXMgcmVsYXRlcyB0bywgd2hpY2ggc2hvdWxkIGhlbHAgdG8gcXVpY2tseSBjYXRlZ29yaXplIHRoZSBmdW5jdGlvbidzIHNjb3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc1NywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjE5LjY0ODY4MDkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5NTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5NTU6XFx0aW50IG90eDJfY2hlY2tfcGZfdXNhYmxlKHN0cnVjdCBvdHgyX25pYyAqbmljKVxcbjI5NTY6XFx0e1xcbjI5NTc6XFx0XFx0dTY0IHJldjtcXG4yOTU4OlxcdFxcbjI5NTk6XFx0XFx0cmV2ID0gb3R4Ml9yZWFkNjQobmljLCBSVlVfUEZfQkxPQ0tfQUREUlhfRElTQyhCTEtBRERSX1JWVU0pKTtcXG4yOTYwOlxcdFxcdHJldiA9IChyZXYgXFx1MDAzZVxcdTAwM2UgMTIpIFxcdTAwMjYgMHhGRjtcXG4yOTYxOlxcdFxcdC8qIENoZWNrIGlmIEFGIGhhcyBzZXR1cCByZXZpc2lvbiBmb3IgUlZVTSBibG9jayxcXG4yOTYyOlxcdFxcdCAqIG90aGVyd2lzZSB0aGlzIGRyaXZlciBwcm9iZSBzaG91bGQgYmUgZGVmZXJyZWRcXG4yOTYzOlxcdFxcdCAqIHVudGlsIEFGIGRyaXZlciBjb21lcyB1cC5cXG4yOTY0OlxcdFxcdCAqL1xcbjI5NjU6XFx0XFx0aWYgKCFyZXYpIHtcXG4yOTY2OlxcdFxcdFxcdGRldl93YXJuKG5pYy1cXHUwMDNlZGV2LFxcbjI5Njc6XFx0XFx0XFx0XFx0IFxcXCJBRiBpcyBub3QgaW5pdGlhbGl6ZWQsIGRlZmVycmluZyBwcm9iZVxcXFxuXFxcIik7XFxuMjk2ODpcXHRcXHRcXHRyZXR1cm4gLUVQUk9CRV9ERUZFUjtcXG4yOTY5OlxcdFxcdH1cXG4yOTcwOlxcdFxcdHJldHVybiAwO1xcbjI5NzE6XFx0fVxcbjI5NzI6XFx0XFxuMjk3MzpcXHRpbnQgb3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmKVxcbjI5NzQ6XFx0e1xcbjI5NzU6XFx0XFx0c3RydWN0IG90eDJfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4yOTc2OlxcdFxcdGludCBudW1fdmVjLCBlcnI7XFxuMjk3NzpcXHRcXG4yOTc4OlxcdFxcdC8qIE5QQSBpbnRlcnJ1cHRzIGFyZSBpbm90IHJlZ2lzdGVyZWQsIHNvIGFsbG9jIG9ubHlcXG4yOTc5OlxcdFxcdCAqIHVwdG8gTklYIHZlY3RvciBvZmZzZXQuXFxuMjk4MDpcXHRcXHQgKi9cXG4yOTgxOlxcdFxcdG51bV92ZWMgPSBody1cXHUwMDNlbml4X21zaXhvZmY7XFxuMjk4MjpcXHRcXHRudW1fdmVjICs9IE5JWF9MRl9DSU5UX1ZFQ19TVEFSVCArIGh3LVxcdTAwM2VtYXhfcXVldWVzO1xcbjI5ODM6XFx0XFxuMjk4NDpcXHRcXHRvdHgyX2Rpc2FibGVfbWJveF9pbnRyKHBmKTtcXG4yOTg1OlxcdFxcdHBjaV9mcmVlX2lycV92ZWN0b3JzKGh3LVxcdTAwM2VwZGV2KTtcXG4yOTg2OlxcdFxcdGVyciA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhody1cXHUwMDNlcGRldiwgbnVtX3ZlYywgbnVtX3ZlYywgUENJX0lSUV9NU0lYKTtcXG4yOTg3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuMjk4ODpcXHRcXHRcXHRkZXZfZXJyKHBmLVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIHJlYWxsb2MgJWQgSVJRIHZlY3RvcnNcXFxcblxcXCIsXFxuMjk4OTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgbnVtX3ZlYyk7XFxuMjk5MDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjI5OTE6XFx0XFx0fVxcbjI5OTI6XFx0XFxuMjk5MzpcXHRcXHRyZXR1cm4gb3R4Ml9yZWdpc3Rlcl9tYm94X2ludHIocGYsIGZhbHNlKTtcXG4yOTk0OlxcdH1cXG4yOTk1OlxcdEVYUE9SVF9TWU1CT0wob3R4Ml9yZWFsbG9jX21zaXhfdmVjdG9ycyk7XFxuMjk5NjpcXHRcXG4yOTk3OlxcdHN0YXRpYyBpbnQgb3R4Ml9zcmlvdl92ZmNmZ19pbml0KHN0cnVjdCBvdHgyX25pYyAqcGYpXFxuMjk5ODpcXHR7XFxuMjk5OTpcXHRcXHRpbnQgaTtcXG4zMDAwOlxcdFxcbjMwMDE6XFx0XFx0cGYtXFx1MDAzZXZmX2NvbmZpZ3MgPSBkZXZtX2tjYWxsb2MocGYtXFx1MDAzZWRldiwgcGYtXFx1MDAzZXRvdGFsX3ZmcyxcXG4zMDAyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3Qgb3R4Ml92Zl9jb25maWcpLFxcbjMwMDM6XFx0XFx0XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxuMzAwNDpcXHRcXHRpZiAoIXBmLVxcdTAwM2V2Zl9jb25maWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yN1QwNjoyNToxOS42NDg4NDI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzYwNDk3MzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9jdGVvbiBUWDIgUEYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGBvdHgyX2NoZWNrX3BmX3VzYWJsZWAgZnVuY3Rpb24gcmVhZHMgYSBoYXJkd2FyZSByZWdpc3RlciwgYFJWVV9QRl9CTE9DS19BRERSWF9ESVNDYCwgd2hpY2ggaW5mbHVlbmNlcyB0aGUgcHJvYmUgcHJvY2Vzcy4gSW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQsIHRoaXMgcmVhZCB3aWxsIGxpa2VseSByZXR1cm4gMCBvciAweEZGRkZGRkZGIGluaXRpYWxseSwgYnV0IHdlICpjYW4qIGluamVjdCBhIG5vbi16ZXJvIHZhbHVlIHRvIGJ5cGFzcyB0aGUgZGVmZXJyYWwsIHdoaWNoIGlzIGtleSB0byB0cmlnZ2VyaW5nIHRoZSBwcm9ibGVtYXRpYyBjb2RlIHBhdGguIFRoZSBjb2RlIHRoZW4gc2V0cyB1cCBhIG1haWxib3ggdXNpbmcgYG90eDJfcGZhZl9tYm94X2luaXRgIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEFkbWluIEZ1bmN0aW9uIChBRikgZHJpdmVyLiBUaGUgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBBRiBkcml2ZXIsIGNvbnRyb2xsZWQgYnkgYENPTkZJR19PQ1RFT05UWDJfQUZgLCBpcyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kuIElmIHRoZSBBRiBkcml2ZXIgaXNuJ3QgbG9hZGVkIG9yIGZ1bmN0aW9uYWwsIHRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGxpa2VseSB0byBmYWlsLCBsZWFkaW5nIHRvIGRpZmZlcmVudCBleGVjdXRpb24gcGF0aHMgdGhhdCBhcmUgd29ydGggZXhwbG9yaW5nLiBIb3dldmVyLCBldmVuIGlmIHRoZSBBRiBkcml2ZXIgaXMgbm90IHBlcmZlY3RseSBmdW5jdGlvbmFsLCBTeXprYWxsZXIgKnNob3VsZCogc3RpbGwgYmUgYWJsZSB0byBmdXp6IHRoZSBQRiBkcml2ZXIgaW5kZXBlbmRlbnRseSBpZiB3ZSBjYW4gbW9jayB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIgcmVhZHMuXG5cblRoZSBtYWlsYm94IGludGVyYWN0aW9uIGlzIGludGVyZXN0aW5nOyBpdCdzIGEgbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb246IFBGIHdyaXRlcyB0byBhIG1lbW9yeSByZWdpb24gYW5kIHJpbmdzIGEgZG9vcmJlbGwuIFRoZSBBRiBkcml2ZXIgdGhlbiBoYW5kbGVzIHRoZSBpbnRlcnJ1cHQuIFRoaXMgaW50cm9kdWNlcyBhIHBvc3NpYmxlIGludGVyYWN0aW9uIHN1cmZhY2UgaWYgKmJvdGgqIGRyaXZlcnMgKFBGIGFuZCBBRikgYXJlIGJlaW5nIGZ1enplZC4gVGhhdCdzIGdvb2QgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmU6IG1vcmUgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG90eDJfZnJlZV9zcV9yZXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBvciBkdXJpbmcgcmVzb3VyY2UgZGVhbGxvY2F0aW9uLiBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AgaXMgY2FsbGVkIGJ5IGBvdHgyX29wZW5gLCB3aGljaCBpcywgaW4gdHVybiwgY2FsbGVkIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAgKGUuZy4sIGBpcCBsaW5rIHNldCBkZXYgZXRoWCB1cGApLiBTbywgY2FuIHdlIGJyaW5nIHVwIHRoZSBuZXRkZXY/IFllcywgaWYgYHByb2JlYCBzdWNjZWVkcyBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIGJyaW5naW5nIHRoZSBpbnRlcmZhY2UgdXAgd2lsbCBpbnZva2UgYG90eDJfb3BlbmAsIHdoaWNoIHRoZW4gY2FsbHMgYG90eDJfaW5pdF9od19yZXNvdXJjZXNgLiBJZiB0aGF0IGluaXRpYWxpemF0aW9uIGZhaWxzLCB0aGUgcGF0aCBub3cgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgLCB0aGUgZXhhY3QgcGxhY2Ugd2hlcmUgdGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYSBtZW1vcnkgbGVhay4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgbWFrZXMgaXQgYW4gZXhjZWxsZW50IHRhcmdldCBiZWNhdXNlIGJ1ZyBmaXhlcyBhcmUgaW1wb3J0YW50IHRvIGZ1enouIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIGBDT05GSUdfT0NURU9OVFgyX1BGYCBhbmQgYENPTkZJR19PQ1RFT05UWDJfQUZgLiBXaGlsZSB0aGUgQUYgbWlnaHQgYmUgXCJuZWVkZWRcIiwgd2Ugd2lsbCB0cnkgdG8gbWFrZSB0aGlzIGhhcHBlbiBpbmRlcGVuZGVudGx5LiBOb3csIGxldCdzIGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODI2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MjguNDA5MzQyNDYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkyMDU1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiT0NURU9OVFgyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo2OmNvbmZpZyBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjk6Y29uZmlnIE9DVEVPTlRYMl9BRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgT2N0ZW9uVFgyIFJWVSBBZG1pbiBGdW5jdGlvbiBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzoxMTpcXHRzZWxlY3QgT0NURU9OVFgyX01CT1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEyLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz0yMj1jb25maWcgTkRDX0RJU19EWU5BTUlDX0NBQ0hJTkdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTIzLVxcdGJvb2wgXFxcIkRpc2FibGUgY2FjaGluZyBvZiBkeW5hbWljIGVudHJpZXMgaW4gTkRDXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfQUZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTI1LVxcdGRlZmF1bHQgblxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjMxOmNvbmZpZyBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzM6XFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzo0NTpjb25maWcgT0NURU9OVFgyX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBPY3Rlb25UWDIgTklDIFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6NDc6XFx0ZGVwZW5kcyBvbiBPQ1RFT05UWDJfUEZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTQ4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9NTE9Y29uZmlnIFJWVV9FU1dJVENIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01Mi1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBSVlUgRS1Td2l0Y2ggc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gT0NURU9OVFgyX1BGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy01NC1cXHRkZWZhdWx0IG1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT0NURU9OVFgyX01CT1gpICs9IGFmL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9BRikgKz0gYWYvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX1BGKSArPSBuaWMvXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9NYWtlZmlsZT02PWNjZmxhZ3MteSArPSAtSSQoc3JjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9NQk9YKSArPSBydnVfbWJveC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfT0NURU9OVFgyX0FGKSArPSBydnVfYWYub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL01ha2VmaWxlLTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYz02Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2d4X2lkX3RhYmxlW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmM6Njc6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX0NHWCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy02OC1cXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfQ04xMEtfUlBNLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTUtIC8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4Lmg6MTY6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfQ0dYXFx0XFx0MHhBMDU5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY2d4LmgtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MTU0PURFRklORV9TSE9XX0FUVFJJQlVURShucGNfbWNhbV9sYXlvdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0xNTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE1NjojZGVmaW5lIF9fT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX0ZPUFMoX19uYW1lKVxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTU3LXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fbmFtZSAjIyBfZm9wcyA9IHtcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoxNjU6I2RlZmluZSBERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShfX25hbWUsIF9fc2l6ZSlcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTE2Ni1zdGF0aWMgaW50IF9fbmFtZSAjIyBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcwLX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjE3MTpfX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9GT1BTKF9fbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmMtMTcyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jPTE4MT1zdGF0aWMgaW50IG5wY19tY2FtX2RzdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0Mi0jZGVmaW5lIFRPVEFMX1NaIChNQVhfTlVNX0JBTktTICogTUFYX05VTV9TVUJfQkFOS1MgKiBNQVhfU1VCQkFOS19ERVBUSCAqIDY0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYzoyNDM6REVGSU5FX09DVEVPTlRYMl9ERUJVR0ZTX0FUVFJJQlVURV9XSVRIX1NJWkUobnBjX21jYW1fZHN0YXRzLCBUT1RBTF9TWik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jLTI0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jbjIway9kZWJ1Z2ZzLmM9MjQ1PXN0YXRpYyBpbnQgbnBjX21jYW1fbWlzbWF0Y2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODQtLyogXFxcIiV1XFxcXHQlZFxcXFx0JXVcXFxcblxcXCIgbmVlZHMgbGVzcyB0aGFuIDY0IGNoYXJhY3RlcnMgdG8gcHJpbnQuICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvY24yMGsvZGVidWdmcy5jOjI4NTpERUZJTkVfT0NURU9OVFgyX0RFQlVHRlNfQVRUUklCVVRFX1dJVEhfU0laRShucGNfbWNhbV9taXNtYXRjaCwgVE9UQUxfU1opO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NuMjBrL2RlYnVnZnMuYy0yODYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzoyMTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQXFx0XFx0XFx0MHhBMDBDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtMjItI2RlZmluZSBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk4eHhfUFRQXFx0XFx0MHhCMTAwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy0yNy0jZGVmaW5lIFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE9fUFRQXFx0MHhCNjAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6Mjg6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JTVFxcdFxcdFxcdDB4QTA4NVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTI5LSNkZWZpbmUgUENJX0RFVklEX0NOMTBLX1BUUFxcdFxcdFxcdDB4QTA5RVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM9NTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwdHBfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTA6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTkxLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTItXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTh4eF9QVFApIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmM6NTkzOlxcdHsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUFRQLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5NC1cXHRcXHRcXHQgUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNTk1LVxcdFxcdFxcdCBQQ0lfU1VCU1lTX0RFVklEX09DVFgyXzk2WFhfUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjU5NjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy01OTctXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTU5OC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NVhYX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo1OTk6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjAwLVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDEtXFx0XFx0XFx0IFBDSV9TVUJTWVNfREVWSURfT0NUWDJfOTVYWE5fUFRQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jOjYwMjpcXHR7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1BUUCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYy02MDMtXFx0XFx0XFx0IFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3B0cC5jLTYwNC1cXHRcXHRcXHQgUENJX1NVQlNZU19ERVZJRF9PQ1RYMl85NU1NX1BUUCkgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9wdHAuYzo2MDU6XFx0eyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9QVFAsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcHRwLmMtNjA2LVxcdFxcdFxcdCBQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydnVfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo0NTpcXHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTQ2LVxcdHsgMCwgfSAgLyogZW5kIG9mIHRhYmxlICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz05Mjc9c3RhdGljIHZvaWQgcnZ1X2dldF9sYmtfYnVmc2l6ZShzdHJ1Y3QgcnZ1ICpydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy05MzMtXFx0cGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jOjkzNDpcXHRcXHRcXHQgICAgICBQQ0lfREVWSURfT0NURU9OVFgyX0xCSywgcGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtOTM1LVxcdGlmICghcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTM0NDI9aW50IHJ2dV9nZXRfbnVtX2xia19jaGFucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzozNDQ4OlxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9MQkssXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtMzQ0OS1cXHRcXHRcXHQgICAgICBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5oLTIzLS8qIFBDSSBkZXZpY2UgSURzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjQ6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGXFx0XFx0MHhBMDY1XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1Lmg6MjU6I2RlZmluZVxcdFBDSV9ERVZJRF9PQ1RFT05UWDJfTEJLXFx0XFx0XFx0MHhBMDYxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmgtMjYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYz0zODM9c3RhdGljIHZvaWQgcnZ1X2xia19zZXRfY2hhbm5lbHMoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2NuMTBrLmMtNDA2LVxcdFxcdHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfY24xMGsuYzo0MDc6XFx0XFx0XFx0XFx0ICAgICAgUENJX0RFVklEX09DVEVPTlRYMl9MQkssIHBkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9jbjEway5jLTQwOC1cXHRcXHRpZiAoIXBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI4MzI9c3RhdGljIGludCBjZ3hfcHJpbnRfc3RhdHMoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjg0Mi1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI4NDQtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMjk2MS1cXHRydnUgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzoyOTYyOlxcdFxcdFxcdFxcdFxcdCAgICAgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfQUYsIE5VTEwpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI5NjMtXFx0aWYgKCFydnUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTMwMTA9c3RhdGljIGludCBjZ3hfcHJpbnRfZndkYXRhKHN0cnVjdCBzZXFfZmlsZSAqcywgaW50IGxtYWNfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMTgtXFx0cnZ1ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6MzAxOTpcXHRcXHRcXHRcXHRcXHQgICAgIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGLCBOVUxMKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDIwLVxcdGlmICghcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX09DVEVPTlRYMl9QRikgKz0gcnZ1X25pY3BmLm8gb3R4Ml9wdHAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19PQ1RFT05UWDJfVkYpICs9IHJ2dV9uaWN2Zi5vIG90eDJfcHRwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGUtOC1vYmotJChDT05GSUdfUlZVX0VTV0lUQ0gpICs9IHJ2dV9yZXAub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDItLyogUENJIGRldmljZSBJRHMgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0MzojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1BGICAgICAgICAgICAgICAweEEwNjNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo0NDojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX1ZGXFx0XFx0MHhBMDY0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NDU6I2RlZmluZSBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGXFx0XFx0MHhBMEY4XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNDYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo1MTojZGVmaW5lIFBDSV9ERVZJRF9PQ1RFT05UWDJfU0RQX1JFUFxcdFxcdDB4QTBGN1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTUyLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NTk3PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX2xia3ZmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oLTU5OC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6NTk5OlxcdHJldHVybiAocGRldi1cXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJRF9PQ1RFT05UWDJfUlZVX0FGVkYpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjAwLVxcdFxcdChwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklEX1JWVV9SRVApO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vdHgyX3NkcF9yZXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE2LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaDo2MTc6XFx0cmV0dXJuIHBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSURfT0NURU9OVFgyX1NEUF9SRVA7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtNjE4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG90eDJfcGZfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jOjM3OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9SVlVfUEYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYy0zOC1cXHR7IDAsIH0gIC8qIGVuZCBvZiB0YWJsZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdmYuYz0yMj1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3R4Ml92Zl9pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjM6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9BRlZGKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmM6MjQ6XFx0eyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ0FWSVVNLCBQQ0lfREVWSURfT0NURU9OVFgyX1JWVV9WRikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml92Zi5jOjI1OlxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NBVklVTSwgUENJX0RFVklEX09DVEVPTlRYMl9TRFBfUkVQKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3ZmLmMtMjYtXFx0eyB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI3VDA2OjI1OjI4LjczODU1MjY0M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDEwMTc0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT2N0ZW9uVFgyIE5JQyBEcml2ZXIgZm9yIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgdGhlIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGNvbmZpZ3VyYXRpb25zIGBPQ1RFT05UWDJfUEZgIGFuZCBgT0NURU9OVFgyX0FGYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGZ1bmN0aW9uIGBvdHgyX2ZyZWVfc3FfcmVzYCBhbmQgdGhlIHJlbGF0ZWQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLiBJIHNlZSB0aGF0IGBvdHgyX2ZyZWVfc3FfcmVzYCBpcyBzdGF0aWMsIHdoaWNoIG1ha2VzIG1lIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBpdCdzIGlubGluZWQgLSBnb29kIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBjb25zaWRlciBpdCBhcyBhIHN0YW5kYWxvbmUgZnVuY3Rpb24gZm9yIGZ1enppbmcuXG5cblJpZ2h0LCBpdCdzIGNhbGxlZCBmcm9tIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBhbmQgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgLCBzbyBpdCdzIHJlYWNoYWJsZS4gSSdtIGdvaW5nIHRvIGFkZCBhbGwgdGhyZWUgZnVuY3Rpb25zLCBgb3R4Ml9pbml0X2h3X3Jlc291cmNlc2AsIGBvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzYCwgYW5kIGBvdHgyX2ZyZWVfc3FfcmVzYCwgdG8gbXkgbGlzdC5cblxuTm93LCBsZXQncyBzZWUsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlbGV2YW50PyBUaGUgYFBDSWAgY29uZmlnIGlzIHJlcXVpcmVkIGZvciBQQ0kgZHJpdmVycywgd2hpY2ggdGhpcyBjbGVhcmx5IGlzLCBidXQgdGhhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gaXQncyB1bmxpa2VseSB0byBiZSB0aGUgcHJvYmxlbSBoZXJlLiBOb3csIEkgc2hvdWxkIG1ha2UgZG91YmxlLXN1cmUgdGhhdCBgb3R4Ml9mcmVlX3NxX3Jlc2AgaXMgcmVhY2hhYmxlLiBMZXQgbWUgc2VlLi4uIElmIGBvdHgyX2luaXRfaHdfcmVzb3VyY2VzYCBmYWlscywgaXQgY2FsbHMgYG90eDJfZnJlZV9zcV9yZXNgIHRvIGNsZWFuIHVwLiBJZiBpdCBzdWNjZWVkcywgYG90eDJfZnJlZV9od19yZXNvdXJjZXNgIHdpbGwgY2FsbCBpdCB3aGVuIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCBzbyB3ZSBkZWZpbml0ZWx5IGhpdCB0aGF0IGNvZGVwYXRoIHRoZW4uXG5cbkFscmlnaHQsIHRoYXQncyBlbm91Z2ggdG8gY29udmluY2UgbWUgdGhhdCB0aGUgZXJyb3IgcGF0aHMgaW4gdGhpcyBkcml2ZXIsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93biBvZiB0aGUgUW9TIHF1ZXVlcywgcmVwcmVzZW50IGEgdmFsaWQgYXJlYSBmb3IgZnV6emluZy4gSSdsbCBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE4NCwiT3V0cHV0VG9rZW5zIjoxNzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjdUMDY6MjU6MzcuMTQ4NzMwMDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODE4OTYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DVEVPTlRYMl9QRlwiLFxuICAgIFwiT0NURU9OVFgyX0FGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R4Ml9mcmVlX3NxX3Jlc1wiLFxuICAgIFwib3R4Ml9pbml0X2h3X3Jlc291cmNlc1wiLFxuICAgIFwib3R4Ml9mcmVlX2h3X3Jlc291cmNlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2Ygb3R4Ml9pbml0X2h3X3Jlc291cmNlcyBhbmQgaW4gb3R4Ml9mcmVlX2h3X3Jlc291cmNlcyBieSBjb3JyZWN0bHkgZnJlZWluZyBzcS1cXHUwMDNldGltZXN0YW1wcyBhbmQgc3EtXFx1MDAzZXNxYl9wdHJzIGZvciB1bnVzZWQgUW9TIHF1ZXVlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIHRlYXJkb3duIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSB2UENJLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsm79d[1] Phase: Succeeded StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 06:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 06:25:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2] Phase: Succeeded StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 06:25:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-27 06:25:49 +0000 UTC FinishedAt: 2026-06-27 06:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowsm79d/series-workflowsm79d-convert-artifact-3581022103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-27 06:25:59 +0000 UTC FinishedAt: 2026-06-27 06:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-27 06:25:59 +0000 UTC FinishedAt: 2026-06-27 06:46:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ebe91455-fb9b-4bff-b011-c8148152eb55,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-workflowsm79d/series-workflowsm79d-convert-artifact-3581022103/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": "e2a373fd-fc3f-4ae6-b3e9-29ceba06969b", "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-workflowsm79d/series-workflowsm79d-build-action-2644823277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-27 06:25:59 +0000 UTC FinishedAt: 2026-06-27 06:46:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ebe91455-fb9b-4bff-b011-c8148152eb55,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-workflowsm79d/series-workflowsm79d-convert-artifact-3581022103/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": "e2a373fd-fc3f-4ae6-b3e9-29ceba06969b", "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-workflowsm79d/series-workflowsm79d-build-action-2644823277/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-27 06:46:13 +0000 UTC FinishedAt: 2026-06-27 06:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-27 06:46:13 +0000 UTC FinishedAt: 2026-06-27 06:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-27 06:46:13 +0000 UTC FinishedAt: 2026-06-27 06:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-27 06:46:13 +0000 UTC FinishedAt: 2026-06-27 06:46:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowsm79d/series-workflowsm79d-convert-artifact-1182851526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-27 06:46:24 +0000 UTC FinishedAt: 2026-06-27 06:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-27 06:46:24 +0000 UTC FinishedAt: 2026-06-27 06:48:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2a373fd-fc3f-4ae6-b3e9-29ceba06969b,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-workflowsm79d/series-workflowsm79d-build-action-2644823277/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-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-27 06:48:39 +0000 UTC FinishedAt: 2026-06-27 06:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-27 06:48:39 +0000 UTC FinishedAt: 2026-06-27 06:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-27 06:48:39 +0000 UTC FinishedAt: 2026-06-27 07:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-27 06:48:39 +0000 UTC FinishedAt: 2026-06-27 07:10:08 +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:*ebe91455-fb9b-4bff-b011-c8148152eb55,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-workflowsm79d/series-workflowsm79d-convert-artifact-1182851526/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": "6f928519-46d9-4c87-9010-638373ce1092", "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-workflowsm79d/series-workflowsm79d-build-action-2045601034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-27 06:48:39 +0000 UTC FinishedAt: 2026-06-27 07:09:58 +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:*ebe91455-fb9b-4bff-b011-c8148152eb55,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-workflowsm79d/series-workflowsm79d-convert-artifact-1182851526/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": "6f928519-46d9-4c87-9010-638373ce1092", "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-workflowsm79d/series-workflowsm79d-build-action-2045601034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-27 07:10:08 +0000 UTC FinishedAt: 2026-06-27 07:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-27 07:10:08 +0000 UTC FinishedAt: 2026-06-27 07:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-27 07:10:08 +0000 UTC FinishedAt: 2026-06-27 07:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-27 07:10:08 +0000 UTC FinishedAt: 2026-06-27 07:12:17 +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:*6f928519-46d9-4c87-9010-638373ce1092,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-workflowsm79d/series-workflowsm79d-build-action-2045601034/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-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +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":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"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:*e2a373fd-fc3f-4ae6-b3e9-29ceba06969b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f928519-46d9-4c87-9010-638373ce1092,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-workflowsm79d/series-workflowsm79d-build-action-2644823277/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-workflowsm79d/series-workflowsm79d-build-action-2045601034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:12:34 +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":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"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-workflowsm79d/series-workflowsm79d-convert-artifact-1960974731/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-27 07:12:26 +0000 UTC FinishedAt: 2026-06-27 07:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-27 07:12:27 +0000 UTC FinishedAt: 2026-06-27 07:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-27 07:12:37 +0000 UTC FinishedAt: 2026-06-27 07:15:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsm79d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otx2_free_sq_res","otx2_init_hw_resources","otx2_free_hw_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c75597caada080effbfbc0a7fb10dc2a3bb543ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCTEONTX2_PF","OCTEONTX2_AF"],"series_id":"3426495d-296b-4329-84ca-14aa8d79ca85","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-27 07:12:37 +0000 UTC FinishedAt: 2026-06-27 07:14:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e2a373fd-fc3f-4ae6-b3e9-29ceba06969b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6f928519-46d9-4c87-9010-638373ce1092,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-workflowsm79d/series-workflowsm79d-build-action-2644823277/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-workflowsm79d/series-workflowsm79d-build-action-2045601034/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-workflowsm79d/series-workflowsm79d-convert-artifact-1960974731/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,}