Name: series-workflowqp6dc Phase: Succeeded StartedAt: 2026-07-15 05:57:53 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[0] Phase: Succeeded StartedAt: 2026-07-15 05:57:53 +0000 UTC FinishedAt: 2026-07-15 06:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[0].run-triage Phase: Succeeded StartedAt: 2026-07-15 05:57:53 +0000 UTC FinishedAt: 2026-07-15 06:27:30 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "8a468ff4-aad6-441d-9ab1-6d636bccb9e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_pcs_an_restart", "macb_mac_config", "macb_mac_select_pcs", "macb_mii_probe", "macb_init_dflt", "init_reset_optional" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX3Bjc19hbl9yZXN0YXJ0JiMzNDssCiAgICAmIzM0O21hY2JfbWFjX2NvbmZpZyYjMzQ7LAogICAgJiMzNDttYWNiX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O21hY2JfbWlpX3Byb2JlJiMzNDssCiAgICAmIzM0O21hY2JfaW5pdF9kZmx0JiMzNDssCiAgICAmIzM0O2luaXRfcmVzZXRfb3B0aW9uYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCBpbnRlcmZhY2UgbW9kZSB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgbW9kaWZpZXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcyAodmlhIHBoeWxpbmspLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHdoaWNoIGVtdWxhdGVzIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzKSBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHZpYSB0aGUgUENJIHdyYXBwZXIgKE1BQ0JfUENJKS4gU2luY2UgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYywgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzYzg5MTY3MzM5ZWE0MGE5NTg4OGYxNThmYWU4ZmU0MWJjZjRjMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjoyNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggZDM5NGYxZjQzYjY4NWUuLjI4NGEzYjAzZjhjNzc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTU4Myw3ICYjNDM7NTgzLDEzIEBAIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuIFxuIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4ge1xuLVx0LyogTm90IHN1cHBvcnRlZCAqL1xuJiM0MztcdHN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtYWNiLCBwaHlsaW5rX3NnbWlpX3Bjcyk7XG4mIzQzO1x0dTMyIG9sZCwgbmV3O1xuJiM0MztcbiYjNDM7XHRvbGQgPSBnZW1fcmVhZGwoYnAsIFBDU0NOVFJMKTtcbiYjNDM7XHRuZXcgPSBvbGQgfCBCTUNSX0FOUkVTVEFSVDtcbiYjNDM7XHRpZiAob2xkICE9IG5ldylcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIFBDU0NOVFJMLCBuZXcpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hY2JfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbkBAIC03NTAsNyAmIzQzOzc1Niw5IEBAIHN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdGN0cmwgXHUwMDI2PSB+KEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCkpO1xuIFx0XHRuY3IgXHUwMDI2PSB+R0VNX0JJVChFTkFCTEVfSFNfTUFDKTtcbiBcbi1cdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuJiM0MztcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuIFx0XHRcdGN0cmwgfD0gR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKTtcbiBcdFx0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKSB7XG4gXHRcdFx0Y3RybCB8PSBHRU1fQklUKFBDU1NFTCk7XG5AQCAtOTU3LDcgJiM0Mzs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFxuIFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4gXHRcdHJldHVybiBcdTAwMjZicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3M7XG4tXHRlbHNlIGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuJiM0MztcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4mIzQzO1x0ICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiBcdFx0cmV0dXJuIFx1MDAyNmJwLVx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0xMDI1LDEzICYjNDM7MTAzNCwxNSBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3Bjc19vcHM7XG4mIzQzO1x0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7XG4gXHRicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3VzeF9wY3Nfb3BzO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZWRldjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiYjNDM7XHQgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcucG9sbF9maXhlZF9zdGF0ZSA9IHRydWU7XG4gXHRcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmdldF9maXhlZF9zdGF0ZSA9IG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZTtcbiBcdFx0LyogVGhlIFBDU0FVVE9ORUcgYml0IGluIFBDU0NOVFJMIGlzIG9uIG91dCBvZiByZXNldC4gU2V0dGluZ1xuQEAgLTEwNjAsOSAmIzQzOzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4tXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUENTKVxuJiM0MztcdFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19QQ1MpIHtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4mIzQzO1x0XHRcdFx0ICBicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiBcdFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpIHtcbiBcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuQEAgLTQ5MzEsNyAmIzQzOzQ5NDUsOSBAQCBzdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHQvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqL1xuIFx0dmFsID0gbWFjYl9tZGNfY2xrX2RpdihicCk7XG4gXHR2YWwgfD0gbWFjYl9kYncoYnApO1xuLVx0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4mIzQzO1x0XHR2YWwgfD0gR0VNX0JJVChQQ1NTRUwpO1xuJiM0MztcdGVsc2UgaWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuIFx0XHR2YWwgfD0gR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKTtcbiBcdG1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTtcbiBcbkBAIC01NDU2LDcgJiM0Mzs1NDcyLDggQEAgc3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiYjNDM7XHQgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0LyogRW5zdXJlIFBIWSBkZXZpY2UgdXNlZCBpbiBTR01JSSBtb2RlIGlzIHJlYWR5ICovXG4gXHRcdGJwLVx1MDAzZXBoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDQiYjMzQ7LAogICAgJiMzNDtNQUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY2JfcGNzX2FuX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfY29uZmlnJiMzNDssCiAgICAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAgICYjMzQ7bWFjYl9pbml0X2RmbHQmIzM0OywKICAgICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2M4OTE2NzMzOWVhNDBhOTU4ODhmMTU4ZmFlOGZlNDFiY2Y0YzE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMTUgMDY6MjY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCBkMzk0ZjFmNDNiNjg1ZS4uMjg0YTNiMDNmOGM3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtNTgzLDcgJiM0Mzs1ODMsMTMgQEAgc3RhdGljIHZvaWQgbWFjYl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiAKIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiB7Ci0JLyogTm90IHN1cHBvcnRlZCAqLwomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgbWFjYiwgcGh5bGlua19zZ21paV9wY3MpOwomIzQzOwl1MzIgb2xkLCBuZXc7CiYjNDM7CiYjNDM7CW9sZCA9IGdlbV9yZWFkbChicCwgUENTQ05UUkwpOwomIzQzOwluZXcgPSBvbGQgfCBCTUNSX0FOUkVTVEFSVDsKJiM0MzsJaWYgKG9sZCAhPSBuZXcpCiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBQQ1NDTlRSTCwgbmV3KTsKIH0KIAogc3RhdGljIGludCBtYWNiX3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsCkBAIC03NTAsNyAmIzQzOzc1Niw5IEBAIHN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCiAJCWN0cmwgJmFtcDs9IH4oR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKSk7CiAJCW5jciAmYW1wOz0gfkdFTV9CSVQoRU5BQkxFX0hTX01BQyk7CiAKLQkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7CiYjNDM7CQkJY3RybCB8PSBHRU1fQklUKFBDU1NFTCk7CiYjNDM7CQl9IGVsc2UgaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiAJCQljdHJsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7CiAJCX0gZWxzZSBpZiAoc3RhdGUtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHsKIAkJCWN0cmwgfD0gR0VNX0JJVChQQ1NTRUwpOwpAQCAtOTU3LDcgJiM0Mzs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCiAJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpCiAJCXJldHVybiAmYW1wO2JwLSZndDtwaHlsaW5rX3VzeF9wY3M7Ci0JZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKIAkJcmV0dXJuICZhbXA7YnAtJmd0O3BoeWxpbmtfc2dtaWlfcGNzOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDI1LDEzICYjNDM7MTAzNCwxNSBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWJwLSZndDtwaHlsaW5rX3NnbWlpX3Bjcy5vcHMgPSAmYW1wO21hY2JfcGh5bGlua19wY3Nfb3BzOwomIzQzOwlicC0mZ3Q7cGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7CiAJYnAtJmd0O3BoeWxpbmtfdXN4X3Bjcy5vcHMgPSAmYW1wO21hY2JfcGh5bGlua191c3hfcGNzX29wczsKIAogCWJwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO2Rldi0mZ3Q7ZGV2OwogCWJwLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7CiAJYnAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKIAotCWlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgIGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkgewogCQlicC0mZ3Q7cGh5bGlua19jb25maWcucG9sbF9maXhlZF9zdGF0ZSA9IHRydWU7CiAJCWJwLSZndDtwaHlsaW5rX2NvbmZpZy5nZXRfZml4ZWRfc3RhdGUgPSBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGU7CiAJCS8qIFRoZSBQQ1NBVVRPTkVHIGJpdCBpbiBQQ1NDTlRSTCBpcyBvbiBvdXQgb2YgcmVzZXQuIFNldHRpbmcKQEAgLTEwNjAsOSAmIzQzOzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJICBicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCQlwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCi0JCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfUENTKQomIzQzOwkJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19QQ1MpIHsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKJiM0MzsJCQkJICBicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKIAkJCQkgIGJwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQl9CiAKIAkJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKSB7CiAJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLApAQCAtNDkzMSw3ICYjNDM7NDk0NSw5IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqLwogCXZhbCA9IG1hY2JfbWRjX2Nsa19kaXYoYnApOwogCXZhbCB8PSBtYWNiX2RidyhicCk7Ci0JaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpCiYjNDM7CQl2YWwgfD0gR0VNX0JJVChQQ1NTRUwpOwomIzQzOwllbHNlIGlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpCiAJCXZhbCB8PSBHRU1fQklUKFNHTUlJRU4pIHwgR0VNX0JJVChQQ1NTRUwpOwogCW1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTsKIApAQCAtNTQ1Niw3ICYjNDM7NTQ3Miw4IEBAIHN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAotCWlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgIGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkgewogCQkvKiBFbnN1cmUgUEhZIGRldmljZSB1c2VkIGluIFNHTUlJIG1vZGUgaXMgcmVhZHkgKi8KIAkJYnAtJmd0O3BoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldCgmYW1wO3BkZXYtJmd0O2RldiwgTlVMTCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhZGVuY2UgTUFDQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBCYXNpY2FsbHksIHRoaXMgaXMgYSBmYWlybHkgbG93LWxldmVsIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sbGVyLCB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBqdW1wcyB0byBtaW5kIGlzOiBjYW4gSSBlZmZlY3RpdmVseSB0ZXN0IHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KClR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgYSBwYWluIHRvIHdvcmsgd2l0aCB1bmxlc3MgeW91IGhhdmUgYSBnb29kIGVtdWxhdG9yLiBZb3UgcmVhbGx5IG5lZWQgc29tZXRoaW5nIHRoYXQgY2FuIGFjY3VyYXRlbHkgc2ltdWxhdGUgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdG8gZ2V0IG1lYW5pbmdmdWwgdGVzdCByZXN1bHRzLiBJIGRvdWJ0IEkgY2FuIGp1c3QgZmlyZSB1cCBhIHN0YW5kYXJkIFZNIGFuZCBleHBlY3QgaXQgdG8gd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYW4gZW11bGF0b3IgdGhhdCBoYXMgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIHN1cHBvcnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIERvZXMgUUVNVSBzdXBwb3J0IHRoZSBDYWRlbmNlIE1BQ0I/IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiBpdCBtZW50aW9uZWQgc29tZXdoZXJlLi4uIEFoYSwgaGVyZSB3ZSBnbywgUUVNVSBoYXMgYGh3L25ldC9jYWRlbmNlX2dlbS5jYC4gVGhpcyBpcyBwcm9taXNpbmchIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlcmUgKmlzKiBhIFFFTVUgbW9kZWwgZm9yIHRoZSBDYWRlbmNlIEdFTSwgd2hpY2ggaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBNQUNCLiBUaGlzIG1lYW5zIGl0ICptaWdodCogYmUgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCB3aGljaCBpcyBncmVhdC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgUUVNVSBNQUNCL0dFTSBtb2RlbCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQgc28gdGhhdCBJIGNhbiBhY3R1YWxseSB0ZXN0IHRoaXMgZHJpdmVyIGluIFFFTVUuIFRoYXQgaXMgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIE1BQ0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWcgaXMgYE1BQ0JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIENhZGVuY2UgR0VNIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gUUVNVSBzdXBwb3J0cyB0aGUgYGNhZGVuY2VfZ2VtYCBkZXZpY2UsIGFuZCBpZiBpdCYjMzk7cyB0aGVyZSBvbiBhbiBBUk0gYm9hcmQgKGxpa2UgdGhlIGB4aWxpbngtenlucS1hOWApLCB0aGUgZHJpdmVyIHNob3VsZCBwcm9iZS4gVGhlIGBNQUNCX1BDSWAgb3B0aW9uIG1ha2VzIG1lIHRoaW5rIGFib3V0IFBDSSBkZXZpY2VzIGFuZCB3aGV0aGVyIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZW07IEkga25vdyBpdCBkb2VzIGhhbmRsZSBzb21lIGVtdWxhdGVkIFBDSSBzdHVmZiBvciB1c2VzIHNvbWUgZ2VuZXJpY3MsIGJ1dCBub3JtYWxseSBpdCYjMzk7cyBtb3JlIGZvY3VzZWQgb24gc3lzY2FsbHMuIFN5emthbGxlciYjMzk7cyBub3QgZ290IGEgZ2VuZXJpYyBQQ0kgaW5qZWN0b3IuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGRyaXZlciB3b3VsZCBiZSByZWFjaGVkIGJ5IHN5emthbGxlci4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gY29uc2lkZXIgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCYjMzQ7IHNvIHJlYWNoYWJpbGl0eSBpcyBrZXkuCgpJZiBRRU1VIGhhcyBgY2FkZW5jZV9nZW1gLCB0aGVuIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzaWduYWwuIEFuZCBRRU1VICpkb2VzKiBoYXZlIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIHNvIGl0IHNlZW1zIHJlYWNoYWJsZS4gU28gSSYjMzk7bSB0aGlua2luZyBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHN1cHBvcnQuIEl0IHRvdWNoZXMgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBCYXNpY2FsbHksIGl0JiMzOTtzIGFsbCBhYm91dCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiwgcmlnaHQ/IGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBpcyBmb3IgcmVzdGFydGluZyBhdXRvLW5lZ290aWF0aW9uLCBgbWFjYl9tYWNfY29uZmlnYCBjb25maWd1cmVzIHRoZSBNQUMsIGFuZCBzbyBvbi4KClRoZSBmdW5jdGlvbnMgYXJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHVwL2Rvd24gZXZlbnRzLCB3aGljaCBhcmUgbm9ybWFsbHkgaG93IHN5emthbGxlciBvcGVyYXRlcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGZ1bmN0aW9ucyAqd29ydGgqIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBpcyBiYXNpY2FsbHkganVzdCByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBTYW1lIHdpdGggYG1hY2JfbWFjX2NvbmZpZ2AuIGBtYWNiX21hY19zZWxlY3RfcGNzYCByZXR1cm5zIGEgcG9pbnRlci4gTm90aGluZyBjb21wbGV4IGhlcmUuIGBtaWlfcHJvYmVgIHNldHRpbmcgc29tZSBib29sZWFucywgc2V0dGluZyBzb21lIGJpdHMsIGluaXQgZGVmYXVsdHMgaXMgc2V0dGluZyBtb3JlIGJpdHMuIGBpbml0X3Jlc2V0X29wdGlvbmFsYCBjYWxscyBgZGV2bV9waHlfb3B0aW9uYWxfZ2V0YC4gSXQmIzM5O3MgdmVyeSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uOyBubyBjb21wbGV4IGxvZ2ljLCBubyBwYWNrZXQgcGFyc2luZy4KClRoZSBwcm9tcHQgc2F5cyBJIHNob3VsZCBjb25zaWRlciB0aGUgcGF0Y2ggZm9yICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQgaGFzIG1vZGlmaWNhdGlvbnMgdG86IERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4KCkkgdGhpbmssIHRoZSBrZXkgdGhpbmcgZm9yIGZ1enppbmcgaXMgcmVhY2hpbmcgdGhlIGRyaXZlciBjb2RlLiBJdCAqY2FuKiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCB0aGUgZnVuY3Rpb25zIGNhbiBiZSB0cmlnZ2VyZWQuCgpTbywgKmhvdyogY2FuIHN5emthbGxlciB0cmlnZ2VyIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBzcGVjaWZpY2FsbHk/IFdlbGwsIGl0IG5lZWRzIHBoeWxpbmsgdG8gY2FsbCBpdC4gU3l6a2FsbGVyIG1heSBiZSBhYmxlIHRvIHJlYWNoIHRoYXQsIGFuZCBpcyB0aGUga2V5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAoZXRodG9vbCkgb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFuZ2xlISBUaGUgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHdvcnRoIGZvY3Vzc2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3Bjc19hbl9yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3Mz1zdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg0OnN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgbWFjYl9waHlsaW5rX3Bjc19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MzItXHQucGNzX2dldF9zdGF0ZSA9IG1hY2JfcGNzX2dldF9zdGF0ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjMzOlx0LnBjc19hbl9yZXN0YXJ0ID0gbWFjYl9wY3NfYW5fcmVzdGFydCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjM0LVx0LnBjc19jb25maWcgPSBtYWNiX3Bjc19jb25maWcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFN5bWJvbCBDb25zaWRlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbi4gYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2UgYXMgYSBmb2N1cyBzeW1ib2wuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgZm9jdXNpbmcgb24gaXQgY291bGQgeWllbGQgc29tZSBpbnRlcmVzdGluZyBpbnNpZ2h0cy4gTm93LCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYG1hY2JfbWFjX2NvbmZpZ2AuIFRoYXQmIzM5O3MgYW5vdGhlciBwb3RlbnRpYWwgYXJlYSB0byBkaWcgaW50by4gSXQmIzM5O3MgdGllZCB0byBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgY291bGQgYmUgcmVhbGx5IGhlbHBmdWwuIExldCBtZSBzZWUgaG93IHRoZSB0d28gcmVsYXRlIGFuZCB3aGljaCBvbmUgaXMgbW9yZSByZWxldmFudCwgb3IgcGVyaGFwcywgZXhwbG9yZSBib3RoIGluIHRhbmRlbS4gSXQgZGVwZW5kcyBvbiB0aGUgaXNzdWUgSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX21hY19jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTk1PXN0YXRpYyBpbnQgbWFjYl9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjEwLVx0ICogTXVzdCBiZSB3cml0dGVuIGFmdGVyIFBDU1NFTCBpcyBzZXQgaW4gTkNGR1Igd2hpY2ggaXMgZG9uZSBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MTE6XHQgKiBtYWNiX21hY19jb25maWcoKSwgb3RoZXJ3aXNlIHdyaXRlcyB3aWxsIG5vdCB0YWtlIGVmZmVjdC5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjEyLVx0ICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz03MTg9c3RhdGljIGludCBtYWNiX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjczODpzdGF0aWMgdm9pZCBtYWNiX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ni1cdC5tYWNfc2VsZWN0X3BjcyA9IG1hY2JfbWFjX3NlbGVjdF9wY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk3NzpcdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NzgtXHQubWFjX2xpbmtfZG93biA9IG1hY2JfbWFjX2xpbmtfZG93bixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBtYWNiX21hY19zZWxlY3RfcGNzYCoqCgpIbW0sIGBtYWNiX21hY19zZWxlY3RfcGNzYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgbmFtZSBpcyBzdGlja2luZyBpbiBteSBtaW5kLiBJJiMzOTttIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIElzIGl0IHJlbGF0ZWQgdG8gTUFDIGFkZHJlc3Mgc2VsZWN0aW9uLCBwZXJoYXBzIGZvciB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyPyBPciBpcyB0aGUgJiMzNDtQQ1MmIzM0OyBhIGRpZmZlcmVudCBhY3JvbnltPyBBcmUgd2UgdGFsa2luZyBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXI/IE9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IG9ydGhvZ29uYWwsIGxpa2UgUHJvY2Vzc29yIENvbnRyb2wgU2lnbmFscy4gSSBzaG91bGQgbG9vayBpbnRvIHdoYXQgdGhhdCBzcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbiBoaW50cyBhdCBpbiB0aGlzIGFyY2hpdGVjdHVyZSYjMzk7cyBjb2RlIGJhc2UuIEl04oCZcyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkgaXRzIHJvbGUg4oCTIElzIHRoaXMgZGV2aWNlIGRyaXZlciBvciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29kZT8gTXkga25vd2xlZGdlIG9mIE1BQ0IgY29udHJvbGxlciBpbnRlcm5hbHMgaXMgcHJldHR5IHNvbGlkLCBzbyBhIGhpZ2gtbGV2ZWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgc2hvdWxkIHByb3ZpZGUgc29tZSBxdWljayBpbnNpZ2h0cywgYnV0IGtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVsbCBpbXBhY3QuIEkgd2lsbCB3YW50IHRvIHRyYWNlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSB3aGF0IGFuZCB3aHkgaXQgaXMgcHJlc2VudCwgYnV0IG1vcmUgaW1wb3J0YW50bHkgaG93IGl0IG9wZXJhdGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9ODk0PXN0YXRpYyB2b2lkIG1hY2JfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk2MDpzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NjEtXHRcdFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk3NjpcdC5tYWNfc2VsZWN0X3BjcyA9IG1hY2JfbWFjX3NlbGVjdF9wY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ny1cdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzkxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBQcm9iZSBGdW5jdGlvbiYjMzk7cyBQb3RlbnRpYWwqKgoKSG1tLCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBtYWNiX21paV9wcm9iZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYWJvdXQgKnRoYXQqIGZ1bmN0aW9uPyYjMzQ7IEl0JiMzOTtzIG5vdCBhIGdlbmVyaWMgcXVlc3Rpb24uIEl0IGltcGxpZXMgSSYjMzk7bSBhbHJlYWR5IHdpdGhpbiBhIHNwZWNpZmljIGNvbnRleHQsIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyIGFuZCBpdHMgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIHByb2JpbmcgcHJvY2Vzcy4gTXkgbWluZCYjMzk7cyB3b3JraW5nIG9uIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBjb25zaWRlcmluZyBhIHBhcnRpY3VsYXIgcHJvYmxlbSBvciBkZWJ1Z2dpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHByb2JlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJJiMzOTttIGxpa2VseSBhc3Nlc3NpbmcsIGJhc2VkIG9uIHRoZSBpbmNvbXBsZXRlIHBocmFzZSAmIzM0O1doYXQgYWJvdXQuLi4mIzM0OywgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgY29udGV4dCBJIGtub3cuIEkgbWlnaHQgYmUgY29uc2lkZXJpbmcgYWx0ZXJuYXRpdmUgcHJvYmUgYmVoYXZpb3JzLCBvciBsb29raW5nIGludG8gd2h5IGl0JiMzOTtzIHBvdGVudGlhbGx5IGZhaWxpbmcgdG8gd29yayBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMj1zdGF0aWMgdm9pZCBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDMxLS8qIGJhc2VkIG9uIGF1MTAwMF9ldGguIGMqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDMyOnN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTM5PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTQ5LVx0aWYgKCFtZGlvX25wIFx1MDAyNlx1MDAyNiBvZl9waHlfaXNfZml4ZWRfbGluayhucCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTA6XHRcdHJldHVybiBtYWNiX21paV9wcm9iZShicC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE3NzpcdGVyciA9IG1hY2JfbWlpX3Byb2JlKGJwLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNzgtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uKioKCkhtbSwgKm1hY2JfaW5pdF9kZmx0Ki4uLiB0aGF0IG5hbWUgZmVlbHMgZmFtaWxpYXIuIEl0JiMzOTtzIGxpa2VseSBhIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgcHJvYmFibHkgZm9yIGEgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyBwdXJwb3NlLiBJcyBpdCBhIGZhbGxiYWNrIG9wdGlvbiB3aGVuIHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBmYWlscz8gRG9lcyBpdCBwZXJmb3JtIGVzc2VudGlhbCByZWdpc3RlciBzZXR1cCBjb21tb24gYWNyb3NzIGEgcmFuZ2Ugb2YgTUFDIGltcGxlbWVudGF0aW9ucz8gSXMgdGhpcyBhIHN0YW5kYXJkIGRlZmluaXRpb24sIHBlcmhhcHMgaW4gYSBzdGFuZGFyZCBsaWJyYXJ5PwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBzY29wZS4gRG9lcyB0aGlzIHJvdXRpbmUgaGFuZGxlIHBvd2VyLXVwIGNvbmZpZ3VyYXRpb24/IENsb2NrIHNldHVwPyBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbj8gTWVtb3J5IGFsbG9jYXRpb24/IERvZXMgaXQgaW5pdGlhbGl6ZSBhbnkgc3BlY2lmaWMgRE1BIGNoYW5uZWxzPyBBbmQgY3JpdGljYWxseSwgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgX25vdF8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBDb3VsZCBpdCBsZWF2ZSB0aGUgTUFDIGluIGFuIHVuZGVmaW5lZCBzdGF0ZSwgbGVhZGluZyB0byB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLCBsaWtlIG5ldHdvcmsgZHJvcG91dHMgb3IgZGF0YSBjb3JydXB0aW9uPwoKTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgbm93IGluY2x1ZGVzOgoKKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBXaGVyZSBjYW4gSSBmaW5kIHRob3JvdWdoIGRvY3VtZW50YXRpb24gb24gYG1hY2JfaW5pdF9kZmx0YCBhbmQgaXRzIHNwZWNpZmljIGFyZ3VtZW50cyBhbmQgZWZmZWN0cz8KKiAgICoqU291cmNlIENvZGU6KiogSWYgZG9jdW1lbnRhdGlvbiBpcyBsYWNraW5nLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBidXQgYWxzbyBzZWFyY2ggd2hlcmUgaXQgaXMgdXNlZC4KKiAgICoqSGFyZHdhcmUgRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFzc3VtcHRpb25zIG1hZGUgYnkgYG1hY2JfaW5pdF9kZmx0YD8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IG5lZWRzIHRvIGFjY291bnQgZm9yLCBvciBpcyBpdCBpbnRlbmRlZCB0byBiZSByZWxhdGl2ZWx5IGdlbmVyaWM/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBwZXJmb3JtZWQgd2l0aGluIGBtYWNiX2luaXRfZGZsdGA/IERvZXMgaXQgcmV0dXJuIGVycm9yIGNvZGVzLCBhbmQgaG93IGFyZSB0aGVzZSBoYW5kbGVkIGJ5IHRoZSBjYWxsaW5nIGNvZGU/CiogICAqKlBlcmZvcm1hbmNlIEltcGxpY2F0aW9uczoqKiBJcyB0aGlzIGEgdGltZS1jcml0aWNhbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbj8KCk15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vaywgZXZlbiBpZiBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBpcyBnZW5lcmljLiBUaGVyZeKAmXMgYWxtb3N0IGNlcnRhaW5seSBzb21ldGhpbmcgaW4gdGhlcmUgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2luaXRfZGZsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NzUxPXN0YXRpYyBpbnQgbWFjYl9jbGtfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgY2xrICoqcGNsayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NjQ6c3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzY1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ5NTc9c3RhdGljIGludCBtYWNiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ5NjItXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ5NjM6XHRcdHJldHVybiBtYWNiX2luaXRfZGZsdChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDk2NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY2Olx0cmV0dXJuIG1hY2JfaW5pdF9kZmx0KHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU0Njk9c3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NTE3Olx0cmV0ID0gbWFjYl9pbml0X2RmbHQocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU1MTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NTI2PXN0YXRpYyBpbnQgZXllcTVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTU0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTU0MjpcdHJldCA9IG1hY2JfaW5pdF9kZmx0KHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTQzLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgSW5pdGlhbGl6YXRpb24gUmVzZXQgT3B0aW9ucyoqCgpIbW0sIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3QgdGhlIHVzdWFsIHNldCBvZiBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzIGhhbmRsZWQsIEkgYXNzdW1lLiBCdXQsIEkmIzM5O20gd29uZGVyaW5nLi4uIHdoYXQgYWJvdXQgdGhlIGVkZ2UgY2FzZXMsIHRoZSBtb3JlIG51YW5jZWQgc2NlbmFyaW9zPyBXaGF0IGFib3V0IHdoZW4gd2Ugd2FudCBhIG1vcmUgc2VsZWN0aXZlIHJlc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbj8gU3BlY2lmaWNhbGx5LCB0aGF0IGZ1bmN0aW9uLCBgaW5pdF9yZXNldF9vcHRpb25hbGAuLi4gdGhhdCYjMzk7cyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGEgYml0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHJlc2V0IGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGFsd2F5cyBzdHJpY3RseSByZXF1aXJlZC4gQXJlIHdlIGhhbmRsaW5nIHRob3NlIGNhc2VzIGNvcnJlY3RseT8gQXJlIHdlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBzdWJ0bGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGJ5ICpub3QqIHJlc2V0dGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIG9yLCBjb252ZXJzZWx5LCBwb3RlbnRpYWxseSBvdmVyLXJlc2V0dGluZyB0aGluZ3Mgd2hlbiBhIG1vcmUgdGFyZ2V0ZWQgaW5pdGlhbGl6YXRpb24gd291bGQgc3VmZmljZT8gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayB0aGVzZSBvcHRpb25hbCByZXNldHMsIGJ1dCB0aGV5IGNhbiBiZSBjcml0aWNhbCBmb3IgYXZvaWRpbmcgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpbiBjb21wbGV4IHN5c3RlbXMgd2l0aCBhIGxvdCBvZiBpbnRlcmRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGludGVycm9nYXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGVtcGxveWVkLiBBcmUgdGhlIGFzc3VtcHRpb25zIGFyb3VuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAgY2xlYXJseSBkb2N1bWVudGVkPyBBcmUgd2UgYWRlcXVhdGVseSB0ZXN0aW5nIHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQgaXMgdXNlZCBvciBieXBhc3NlZD8gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXRzIHB1cnBvc2UgYW5kIGVuc3VyZSBpdCYjMzk7cyBpbnRlZ3JhdGVkIHNlYW1sZXNzbHkgaW50byB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24gZmxvdyB3aXRob3V0IG9wZW5pbmcgYW55IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY0OC1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2NDk6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXHQuanVtYm9fbWF4X2xlbiA9IDEwMjQwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY2Ny1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2Njg6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXHQudXNyaW8gPSBcdTAwMjZtcGZzX3VzcmlvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTcwMTpcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTcwMi1cdC5qdW1ib19tYXhfbGVuID0gMTAyNDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgcGljNjRocHNjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzMwOlx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzMxLVx0Lmp1bWJvX21heF9sZW4gPSAxNjM4MyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBBbmFseXNpczogQ2FkZW5jZSBNQUNCIERyaXZlciBmb3IgMTAwMEJBU0VYIFN1cHBvcnQqKgoKT2theSwgc28gYGluaXRfcmVzZXRfb3B0aW9uYWxgIHRvdWNoZXMgY29uZmlndXJhdGlvbnMgZm9yIFp5bnFNUCwgTVBGUywgVmVyc2FsLCBhbmQgUElDNjRIUFNDLiBaeW5xTVAgaXMgc3VwcG9ydGVkIGluIFFFTVUsIHNwZWNpZmljYWxseSBgeGxueC16eW5xbXBgLCBzbyB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgdG8gdGhlIENhZGVuY2UgTUFDQiBkcml2ZXIuIEkmIzM5O3ZlIHRha2VuIGEgY2xvc2UgbG9vaywgYW5kIHRoZSBjaGFuZ2VzICpzZWVtKiBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb25maWd1cmF0aW9uOiBzZXR0aW5nIGJpdHMgaW4gcmVnaXN0ZXJzLCBzZWxlY3RpbmcgdGhlIFBDUywgdGhpbmdzIGxpa2UgdGhhdC4gVGhlcmUgaXNuJiMzOTt0IGFueSBjb21wbGV4IGxvZ2ljLCBwYWNrZXQgcGFyc2luZywgb3Igc3RhdGUgbWFjaGluZSBpbnZvbHZlZC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIGhhcmR3YXJlIGRyaXZlciwgdGhvdWdoLiBJcyB0aGlzIGZ1enphYmxlPwoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyBsaWtlIHRoaXM6IHNpbXBsZSByZWdpc3RlciByZWFkL3dyaXRlLCBiaXQgc2V0dGluZywgcG9pbnRlciByZXR1cm5zLCBzZXR0aW5nIGEgYm9vbGVhbiwgaWYgY29uZGl0aW9ucywgYW5kIHNldHRpbmcgYSBiaXQgaW4gYSBiaXRtYXAuIE5vdGhpbmcgZmFuY3kuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGFuZCBzZXR0aW5nIHRoZSBgUENTU0VMYCBiaXQgYXMgbmVjZXNzYXJ5LgoKVGhlIHByb21wdCBzYXlzIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgbWFpbmx5IGRvY3VtZW50YXRpb24sIEtjb25maWcgY2hhbmdlcywgZGVjb3JhdGl2ZSwgcmVsYXRlZCB0byBjb25zdGFudCBvciBtYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBhbHRlcmF0aW9uLCBvciB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSG93ZXZlciwgdGhpcyBwYXRjaCAqZG9lcyogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJ5IGVuYWJsaW5nIHRoZSBuZXcgUEhZIGludGVyZmFjZSBtb2RlIGFuZCBjb25maWd1cmluZyB0aGUgaGFyZHdhcmUuIEl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUsIHNpbmNlIFp5bnFNUCBpcyBzdXBwb3J0ZWQuIFRoZSBwYXRjaCBpcyBhYm91dCBmdW5jdGlvbmFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgcHJvbXB0IHN0YXRlcyB0aGUgbmVnYXRpdmUgY2FzZXMsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtuZWdhdGl2ZSBjYXNlcy4mIzM0OwoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBhbmFseXNpcyBsZWFkcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCldhaXQsIGJlZm9yZSBJIGRlY2lkZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrLiBJcyB0aGVyZSBhbnkgcGFydGljdWxhciBDT05GSUcgb3B0aW9uIHJlcXVpcmVkPyBgTUFDQmAgYXBwZWFycyB0byBiZSB0aGUgcmVxdWlyZWQgY29uZmlnLiBBbmQgc2luY2UgdGhlcmUgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXQgcGxheSwgdGhlIGNvbmNsdXNpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBNQUNCYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIG1hcCBvdXQgd2hhdCBgTUFDQmAgcmVsaWVzIG9uIGJlY2F1c2UgYSBjaGFuZ2UgdGhlcmUgY2FuIGNhc2NhZGUuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHNlcnZpY2VzIHRoYXQgYE1BQ0JgIHB1bGxzIGRhdGEgb3Igc2V0dGluZ3MgZnJvbT8gSWYgaXQgZG9lcywgYSBjaGFuZ2UgaW4gYW55IG9mIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmFkdmVydGVudGx5IGJyZWFrIGBNQUNCYCBvciBpbnRyb2R1Y2Ugc3VidGxlLCB5ZXQgY3JpdGljYWwsIHNpZGUgZWZmZWN0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoaXMgbWFwcGVkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQ0IkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNjb3Bpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGxpbmUgMjIuIFRoaXMgbGlrZWx5IHRvdWNoZXMgdXBvbiB0aGUgY29yZSBDYWRlbmNlIEV0aGVybmV0IE1BQyBkcml2ZXImIzM5O3Mgc2V0dGluZ3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipGZWF0dXJlIHRvZ2dsZXMqKjogUG90ZW50aWFsIGhhcmR3YXJlIHZhcmlhbnRzLCBzdXBwb3J0IGZvciBzcGVjaWZpYyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLCBvciBwZXJoYXBzIGRpZmZlcmVudCBETUEgY29uZmlndXJhdGlvbnMuCiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG9yIGRyaXZlcnMgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIgdG8gYnVpbGQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIHNwZWNpZmljIGNsb2NrIHNldHRpbmdzIG9yIGJ1cyBpbnRlcmZhY2UgcmVxdWlyZW1lbnRzPwoqICAgKipEZWZhdWx0IHZhbHVlcyoqOiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGVzZSBvcHRpb25zPyBLbm93aW5nIHRoaXMgaXMgdml0YWwgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDtvdXQtb2YtdGhlLWJveCYjMzQ7IGJlaGF2aW9yIGFuZCBxdWlja2x5IGlkZW50aWZ5IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybSBJJiMzOTttIHdvcmtpbmcgd2l0aC4KKiAgICoqRG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyoqOiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGVudHJpZXMgYXJlIHdlbGwtY29tbWVudGVkLiBHb29kIGRvY3VtZW50YXRpb24gY2xhcmlmaWVzIHRoZSBwdXJwb3NlLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSB0aGUgdHJhZGUtb2ZmcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlIGNvbW1lbnRzIGFjY3VyYXRlPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBhYmxlIHRvIHRlbGwgcHJldHR5IHF1aWNrbHkuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogQSBxdWljayBzY2FuIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgYW55IHNldHRpbmdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgb3IgbWlnaHQgY2F1c2UgaXNzdWVzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcywgb3IgYXQgcnVudGltZS4KCkkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gdGhlbiBpZGVudGlmeSB3aGF0IEkgbmVlZCB0byBhZGRyZXNzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQ2FkZW5jZSBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9DQURFTkNFXG4gICA3Olx0XHRib29sIFwmIzM0O0NhZGVuY2UgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE2Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDE3Olx0XHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTk6XHRcbiAgMjA6XHRpZiBORVRfVkVORE9SX0NBREVOQ0VcbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTUFDQlxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEhBU19ETUEgXHUwMDI2XHUwMDI2IENPTU1PTl9DTEtcbiAgMjU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMjY6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDI3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxuICAzMDpcdFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyBgTUFDQmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQgdGhlbiBhIHRob3VnaHQgcG9wcyB1cDogaGFuZyBvbiwgd2hhdCBhYm91dCBgTUFDQl9QQ0lgPyBJdCBkYXducyBvbiBtZSB0aGF0IGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1enppbmcgcG9zc2liaWxpdGllcywgcGFydGljdWxhcmx5IGFzIGEgUENJIGRldmljZSwgdGhhdCBzZWNvbmQgb3B0aW9uIG1pZ2h0IGFjdHVhbGx5IGJlIHRoZSBtb3JlIHJlbGV2YW50IG9uZSB0byBpbnZlc3RpZ2F0ZS4gR290dGEga2VlcCBhbGwgdGhlIGFuZ2xlcyBpbiBtaW5kIHdoZW4gY29uc2lkZXJpbmcgdGVzdGluZyBzdHJhdGVnaWVzLiBUaGVyZWZvcmUsIGxldCBtZSBjb25zdWx0IHRoZSBzb3VyY2UuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUgYXJvdW5kIGxpbmUgNDUsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHQgIHdpbGwgYmUgbWFjYi5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuICAzODpcdFx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbiAgMzk6XHRcdGRlcGVuZHMgb24gTUFDQlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0MTpcdFx0ZGVmYXVsdCB5XG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSBJRUVFIDE1ODggUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgc3VwcG9ydCBmb3IgTUFDQi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgTUFDQl9QQ0lcbiAgNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gTUFDQiBcdTAwMjZcdTAwMjYgUENJXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxuICA1MDpcdFxuICA1MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDUyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxuICA1MzpcdFxuICA1NDpcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIGBNQUNCX1BDSWAgY29uZmlndXJhdGlvbiBpcyBhIHNtYXJ0IG1vdmUuIEl0IHdyYXBzIHRoZSBzdGFuZGFyZCBNQUNCIGRyaXZlciBhbmQsIGltcG9ydGFudGx5LCBtYWtlcyBpdCBmdXp6YWJsZSB2aWEgU3l6a2FsbGVyJiMzOTtzIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhpcyBvcGVucyB1cCBhIGxvdCBvZiBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBNQUNCYCBhbmQgYE1BQ0JfUENJYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24uIE15IGluaXRpYWwgc2NhbiB0dXJuZWQgdXAgYSBmZXcgaW50ZXJlc3RpbmcgY2FuZGlkYXRlczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgaW5pdF9yZXNldF9vcHRpb25hbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBhIGNhbGxiYWNrIHdpdGhpbiBgbWFjYl9jb25maWdgLiBgbWFjYl9pbml0X2RmbHRgIHNlZW1zIHRvIGJlIGFub3RoZXIgY2FsbGJhY2sgb3IgaXMgY2FsbGVkIGRpcmVjdGx5LiAgYG1hY2JfbWlpX3Byb2JlYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIHByb2JlIHNlcXVlbmNlLiAgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYW5kIGBtYWNiX21hY19zZWxlY3RfcGNzYCBhcmUgYmVpbmcgY2FsbGVkIGJ5IHBoeWxpbmssIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KCkNvbnNpZGVyaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIEkgaW5pdGlhbGx5IGRlY2lkZWQgdG8gbGlzdCBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGFuZCBgbWFjYl9taWlfcHJvYmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7dmUgcmUtZXhhbWluZWQgdGhlIGNvZGUgY2hhbmdlcywgYW5kIGl0JiMzOTtzIGNsZWFyIEkmIzM5O3ZlIGdvdCB0byB0YWtlIGEgYnJvYWRlciB2aWV3LiBUaGUgZGlmZiBjb25maXJtcyB0aG9zZSwgYnV0IGFsc28gaW5jbHVkZXMgYG1hY2JfaW5pdF9kZmx0YCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLgoKU28sIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbTogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLgoKQSBicmllZiBzYW5pdHkgY2hlY2sgaXMgd2FycmFudGVkLCBlc3BlY2lhbGx5IHdpdGggYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBUaGUgbmFtZSBpcyBhIGxpdHRsZSBnZW5lcmljLCBidXQgaXQgaXMgc3RhdGljIHRvIGBtYWNiX21haW4uY2AsIHdoaWNoIHNob3VsZCBtYWtlIGl0IHVuaXF1ZSBlbm91Z2ggdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfcmVzZXRfb3B0aW9uYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY0OC1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2NDk6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXHQuanVtYm9fbWF4X2xlbiA9IDEwMjQwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY2Ny1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2Njg6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXHQudXNyaW8gPSBcdTAwMjZtcGZzX3VzcmlvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTcwMTpcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTcwMi1cdC5qdW1ib19tYXhfbGVuID0gMTAyNDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgcGljNjRocHNjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzMwOlx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzMxLVx0Lmp1bWJvX21heF9sZW4gPSAxNjM4MyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTEKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkZ1enppbmcgUmVjb21tZW5kYXRpb246IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGZpbGUuIE15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBtb2RpZnlpbmcgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGJvdGggZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcywgYXMgbWFuYWdlZCBieSBwaHlsaW5rLiBGdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgYWNjZXNzaWJsZSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSwgd2hpY2ggZW11bGF0ZXMgdGhlIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzLCBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHVzaW5nIHRoZSBQQ0kgd3JhcHBlciAoYE1BQ0JfUENJYCkuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVhY2hhYmxlIGRyaXZlciBsb2dpYyB0aGF0IGhhcyB1bmRlcmdvbmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZW5hYmxlIGZ1enppbmcgZm9yIHRoZSBgTUFDQmAgYW5kIGBNQUNCX1BDSWAgY29uZmlndXJhdGlvbnMuIEFuZCB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDQiYjMzQ7LAogICAgJiMzNDtNQUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY2JfcGNzX2FuX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfY29uZmlnJiMzNDssCiAgICAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAgICYjMzQ7bWFjYl9pbml0X2RmbHQmIzM0OywKICAgICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9wY3NfYW5fcmVzdGFydCYjMzQ7LAogICAgJiMzNDttYWNiX21hY19jb25maWcmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDttYWNiX21paV9wcm9iZSYjMzQ7LAogICAgJiMzNDttYWNiX2luaXRfZGZsdCYjMzQ7LAogICAgJiMzNDtpbml0X3Jlc2V0X29wdGlvbmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjowMi40ODIxNzU4ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU3MjM4MTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2JfcGNzX2FuX3Jlc3RhcnRcIixcbiAgICBcIm1hY2JfbWFjX2NvbmZpZ1wiLFxuICAgIFwibWFjYl9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwibWFjYl9taWlfcHJvYmVcIixcbiAgICBcIm1hY2JfaW5pdF9kZmx0XCIsXG4gICAgXCJpbml0X3Jlc2V0X29wdGlvbmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCBpbnRlcmZhY2UgbW9kZSB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgbW9kaWZpZXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcyAodmlhIHBoeWxpbmspLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHdoaWNoIGVtdWxhdGVzIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzKSBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHZpYSB0aGUgUENJIHdyYXBwZXIgKE1BQ0JfUENJKS4gU2luY2UgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuNDgyMTgwOTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk2MjUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2M4OTE2NzMzOWVhNDBhOTU4ODhmMTU4ZmFlOGZlNDFiY2Y0YzE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA2OjI2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuaW5kZXggZDM5NGYxZjQzYjY4NWUuLjI4NGEzYjAzZjhjNzc1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTU4Myw3ICs1ODMsMTMgQEAgc3RhdGljIHZvaWQgbWFjYl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuIFxcbiBzdGF0aWMgdm9pZCBtYWNiX3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbiB7XFxuLVxcdC8qIE5vdCBzdXBwb3J0ZWQgKi9cXG4rXFx0c3RydWN0IG1hY2IgKmJwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG1hY2IsIHBoeWxpbmtfc2dtaWlfcGNzKTtcXG4rXFx0dTMyIG9sZCwgbmV3O1xcbitcXG4rXFx0b2xkID0gZ2VtX3JlYWRsKGJwLCBQQ1NDTlRSTCk7XFxuK1xcdG5ldyA9IG9sZCB8IEJNQ1JfQU5SRVNUQVJUO1xcbitcXHRpZiAob2xkICE9IG5ldylcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgUENTQ05UUkwsIG5ldyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWFjYl9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbkBAIC03NTAsNyArNzU2LDkgQEAgc3RhdGljIHZvaWQgbWFjYl9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0XFx0Y3RybCBcXHUwMDI2PSB+KEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCkpO1xcbiBcXHRcXHRuY3IgXFx1MDAyNj0gfkdFTV9CSVQoRU5BQkxFX0hTX01BQyk7XFxuIFxcbi1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xcbitcXHRcXHRcXHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbiBcXHRcXHRcXHRjdHJsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHtcXG4gXFx0XFx0XFx0Y3RybCB8PSBHRU1fQklUKFBDU1NFTCk7XFxuQEAgLTk1Nyw3ICs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXG4gXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuIFxcdFxcdHJldHVybiBcXHUwMDI2YnAtXFx1MDAzZXBoeWxpbmtfdXN4X3BjcztcXG4tXFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4rXFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZicC1cXHUwMDNlcGh5bGlua19zZ21paV9wY3M7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTEwMjUsMTMgKzEwMzQsMTUgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0YnAtXFx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLm9wcyA9IFxcdTAwMjZtYWNiX3BoeWxpbmtfcGNzX29wcztcXG4rXFx0YnAtXFx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLnBvbGwgPSB0cnVlO1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua191c3hfcGNzLm9wcyA9IFxcdTAwMjZtYWNiX3BoeWxpbmtfdXN4X3Bjc19vcHM7XFxuIFxcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlZGV2O1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbiBcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRpZiAoYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XFxuIFxcdFxcdGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5wb2xsX2ZpeGVkX3N0YXRlID0gdHJ1ZTtcXG4gXFx0XFx0YnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmdldF9maXhlZF9zdGF0ZSA9IG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZTtcXG4gXFx0XFx0LyogVGhlIFBDU0FVVE9ORUcgYml0IGluIFBDU0NOVFJMIGlzIG9uIG91dCBvZiByZXNldC4gU2V0dGluZ1xcbkBAIC0xMDYwLDkgKzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRcXHQgIGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcbi1cXHRcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfUENTKVxcbitcXHRcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfUENTKSB7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbitcXHRcXHRcXHRcXHQgIGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuIFxcdFxcdFxcdFxcdCAgYnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpIHtcXG4gXFx0XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUixcXG5AQCAtNDkzMSw3ICs0OTQ1LDkgQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHQvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqL1xcbiBcXHR2YWwgPSBtYWNiX21kY19jbGtfZGl2KGJwKTtcXG4gXFx0dmFsIHw9IG1hY2JfZGJ3KGJwKTtcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4rXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXFxuK1xcdFxcdHZhbCB8PSBHRU1fQklUKFBDU1NFTCk7XFxuK1xcdGVsc2UgaWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4gXFx0XFx0dmFsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XFxuIFxcdG1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTtcXG4gXFxuQEAgLTU0NTYsNyArNTQ3Miw4IEBAIHN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRpZiAoYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XFxuIFxcdFxcdC8qIEVuc3VyZSBQSFkgZGV2aWNlIHVzZWQgaW4gU0dNSUkgbW9kZSBpcyByZWFkeSAqL1xcbiBcXHRcXHRicC1cXHUwMDNlcGh5ID0gZGV2bV9waHlfb3B0aW9uYWxfZ2V0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuODkyNjI1NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MTYxOTI0MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9wY3NfYW5fcmVzdGFydFwiLFxuICAgIFwibWFjYl9tYWNfY29uZmlnXCIsXG4gICAgXCJtYWNiX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJtYWNiX21paV9wcm9iZVwiLFxuICAgIFwibWFjYl9pbml0X2RmbHRcIixcbiAgICBcImluaXRfcmVzZXRfb3B0aW9uYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYzg5MTY3MzM5ZWE0MGE5NTg4OGYxNThmYWU4ZmU0MWJjZjRjMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjoyNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1ZS4uMjg0YTNiMDNmOGM3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtNTgzLDcgKzU4MywxMyBAQCBzdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbiBcbiBzdGF0aWMgdm9pZCBtYWNiX3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuIHtcbi1cdC8qIE5vdCBzdXBwb3J0ZWQgKi9cbitcdHN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtYWNiLCBwaHlsaW5rX3NnbWlpX3Bjcyk7XG4rXHR1MzIgb2xkLCBuZXc7XG4rXG4rXHRvbGQgPSBnZW1fcmVhZGwoYnAsIFBDU0NOVFJMKTtcbitcdG5ldyA9IG9sZCB8IEJNQ1JfQU5SRVNUQVJUO1xuK1x0aWYgKG9sZCAhPSBuZXcpXG4rXHRcdGdlbV93cml0ZWwoYnAsIFBDU0NOVFJMLCBuZXcpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hY2JfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbkBAIC03NTAsNyArNzU2LDkgQEAgc3RhdGljIHZvaWQgbWFjYl9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0Y3RybCBcdTAwMjY9IH4oR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKSk7XG4gXHRcdG5jciBcdTAwMjY9IH5HRU1fQklUKEVOQUJMRV9IU19NQUMpO1xuIFxuLVx0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcbitcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbitcdFx0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdFx0Y3RybCB8PSBHRU1fQklUKFNHTUlJRU4pIHwgR0VNX0JJVChQQ1NTRUwpO1xuIFx0XHR9IGVsc2UgaWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHtcbiBcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbkBAIC05NTcsNyArOTY1LDggQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqbWFjYl9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuIFx0XHRyZXR1cm4gXHUwMDI2YnAtXHUwMDNlcGh5bGlua191c3hfcGNzO1xuLVx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbitcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4rXHQgICAgICAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuIFx0XHRyZXR1cm4gXHUwMDI2YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3M7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTEwMjUsMTMgKzEwMzQsMTUgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdGJwLVx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLm9wcyA9IFx1MDAyNm1hY2JfcGh5bGlua19wY3Nfb3BzO1xuK1x0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7XG4gXHRicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3VzeF9wY3Nfb3BzO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZWRldjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnBvbGxfZml4ZWRfc3RhdGUgPSB0cnVlO1xuIFx0XHRicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5nZXRfZml4ZWRfc3RhdGUgPSBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGU7XG4gXHRcdC8qIFRoZSBQQ1NBVVRPTkVHIGJpdCBpbiBQQ1NDTlRSTCBpcyBvbiBvdXQgb2YgcmVzZXQuIFNldHRpbmdcbkBAIC0xMDYwLDkgKzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4tXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUENTKVxuK1x0XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1BDUykge1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuK1x0XHRcdFx0ICBicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiBcdFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfSElHSF9TUEVFRCkge1xuIFx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXG5AQCAtNDkzMSw3ICs0OTQ1LDkgQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0LyogU2V0IE1JSSBtYW5hZ2VtZW50IGNsb2NrIGRpdmlkZXIgKi9cbiBcdHZhbCA9IG1hY2JfbWRjX2Nsa19kaXYoYnApO1xuIFx0dmFsIHw9IG1hY2JfZGJ3KGJwKTtcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbitcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4rXHRcdHZhbCB8PSBHRU1fQklUKFBDU1NFTCk7XG4rXHRlbHNlIGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiBcdFx0dmFsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XG4gXHRtYWNiX3dyaXRlbChicCwgTkNGR1IsIHZhbCk7XG4gXG5AQCAtNTQ1Niw3ICs1NDcyLDggQEAgc3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdC8qIEVuc3VyZSBQSFkgZGV2aWNlIHVzZWQgaW4gU0dNSUkgbW9kZSBpcyByZWFkeSAqL1xuIFx0XHRicC1cdTAwM2VwaHkgPSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuODkyNjI2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUwODA3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FkZW5jZSBNQUNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEJhc2ljYWxseSwgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnRyb2xsZXIsIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQgaXM6IGNhbiBJIGVmZmVjdGl2ZWx5IHRlc3QgdGhpcyB0aGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1xuXG5UeXBpY2FsbHksIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgYXJlIGEgcGFpbiB0byB3b3JrIHdpdGggdW5sZXNzIHlvdSBoYXZlIGEgZ29vZCBlbXVsYXRvci4gWW91IHJlYWxseSBuZWVkIHNvbWV0aGluZyB0aGF0IGNhbiBhY2N1cmF0ZWx5IHNpbXVsYXRlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGdldCBtZWFuaW5nZnVsIHRlc3QgcmVzdWx0cy4gSSBkb3VidCBJIGNhbiBqdXN0IGZpcmUgdXAgYSBzdGFuZGFyZCBWTSBhbmQgZXhwZWN0IGl0IHRvIHdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFuIGVtdWxhdG9yIHRoYXQgaGFzIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBzdXBwb3J0LlxuXG5MZXQncyBzZWXigKYgRG9lcyBRRU1VIHN1cHBvcnQgdGhlIENhZGVuY2UgTUFDQj8gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBtZW50aW9uZWQgc29tZXdoZXJlLi4uIEFoYSwgaGVyZSB3ZSBnbywgUUVNVSBoYXMgYGh3L25ldC9jYWRlbmNlX2dlbS5jYC4gVGhpcyBpcyBwcm9taXNpbmchIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlcmUgKmlzKiBhIFFFTVUgbW9kZWwgZm9yIHRoZSBDYWRlbmNlIEdFTSwgd2hpY2ggaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBNQUNCLiBUaGlzIG1lYW5zIGl0ICptaWdodCogYmUgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCB3aGljaCBpcyBncmVhdC5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIFFFTVUgTUFDQi9HRU0gbW9kZWwgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkIHNvIHRoYXQgSSBjYW4gYWN0dWFsbHkgdGVzdCB0aGlzIGRyaXZlciBpbiBRRU1VLiBUaGF0IGlzIGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjA4LjI0MzQzNjk4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQyNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXFx0Ym9vbCBcXFwiVXNlIElFRUUgMTU4OCBod3N0YW1wXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjA4LjMxNzg2ODkwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzY1NzY0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgQXNzZXNzbWVudCBmb3IgTUFDQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGlzIGBNQUNCYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBDYWRlbmNlIEdFTSBkcml2ZXIgaXMgZXZlbiByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFFFTVUgc3VwcG9ydHMgdGhlIGBjYWRlbmNlX2dlbWAgZGV2aWNlLCBhbmQgaWYgaXQncyB0aGVyZSBvbiBhbiBBUk0gYm9hcmQgKGxpa2UgdGhlIGB4aWxpbngtenlucS1hOWApLCB0aGUgZHJpdmVyIHNob3VsZCBwcm9iZS4gVGhlIGBNQUNCX1BDSWAgb3B0aW9uIG1ha2VzIG1lIHRoaW5rIGFib3V0IFBDSSBkZXZpY2VzIGFuZCB3aGV0aGVyIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZW07IEkga25vdyBpdCBkb2VzIGhhbmRsZSBzb21lIGVtdWxhdGVkIFBDSSBzdHVmZiBvciB1c2VzIHNvbWUgZ2VuZXJpY3MsIGJ1dCBub3JtYWxseSBpdCdzIG1vcmUgZm9jdXNlZCBvbiBzeXNjYWxscy4gU3l6a2FsbGVyJ3Mgbm90IGdvdCBhIGdlbmVyaWMgUENJIGluamVjdG9yLiBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGRyaXZlciB3b3VsZCBiZSByZWFjaGVkIGJ5IHN5emthbGxlci5cblxuVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBjb25zaWRlciBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgc28gcmVhY2hhYmlsaXR5IGlzIGtleS5cblxuSWYgUUVNVSBoYXMgYGNhZGVuY2VfZ2VtYCwgdGhlbiB0aGF0J3MgYSBwb3NpdGl2ZSBzaWduYWwuIEFuZCBRRU1VICpkb2VzKiBoYXZlIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIHNvIGl0IHNlZW1zIHJlYWNoYWJsZS4gU28gSSdtIHRoaW5raW5nIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgcGF0Y2ggYWRkcyBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgc3VwcG9ydC4gSXQgdG91Y2hlcyBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEJhc2ljYWxseSwgaXQncyBhbGwgYWJvdXQgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24sIHJpZ2h0PyBgbWFjYl9wY3NfYW5fcmVzdGFydGAgaXMgZm9yIHJlc3RhcnRpbmcgYXV0by1uZWdvdGlhdGlvbiwgYG1hY2JfbWFjX2NvbmZpZ2AgY29uZmlndXJlcyB0aGUgTUFDLCBhbmQgc28gb24uXG5cblRoZSBmdW5jdGlvbnMgYXJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHVwL2Rvd24gZXZlbnRzLCB3aGljaCBhcmUgbm9ybWFsbHkgaG93IHN5emthbGxlciBvcGVyYXRlcy5cblxuQnV0IGhlcmUncyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgKndvcnRoKiBmdXp6aW5nPyBMb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjYl9wY3NfYW5fcmVzdGFydGAgaXMgYmFzaWNhbGx5IGp1c3QgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gU2FtZSB3aXRoIGBtYWNiX21hY19jb25maWdgLiBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AgcmV0dXJucyBhIHBvaW50ZXIuIE5vdGhpbmcgY29tcGxleCBoZXJlLiBgbWlpX3Byb2JlYCBzZXR0aW5nIHNvbWUgYm9vbGVhbnMsIHNldHRpbmcgc29tZSBiaXRzLCBpbml0IGRlZmF1bHRzIGlzIHNldHRpbmcgbW9yZSBiaXRzLiBgaW5pdF9yZXNldF9vcHRpb25hbGAgY2FsbHMgYGRldm1fcGh5X29wdGlvbmFsX2dldGAuIEl0J3MgdmVyeSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uOyBubyBjb21wbGV4IGxvZ2ljLCBubyBwYWNrZXQgcGFyc2luZy5cblxuVGhlIHByb21wdCBzYXlzIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwYXRjaCBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCBoYXMgbW9kaWZpY2F0aW9ucyB0bzogRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlxuXG5JIHRoaW5rLCB0aGUga2V5IHRoaW5nIGZvciBmdXp6aW5nIGlzIHJlYWNoaW5nIHRoZSBkcml2ZXIgY29kZS4gSXQgKmNhbiogYmUgcmVhY2hlZCBpZiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhlIGZ1bmN0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkLlxuXG5TbywgKmhvdyogY2FuIHN5emthbGxlciB0cmlnZ2VyIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBzcGVjaWZpY2FsbHk/IFdlbGwsIGl0IG5lZWRzIHBoeWxpbmsgdG8gY2FsbCBpdC4gU3l6a2FsbGVyIG1heSBiZSBhYmxlIHRvIHJlYWNoIHRoYXQsIGFuZCBpcyB0aGUga2V5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAoZXRodG9vbCkgb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFuZ2xlISBUaGUgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHdvcnRoIGZvY3Vzc2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjEuNjgzNjM0NTcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NTIzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfcGNzX2FuX3Jlc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3Mz1zdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg0OnN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgbWFjYl9waHlsaW5rX3Bjc19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYzMi1cXHQucGNzX2dldF9zdGF0ZSA9IG1hY2JfcGNzX2dldF9zdGF0ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYzMzpcXHQucGNzX2FuX3Jlc3RhcnQgPSBtYWNiX3Bjc19hbl9yZXN0YXJ0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjM0LVxcdC5wY3NfY29uZmlnID0gbWFjYl9wY3NfY29uZmlnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyMS43NzIxNjI1MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzNDkyNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBTeW1ib2wgQ29uc2lkZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgYXR0ZW50aW9uLiBgbWFjYl9wY3NfYW5fcmVzdGFydGAgZmVlbHMgbGlrZSBhIHNvbGlkIGNob2ljZSBhcyBhIGZvY3VzIHN5bWJvbC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGZvY3VzaW5nIG9uIGl0IGNvdWxkIHlpZWxkIHNvbWUgaW50ZXJlc3RpbmcgaW5zaWdodHMuIE5vdywgSSdtIGFsc28gY29uc2lkZXJpbmcgYG1hY2JfbWFjX2NvbmZpZ2AuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIHRvIGRpZyBpbnRvLiBJdCdzIHRpZWQgdG8gY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyBpdCB0aG9yb3VnaGx5IGNvdWxkIGJlIHJlYWxseSBoZWxwZnVsLiBMZXQgbWUgc2VlIGhvdyB0aGUgdHdvIHJlbGF0ZSBhbmQgd2hpY2ggb25lIGlzIG1vcmUgcmVsZXZhbnQsIG9yIHBlcmhhcHMsIGV4cGxvcmUgYm90aCBpbiB0YW5kZW0uIEl0IGRlcGVuZHMgb24gdGhlIGlzc3VlIEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyNC45MDU2NTY5NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3OTUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9tYWNfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTU9c3RhdGljIGludCBtYWNiX3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYxMC1cXHQgKiBNdXN0IGJlIHdyaXR0ZW4gYWZ0ZXIgUENTU0VMIGlzIHNldCBpbiBOQ0ZHUiB3aGljaCBpcyBkb25lIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MTE6XFx0ICogbWFjYl9tYWNfY29uZmlnKCksIG90aGVyd2lzZSB3cml0ZXMgd2lsbCBub3QgdGFrZSBlZmZlY3QuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MTItXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTcxOD1zdGF0aWMgaW50IG1hY2JfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NzM4OnN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz05NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbWFjYl9waHlsaW5rX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ni1cXHQubWFjX3NlbGVjdF9wY3MgPSBtYWNiX21hY19zZWxlY3RfcGNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6OTc3OlxcdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtOTc4LVxcdC5tYWNfbGlua19kb3duID0gbWFjYl9tYWNfbGlua19kb3duLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyNC45NjA0NTYyNjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0NDk2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AqKlxuXG5IbW0sIGBtYWNiX21hY19zZWxlY3RfcGNzYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgbmFtZSBpcyBzdGlja2luZyBpbiBteSBtaW5kLiBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgcmVsYXRlZCB0byBNQUMgYWRkcmVzcyBzZWxlY3Rpb24sIHBlcmhhcHMgZm9yIHRoZSBNQUNCIEV0aGVybmV0IGNvbnRyb2xsZXI/IE9yIGlzIHRoZSBcIlBDU1wiIGEgZGlmZmVyZW50IGFjcm9ueW0/IEFyZSB3ZSB0YWxraW5nIFBoeXNpY2FsIENvZGluZyBTdWJsYXllcj8gT3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbCwgbGlrZSBQcm9jZXNzb3IgQ29udHJvbCBTaWduYWxzLiBJIHNob3VsZCBsb29rIGludG8gd2hhdCB0aGF0IHNwZWNpZmljIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IGluIHRoaXMgYXJjaGl0ZWN0dXJlJ3MgY29kZSBiYXNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIGlkZW50aWZ5IGl0cyByb2xlIOKAkyBJcyB0aGlzIGRldmljZSBkcml2ZXIgb3IgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGNvZGU/IE15IGtub3dsZWRnZSBvZiBNQUNCIGNvbnRyb2xsZXIgaW50ZXJuYWxzIGlzIHByZXR0eSBzb2xpZCwgc28gYSBoaWdoLWxldmVsIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIHNob3VsZCBwcm92aWRlIHNvbWUgcXVpY2sgaW5zaWdodHMsIGJ1dCBrbm93aW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgc3RhY2sgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bGwgaW1wYWN0LiBJIHdpbGwgd2FudCB0byB0cmFjZSBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgd2hhdCBhbmQgd2h5IGl0IGlzIHByZXNlbnQsIGJ1dCBtb3JlIGltcG9ydGFudGx5IGhvdyBpdCBvcGVyYXRlcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjE0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjguNDI0OTU0NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODg2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTg5ND1zdGF0aWMgdm9pZCBtYWNiX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo5NjA6c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqbWFjYl9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk2MS1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo5NzY6XFx0Lm1hY19zZWxlY3RfcGNzID0gbWFjYl9tYWNfc2VsZWN0X3BjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ny1cXHQubWFjX2NvbmZpZyA9IG1hY2JfbWFjX2NvbmZpZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjguNDc5ODQ4MTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjg2OTkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgUHJvYmUgRnVuY3Rpb24ncyBQb3RlbnRpYWwqKlxuXG5IbW0sIHNvIHRoZSBwcm9tcHQgbWVudGlvbnMgYG1hY2JfbWlpX3Byb2JlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBhYm91dCAqdGhhdCogZnVuY3Rpb24/XCIgSXQncyBub3QgYSBnZW5lcmljIHF1ZXN0aW9uLiBJdCBpbXBsaWVzIEknbSBhbHJlYWR5IHdpdGhpbiBhIHNwZWNpZmljIGNvbnRleHQsIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyIGFuZCBpdHMgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIHByb2JpbmcgcHJvY2Vzcy4gTXkgbWluZCdzIHdvcmtpbmcgb24gYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBJJ20gcHJvYmFibHkgY29uc2lkZXJpbmcgYSBwYXJ0aWN1bGFyIHByb2JsZW0gb3IgZGVidWdnaW5nIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBwcm9iZSBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJJ20gbGlrZWx5IGFzc2Vzc2luZywgYmFzZWQgb24gdGhlIGluY29tcGxldGUgcGhyYXNlIFwiV2hhdCBhYm91dC4uLlwiLCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwcm9iZSBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjb250ZXh0IEkga25vdy4gSSBtaWdodCBiZSBjb25zaWRlcmluZyBhbHRlcm5hdGl2ZSBwcm9iZSBiZWhhdmlvcnMsIG9yIGxvb2tpbmcgaW50byB3aHkgaXQncyBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIHdvcmsgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjozMS43NDg1NDk1MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTI5MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIyPXN0YXRpYyB2b2lkIG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMS0vKiBiYXNlZCBvbiBhdTEwMDBfZXRoLiBjKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwMzI6c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMzk9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE0OS1cXHRpZiAoIW1kaW9fbnAgXFx1MDAyNlxcdTAwMjYgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsobnApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1MDpcXHRcXHRyZXR1cm4gbWFjYl9taWlfcHJvYmUoYnAtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE3NzpcXHRlcnIgPSBtYWNiX21paV9wcm9iZShicC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNzgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzEuODAzNDgyMDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzcwODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uKipcblxuSG1tLCAqbWFjYl9pbml0X2RmbHQqLi4uIHRoYXQgbmFtZSBmZWVscyBmYW1pbGlhci4gSXQncyBsaWtlbHkgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHByb2JhYmx5IGZvciBhIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIpIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyBwdXJwb3NlLiBJcyBpdCBhIGZhbGxiYWNrIG9wdGlvbiB3aGVuIHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBmYWlscz8gRG9lcyBpdCBwZXJmb3JtIGVzc2VudGlhbCByZWdpc3RlciBzZXR1cCBjb21tb24gYWNyb3NzIGEgcmFuZ2Ugb2YgTUFDIGltcGxlbWVudGF0aW9ucz8gSXMgdGhpcyBhIHN0YW5kYXJkIGRlZmluaXRpb24sIHBlcmhhcHMgaW4gYSBzdGFuZGFyZCBsaWJyYXJ5P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNjb3BlLiBEb2VzIHRoaXMgcm91dGluZSBoYW5kbGUgcG93ZXItdXAgY29uZmlndXJhdGlvbj8gQ2xvY2sgc2V0dXA/IEludGVycnVwdCBjb25maWd1cmF0aW9uPyBNZW1vcnkgYWxsb2NhdGlvbj8gRG9lcyBpdCBpbml0aWFsaXplIGFueSBzcGVjaWZpYyBETUEgY2hhbm5lbHM/IEFuZCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBfbm90XyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IENvdWxkIGl0IGxlYXZlIHRoZSBNQUMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLCBsZWFkaW5nIHRvIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGxpa2UgbmV0d29yayBkcm9wb3V0cyBvciBkYXRhIGNvcnJ1cHRpb24/XG5cbk15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IG5vdyBpbmNsdWRlczpcblxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBXaGVyZSBjYW4gSSBmaW5kIHRob3JvdWdoIGRvY3VtZW50YXRpb24gb24gYG1hY2JfaW5pdF9kZmx0YCBhbmQgaXRzIHNwZWNpZmljIGFyZ3VtZW50cyBhbmQgZWZmZWN0cz9cbiogICAqKlNvdXJjZSBDb2RlOioqIElmIGRvY3VtZW50YXRpb24gaXMgbGFja2luZywgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gZGV0YWlsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGJ1dCBhbHNvIHNlYXJjaCB3aGVyZSBpdCBpcyB1c2VkLlxuKiAgICoqSGFyZHdhcmUgRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFzc3VtcHRpb25zIG1hZGUgYnkgYG1hY2JfaW5pdF9kZmx0YD8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IG5lZWRzIHRvIGFjY291bnQgZm9yLCBvciBpcyBpdCBpbnRlbmRlZCB0byBiZSByZWxhdGl2ZWx5IGdlbmVyaWM/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgaXMgcGVyZm9ybWVkIHdpdGhpbiBgbWFjYl9pbml0X2RmbHRgPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgYW5kIGhvdyBhcmUgdGhlc2UgaGFuZGxlZCBieSB0aGUgY2FsbGluZyBjb2RlP1xuKiAgICoqUGVyZm9ybWFuY2UgSW1wbGljYXRpb25zOioqIElzIHRoaXMgYSB0aW1lLWNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHByb2Nlc3M/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgcnVubmluZyB0aGlzIGZ1bmN0aW9uP1xuXG5NeSBndXQgdGVsbHMgbWUgaXQncyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vaywgZXZlbiBpZiBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBpcyBnZW5lcmljLiBUaGVyZeKAmXMgYWxtb3N0IGNlcnRhaW5seSBzb21ldGhpbmcgaW4gdGhlcmUgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzYuMTU3MTkyMDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQxNzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX2luaXRfZGZsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDc1MT1zdGF0aWMgaW50IG1hY2JfY2xrX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGNsayAqKnBjbGssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NzY0OnN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00OTU3PXN0YXRpYyBpbnQgbWFjYl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ5NjItXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDk2MzpcXHRcXHRyZXR1cm4gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00OTY0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTQ2MD1zdGF0aWMgaW50IGZ1NTQwX2MwMDBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTQ2NjpcXHRyZXR1cm4gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTQ2OT1zdGF0aWMgaW50IGluaXRfcmVzZXRfb3B0aW9uYWwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTUxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU1MTc6XFx0cmV0ID0gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTE4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NTI2PXN0YXRpYyBpbnQgZXllcTVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTU0MjpcXHRyZXQgPSBtYWNiX2luaXRfZGZsdChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU1NDMtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzYuMjEyNjE0NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjA4NzQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgSW5pdGlhbGl6YXRpb24gUmVzZXQgT3B0aW9ucyoqXG5cbkhtbSwgc28gd2UncmUgbG9va2luZyBhdCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gTGV0J3Mgc2VlLi4uIHdlJ3ZlIGdvdCB0aGUgdXN1YWwgc2V0IG9mIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXMgaGFuZGxlZCwgSSBhc3N1bWUuIEJ1dCwgSSdtIHdvbmRlcmluZy4uLiB3aGF0IGFib3V0IHRoZSBlZGdlIGNhc2VzLCB0aGUgbW9yZSBudWFuY2VkIHNjZW5hcmlvcz8gV2hhdCBhYm91dCB3aGVuIHdlIHdhbnQgYSBtb3JlIHNlbGVjdGl2ZSByZXNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IFNwZWNpZmljYWxseSwgdGhhdCBmdW5jdGlvbiwgYGluaXRfcmVzZXRfb3B0aW9uYWxgLi4uIHRoYXQncyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGEgYml0LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcmVzZXQgZnVuY3Rpb24gdGhhdCBpc24ndCBhbHdheXMgc3RyaWN0bHkgcmVxdWlyZWQuIEFyZSB3ZSBoYW5kbGluZyB0aG9zZSBjYXNlcyBjb3JyZWN0bHk/IEFyZSB3ZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBzdWJ0bGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGJ5ICpub3QqIHJlc2V0dGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIG9yLCBjb252ZXJzZWx5LCBwb3RlbnRpYWxseSBvdmVyLXJlc2V0dGluZyB0aGluZ3Mgd2hlbiBhIG1vcmUgdGFyZ2V0ZWQgaW5pdGlhbGl6YXRpb24gd291bGQgc3VmZmljZT8gSXQncyBlYXN5IHRvIG92ZXJsb29rIHRoZXNlIG9wdGlvbmFsIHJlc2V0cywgYnV0IHRoZXkgY2FuIGJlIGNyaXRpY2FsIGZvciBhdm9pZGluZyBoYXJkLXRvLWRlYnVnIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggc3lzdGVtcyB3aXRoIGEgbG90IG9mIGludGVyZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmV2aXNpdCB0aGF0IGZ1bmN0aW9uIGFuZCByZWFsbHkgaW50ZXJyb2dhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBlbXBsb3llZC4gQXJlIHRoZSBhc3N1bXB0aW9ucyBhcm91bmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgIGNsZWFybHkgZG9jdW1lbnRlZD8gQXJlIHdlIGFkZXF1YXRlbHkgdGVzdGluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0IGlzIHVzZWQgb3IgYnlwYXNzZWQ/IEknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXRzIHB1cnBvc2UgYW5kIGVuc3VyZSBpdCdzIGludGVncmF0ZWQgc2VhbWxlc3NseSBpbnRvIHRoZSBleGlzdGluZyBpbml0aWFsaXphdGlvbiBmbG93IHdpdGhvdXQgb3BlbmluZyBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzkuNzczNDkxMzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA5NzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3Jlc2V0X29wdGlvbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU0NjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTQ3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjQ4LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjQ5OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjY3LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjY4OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXFx0LnVzcmlvID0gXFx1MDAyNm1wZnNfdXNyaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzAxOlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MDItXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTcyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHBpYzY0aHBzY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU3MzA6XFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTczMS1cXHQuanVtYm9fbWF4X2xlbiA9IDE2MzgzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjozOS44Mjk1OTM2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDY3NTYzMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgQW5hbHlzaXM6IENhZGVuY2UgTUFDQiBEcml2ZXIgZm9yIDEwMDBCQVNFWCBTdXBwb3J0KipcblxuT2theSwgc28gYGluaXRfcmVzZXRfb3B0aW9uYWxgIHRvdWNoZXMgY29uZmlndXJhdGlvbnMgZm9yIFp5bnFNUCwgTVBGUywgVmVyc2FsLCBhbmQgUElDNjRIUFNDLiBaeW5xTVAgaXMgc3VwcG9ydGVkIGluIFFFTVUsIHNwZWNpZmljYWxseSBgeGxueC16eW5xbXBgLCBzbyB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/XG5cblRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlci4gSSd2ZSB0YWtlbiBhIGNsb3NlIGxvb2ssIGFuZCB0aGUgY2hhbmdlcyAqc2VlbSogcHVyZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29uZmlndXJhdGlvbjogc2V0dGluZyBiaXRzIGluIHJlZ2lzdGVycywgc2VsZWN0aW5nIHRoZSBQQ1MsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZXJlIGlzbid0IGFueSBjb21wbGV4IGxvZ2ljLCBwYWNrZXQgcGFyc2luZywgb3Igc3RhdGUgbWFjaGluZSBpbnZvbHZlZC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgaGFyZHdhcmUgZHJpdmVyLCB0aG91Z2guIElzIHRoaXMgZnV6emFibGU/XG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGlzOiBzaW1wbGUgcmVnaXN0ZXIgcmVhZC93cml0ZSwgYml0IHNldHRpbmcsIHBvaW50ZXIgcmV0dXJucywgc2V0dGluZyBhIGJvb2xlYW4sIGlmIGNvbmRpdGlvbnMsIGFuZCBzZXR0aW5nIGEgYml0IGluIGEgYml0bWFwLiBOb3RoaW5nIGZhbmN5LiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBhZGRpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGFuZCBzZXR0aW5nIHRoZSBgUENTU0VMYCBiaXQgYXMgbmVjZXNzYXJ5LlxuXG5UaGUgcHJvbXB0IHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlLCByZWxhdGVkIHRvIGNvbnN0YW50IG9yIG1hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGFsdGVyYXRpb24sIG9yIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBIb3dldmVyLCB0aGlzIHBhdGNoICpkb2VzKiBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cgYnkgZW5hYmxpbmcgdGhlIG5ldyBQSFkgaW50ZXJmYWNlIG1vZGUgYW5kIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZS4gSXQgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc2luY2UgWnlucU1QIGlzIHN1cHBvcnRlZC4gVGhlIHBhdGNoIGlzIGFib3V0IGZ1bmN0aW9uYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBwcm9tcHQgc3RhdGVzIHRoZSBuZWdhdGl2ZSBjYXNlcywgYW5kIHRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIFwibmVnYXRpdmUgY2FzZXMuXCJcblxuVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBhbmFseXNpcyBsZWFkcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuV2FpdCwgYmVmb3JlIEkgZGVjaWRlLCBJIHNob3VsZCBkb3VibGUgY2hlY2suIElzIHRoZXJlIGFueSBwYXJ0aWN1bGFyIENPTkZJRyBvcHRpb24gcmVxdWlyZWQ/IGBNQUNCYCBhcHBlYXJzIHRvIGJlIHRoZSByZXF1aXJlZCBjb25maWcuIEFuZCBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIGF0IHBsYXksIHRoZSBjb25jbHVzaW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjo0OC44OTcxNTg5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNDMxMTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXFx0Ym9vbCBcXFwiVXNlIElFRUUgMTU4OCBod3N0YW1wXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjUxLjkzMTQ3ODExNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwMDI3OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYE1BQ0JgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZSB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIHRvIG1hcCBvdXQgd2hhdCBgTUFDQmAgcmVsaWVzIG9uIGJlY2F1c2UgYSBjaGFuZ2UgdGhlcmUgY2FuIGNhc2NhZGUuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHNlcnZpY2VzIHRoYXQgYE1BQ0JgIHB1bGxzIGRhdGEgb3Igc2V0dGluZ3MgZnJvbT8gSWYgaXQgZG9lcywgYSBjaGFuZ2UgaW4gYW55IG9mIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmFkdmVydGVudGx5IGJyZWFrIGBNQUNCYCBvciBpbnRyb2R1Y2Ugc3VidGxlLCB5ZXQgY3JpdGljYWwsIHNpZGUgZWZmZWN0cy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhpcyBtYXBwZWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjU0Ljk4MTUwNzg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA3NzQ3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0IkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjo1NS4zMTIyODc4NDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDI5MDc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNjb3Bpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGxpbmUgMjIuIFRoaXMgbGlrZWx5IHRvdWNoZXMgdXBvbiB0aGUgY29yZSBDYWRlbmNlIEV0aGVybmV0IE1BQyBkcml2ZXIncyBzZXR0aW5ncy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipGZWF0dXJlIHRvZ2dsZXMqKjogUG90ZW50aWFsIGhhcmR3YXJlIHZhcmlhbnRzLCBzdXBwb3J0IGZvciBzcGVjaWZpYyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLCBvciBwZXJoYXBzIGRpZmZlcmVudCBETUEgY29uZmlndXJhdGlvbnMuXG4qICAgKipEZXBlbmRlbmNpZXMqKjogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGFyZSByZXF1aXJlZCBvciBvcHRpb25hbCBmb3IgdGhlIENhZGVuY2UgRXRoZXJuZXQgZHJpdmVyIHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbG9jayBzZXR0aW5ncyBvciBidXMgaW50ZXJmYWNlIHJlcXVpcmVtZW50cz9cbiogICAqKkRlZmF1bHQgdmFsdWVzKio6IFdoYXQgYXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZXNlIG9wdGlvbnM/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBcIm91dC1vZi10aGUtYm94XCIgYmVoYXZpb3IgYW5kIHF1aWNrbHkgaWRlbnRpZnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBhZGp1c3RtZW50IGJhc2VkIG9uIHRoZSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHBsYXRmb3JtIEknbSB3b3JraW5nIHdpdGguXG4qICAgKipEb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzKio6IEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1jb21tZW50ZWQuIEdvb2QgZG9jdW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhlIHB1cnBvc2UsIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbGx5IHRoZSB0cmFkZS1vZmZzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGUgY29tbWVudHMgYWNjdXJhdGU/IEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byB0ZWxsIHByZXR0eSBxdWlja2x5LlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBBIHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIGRldGVybWluZSBpZiBhbnkgc2V0dGluZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvciBtaWdodCBjYXVzZSBpc3N1ZXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBvciBhdCBydW50aW1lLlxuXG5JJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gdGhlbiBpZGVudGlmeSB3aGF0IEkgbmVlZCB0byBhZGRyZXNzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6NTkuODEyNTgxOTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkNhZGVuY2UgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuICAgOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTY6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxcbiAgMTc6XFx0XFx0ICByZW1haW5pbmcgQ2FkZW5jZSBuZXR3b3JrIGNhcmQgcXVlc3Rpb25zLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXFxuICAxODpcXHRcXHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTUFDQlxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNjpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMjc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQXRtZWwgQVQzMiBhbmRcXG4gIDMwOlxcdFxcdCAgQVQ5MSBwYXJ0cy4gIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIENhZGVuY2UgR0VNIChHaWdhYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjU5LjgxMjY1NzMwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4NzYyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIGBNQUNCYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCdzIGNsZWFyLiBCdXQgdGhlbiBhIHRob3VnaHQgcG9wcyB1cDogaGFuZyBvbiwgd2hhdCBhYm91dCBgTUFDQl9QQ0lgPyBJdCBkYXducyBvbiBtZSB0aGF0IGlmIHdlJ3JlIGxvb2tpbmcgYXQgZnV6emluZyBwb3NzaWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXMgYSBQQ0kgZGV2aWNlLCB0aGF0IHNlY29uZCBvcHRpb24gbWlnaHQgYWN0dWFsbHkgYmUgdGhlIG1vcmUgcmVsZXZhbnQgb25lIHRvIGludmVzdGlnYXRlLiBHb3R0YSBrZWVwIGFsbCB0aGUgYW5nbGVzIGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0ZXN0aW5nIHN0cmF0ZWdpZXMuIFRoZXJlZm9yZSwgbGV0IG1lIGNvbnN1bHQgdGhlIHNvdXJjZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlIGFyb3VuZCBsaW5lIDQ1LCB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI3OjAyLjg0MTQyMTczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI3OjAyLjg0MTQ4Mjg2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ4Njg1NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgYE1BQ0JfUENJYCBjb25maWd1cmF0aW9uIGlzIGEgc21hcnQgbW92ZS4gSXQgd3JhcHMgdGhlIHN0YW5kYXJkIE1BQ0IgZHJpdmVyIGFuZCwgaW1wb3J0YW50bHksIG1ha2VzIGl0IGZ1enphYmxlIHZpYSBTeXprYWxsZXIncyBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgTUFDQmAgYW5kIGBNQUNCX1BDSWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTXkgaW5pdGlhbCBzY2FuIHR1cm5lZCB1cCBhIGZldyBpbnRlcmVzdGluZyBjYW5kaWRhdGVzOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBpbml0X3Jlc2V0X29wdGlvbmFsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgYSBjYWxsYmFjayB3aXRoaW4gYG1hY2JfY29uZmlnYC4gYG1hY2JfaW5pdF9kZmx0YCBzZWVtcyB0byBiZSBhbm90aGVyIGNhbGxiYWNrIG9yIGlzIGNhbGxlZCBkaXJlY3RseS4gIGBtYWNiX21paV9wcm9iZWAgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBwcm9iZSBzZXF1ZW5jZS4gIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCwgYG1hY2JfbWFjX2NvbmZpZ2AsIGFuZCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AgYXJlIGJlaW5nIGNhbGxlZCBieSBwaHlsaW5rLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkNvbnNpZGVyaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIEkgaW5pdGlhbGx5IGRlY2lkZWQgdG8gbGlzdCBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGFuZCBgbWFjYl9taWlfcHJvYmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIHJlLWV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMsIGFuZCBpdCdzIGNsZWFyIEkndmUgZ290IHRvIHRha2UgYSBicm9hZGVyIHZpZXcuIFRoZSBkaWZmIGNvbmZpcm1zIHRob3NlLCBidXQgYWxzbyBpbmNsdWRlcyBgbWFjYl9pbml0X2RmbHRgIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuXG5cblNvLCBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbTogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLlxuXG5BIGJyaWVmIHNhbml0eSBjaGVjayBpcyB3YXJyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIFRoZSBuYW1lIGlzIGEgbGl0dGxlIGdlbmVyaWMsIGJ1dCBpdCBpcyBzdGF0aWMgdG8gYG1hY2JfbWFpbi5jYCwgd2hpY2ggc2hvdWxkIG1ha2UgaXQgdW5pcXVlIGVub3VnaCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzowOS42OTAxNzAwNDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDkyNzc4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF9yZXNldF9vcHRpb25hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU0NjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTQ3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjQ4LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjQ5OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjY3LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjY4OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXFx0LnVzcmlvID0gXFx1MDAyNm1wZnNfdXNyaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzAxOlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MDItXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTcyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHBpYzY0aHBzY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU3MzA6XFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTczMS1cXHQuanVtYm9fbWF4X2xlbiA9IDE2MzgzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzoxMS45Mzk0NTI1NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTQ0NDQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRnV6emluZyBSZWNvbW1lbmRhdGlvbjogQ2FkZW5jZSBNQUNCIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBmaWxlLiBNeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbW9kaWZ5aW5nIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGR1cmluZyBib3RoIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMsIGFzIG1hbmFnZWQgYnkgcGh5bGluay4gRnVydGhlcm1vcmUsIHRoaXMgZHJpdmVyIGlzIGFjY2Vzc2libGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IFFFTVUsIHdoaWNoIGVtdWxhdGVzIHRoZSBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcywgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB1c2luZyB0aGUgUENJIHdyYXBwZXIgKGBNQUNCX1BDSWApLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggcmVhY2hhYmxlIGRyaXZlciBsb2dpYyB0aGF0IGhhcyB1bmRlcmdvbmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBlbmFibGUgZnV6emluZyBmb3IgdGhlIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCBjb25maWd1cmF0aW9ucy4gQW5kIHRvIGd1aWRlIHRoZSBmdXp6aW5nIHByb2Nlc3MgZWZmZWN0aXZlbHksIEknbGwgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzExLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzoxOC45ODA4OTg2MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY0ODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3Bjc19hbl9yZXN0YXJ0XCIsXG4gICAgXCJtYWNiX21hY19jb25maWdcIixcbiAgICBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gICAgXCJtYWNiX2luaXRfZGZsdFwiLFxuICAgIFwiaW5pdF9yZXNldF9vcHRpb25hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3Bjc19hbl9yZXN0YXJ0XCIsXG4gICAgXCJtYWNiX21hY19jb25maWdcIixcbiAgICBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gICAgXCJtYWNiX2luaXRfZGZsdFwiLFxuICAgIFwiaW5pdF9yZXNldF9vcHRpb25hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-15 05:57:53 +0000 UTC FinishedAt: 2026-07-15 06:27:20 +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": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "8a468ff4-aad6-441d-9ab1-6d636bccb9e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_pcs_an_restart", "macb_mac_config", "macb_mac_select_pcs", "macb_mii_probe", "macb_init_dflt", "init_reset_optional" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX3Bjc19hbl9yZXN0YXJ0JiMzNDssCiAgICAmIzM0O21hY2JfbWFjX2NvbmZpZyYjMzQ7LAogICAgJiMzNDttYWNiX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O21hY2JfbWlpX3Byb2JlJiMzNDssCiAgICAmIzM0O21hY2JfaW5pdF9kZmx0JiMzNDssCiAgICAmIzM0O2luaXRfcmVzZXRfb3B0aW9uYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCBpbnRlcmZhY2UgbW9kZSB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgbW9kaWZpZXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcyAodmlhIHBoeWxpbmspLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHdoaWNoIGVtdWxhdGVzIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzKSBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHZpYSB0aGUgUENJIHdyYXBwZXIgKE1BQ0JfUENJKS4gU2luY2UgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYywgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGIzYzg5MTY3MzM5ZWE0MGE5NTg4OGYxNThmYWU4ZmU0MWJjZjRjMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjoyNjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggZDM5NGYxZjQzYjY4NWUuLjI4NGEzYjAzZjhjNzc1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTU4Myw3ICYjNDM7NTgzLDEzIEBAIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuIFxuIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4ge1xuLVx0LyogTm90IHN1cHBvcnRlZCAqL1xuJiM0MztcdHN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtYWNiLCBwaHlsaW5rX3NnbWlpX3Bjcyk7XG4mIzQzO1x0dTMyIG9sZCwgbmV3O1xuJiM0MztcbiYjNDM7XHRvbGQgPSBnZW1fcmVhZGwoYnAsIFBDU0NOVFJMKTtcbiYjNDM7XHRuZXcgPSBvbGQgfCBCTUNSX0FOUkVTVEFSVDtcbiYjNDM7XHRpZiAob2xkICE9IG5ldylcbiYjNDM7XHRcdGdlbV93cml0ZWwoYnAsIFBDU0NOVFJMLCBuZXcpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hY2JfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbkBAIC03NTAsNyAmIzQzOzc1Niw5IEBAIHN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4gXHRcdGN0cmwgXHUwMDI2PSB+KEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCkpO1xuIFx0XHRuY3IgXHUwMDI2PSB+R0VNX0JJVChFTkFCTEVfSFNfTUFDKTtcbiBcbi1cdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xuJiM0MztcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuIFx0XHRcdGN0cmwgfD0gR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKTtcbiBcdFx0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKSB7XG4gXHRcdFx0Y3RybCB8PSBHRU1fQklUKFBDU1NFTCk7XG5AQCAtOTU3LDcgJiM0Mzs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFxuIFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4gXHRcdHJldHVybiBcdTAwMjZicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3M7XG4tXHRlbHNlIGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuJiM0MztcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4mIzQzO1x0ICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiBcdFx0cmV0dXJuIFx1MDAyNmJwLVx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbkBAIC0xMDI1LDEzICYjNDM7MTAzNCwxNSBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3Bjc19vcHM7XG4mIzQzO1x0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7XG4gXHRicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3VzeF9wY3Nfb3BzO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZWRldjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiYjNDM7XHQgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcucG9sbF9maXhlZF9zdGF0ZSA9IHRydWU7XG4gXHRcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmdldF9maXhlZF9zdGF0ZSA9IG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZTtcbiBcdFx0LyogVGhlIFBDU0FVVE9ORUcgYml0IGluIFBDU0NOVFJMIGlzIG9uIG91dCBvZiByZXNldC4gU2V0dGluZ1xuQEAgLTEwNjAsOSAmIzQzOzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4tXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUENTKVxuJiM0MztcdFx0aWYgKGJwLVx1MDAzZWNhcHMgXHUwMDI2IE1BQ0JfQ0FQU19QQ1MpIHtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4mIzQzO1x0XHRcdFx0ICBicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiBcdFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpIHtcbiBcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLFxuQEAgLTQ5MzEsNyAmIzQzOzQ5NDUsOSBAQCBzdGF0aWMgaW50IG1hY2JfaW5pdF9kZmx0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHQvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqL1xuIFx0dmFsID0gbWFjYl9tZGNfY2xrX2RpdihicCk7XG4gXHR2YWwgfD0gbWFjYl9kYncoYnApO1xuLVx0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4mIzQzO1x0XHR2YWwgfD0gR0VNX0JJVChQQ1NTRUwpO1xuJiM0MztcdGVsc2UgaWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuIFx0XHR2YWwgfD0gR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKTtcbiBcdG1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTtcbiBcbkBAIC01NDU2LDcgJiM0Mzs1NDcyLDggQEAgc3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuJiM0MztcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbiYjNDM7XHQgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiBcdFx0LyogRW5zdXJlIFBIWSBkZXZpY2UgdXNlZCBpbiBTR01JSSBtb2RlIGlzIHJlYWR5ICovXG4gXHRcdGJwLVx1MDAzZXBoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgTlVMTCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDQiYjMzQ7LAogICAgJiMzNDtNQUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY2JfcGNzX2FuX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfY29uZmlnJiMzNDssCiAgICAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAgICYjMzQ7bWFjYl9pbml0X2RmbHQmIzM0OywKICAgICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiM2M4OTE2NzMzOWVhNDBhOTU4ODhmMTU4ZmFlOGZlNDFiY2Y0YzE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMTUgMDY6MjY6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwppbmRleCBkMzk0ZjFmNDNiNjg1ZS4uMjg0YTNiMDNmOGM3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwpAQCAtNTgzLDcgJiM0Mzs1ODMsMTMgQEAgc3RhdGljIHZvaWQgbWFjYl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiAKIHN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiB7Ci0JLyogTm90IHN1cHBvcnRlZCAqLwomIzQzOwlzdHJ1Y3QgbWFjYiAqYnAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgbWFjYiwgcGh5bGlua19zZ21paV9wY3MpOwomIzQzOwl1MzIgb2xkLCBuZXc7CiYjNDM7CiYjNDM7CW9sZCA9IGdlbV9yZWFkbChicCwgUENTQ05UUkwpOwomIzQzOwluZXcgPSBvbGQgfCBCTUNSX0FOUkVTVEFSVDsKJiM0MzsJaWYgKG9sZCAhPSBuZXcpCiYjNDM7CQlnZW1fd3JpdGVsKGJwLCBQQ1NDTlRSTCwgbmV3KTsKIH0KIAogc3RhdGljIGludCBtYWNiX3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsCkBAIC03NTAsNyAmIzQzOzc1Niw5IEBAIHN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCiAJCWN0cmwgJmFtcDs9IH4oR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKSk7CiAJCW5jciAmYW1wOz0gfkdFTV9CSVQoRU5BQkxFX0hTX01BQyk7CiAKLQkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKSB7CiYjNDM7CQkJY3RybCB8PSBHRU1fQklUKFBDU1NFTCk7CiYjNDM7CQl9IGVsc2UgaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiAJCQljdHJsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7CiAJCX0gZWxzZSBpZiAoc3RhdGUtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHsKIAkJCWN0cmwgfD0gR0VNX0JJVChQQ1NTRUwpOwpAQCAtOTU3LDcgJiM0Mzs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCiAJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpCiAJCXJldHVybiAmYW1wO2JwLSZndDtwaHlsaW5rX3VzeF9wY3M7Ci0JZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKIAkJcmV0dXJuICZhbXA7YnAtJmd0O3BoeWxpbmtfc2dtaWlfcGNzOwogCWVsc2UKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDI1LDEzICYjNDM7MTAzNCwxNSBAQCBzdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWJwLSZndDtwaHlsaW5rX3NnbWlpX3Bjcy5vcHMgPSAmYW1wO21hY2JfcGh5bGlua19wY3Nfb3BzOwomIzQzOwlicC0mZ3Q7cGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7CiAJYnAtJmd0O3BoeWxpbmtfdXN4X3Bjcy5vcHMgPSAmYW1wO21hY2JfcGh5bGlua191c3hfcGNzX29wczsKIAogCWJwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO2Rldi0mZ3Q7ZGV2OwogCWJwLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7CiAJYnAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKIAotCWlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgIGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkgewogCQlicC0mZ3Q7cGh5bGlua19jb25maWcucG9sbF9maXhlZF9zdGF0ZSA9IHRydWU7CiAJCWJwLSZndDtwaHlsaW5rX2NvbmZpZy5nZXRfZml4ZWRfc3RhdGUgPSBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGU7CiAJCS8qIFRoZSBQQ1NBVVRPTkVHIGJpdCBpbiBQQ1NDTlRSTCBpcyBvbiBvdXQgb2YgcmVzZXQuIFNldHRpbmcKQEAgLTEwNjAsOSAmIzQzOzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCQkJICBicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCQlwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCi0JCWlmIChicC0mZ3Q7Y2FwcyAmYW1wOyBNQUNCX0NBUFNfUENTKQomIzQzOwkJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19QQ1MpIHsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwKJiM0MzsJCQkJICBicC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwogCQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKIAkJCQkgIGJwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CQl9CiAKIAkJaWYgKGJwLSZndDtjYXBzICZhbXA7IE1BQ0JfQ0FQU19ISUdIX1NQRUVEKSB7CiAJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLApAQCAtNDkzMSw3ICYjNDM7NDk0NSw5IEBAIHN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqLwogCXZhbCA9IG1hY2JfbWRjX2Nsa19kaXYoYnApOwogCXZhbCB8PSBtYWNiX2RidyhicCk7Ci0JaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpCiYjNDM7CQl2YWwgfD0gR0VNX0JJVChQQ1NTRUwpOwomIzQzOwllbHNlIGlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpCiAJCXZhbCB8PSBHRU1fQklUKFNHTUlJRU4pIHwgR0VNX0JJVChQQ1NTRUwpOwogCW1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTsKIApAQCAtNTQ1Niw3ICYjNDM7NTQ3Miw4IEBAIHN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAotCWlmIChicC0mZ3Q7cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKJiM0MzsJaWYgKGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHwKJiM0MzsJICAgIGJwLSZndDtwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkgewogCQkvKiBFbnN1cmUgUEhZIGRldmljZSB1c2VkIGluIFNHTUlJIG1vZGUgaXMgcmVhZHkgKi8KIAkJYnAtJmd0O3BoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldCgmYW1wO3BkZXYtJmd0O2RldiwgTlVMTCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE5OQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENhZGVuY2UgTUFDQiBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwga2V5IGZ1bmN0aW9uczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBCYXNpY2FsbHksIHRoaXMgaXMgYSBmYWlybHkgbG93LWxldmVsIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBjb250cm9sbGVyLCB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBqdW1wcyB0byBtaW5kIGlzOiBjYW4gSSBlZmZlY3RpdmVseSB0ZXN0IHRoaXMgdGhpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KClR5cGljYWxseSwgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyBhcmUgYSBwYWluIHRvIHdvcmsgd2l0aCB1bmxlc3MgeW91IGhhdmUgYSBnb29kIGVtdWxhdG9yLiBZb3UgcmVhbGx5IG5lZWQgc29tZXRoaW5nIHRoYXQgY2FuIGFjY3VyYXRlbHkgc2ltdWxhdGUgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdG8gZ2V0IG1lYW5pbmdmdWwgdGVzdCByZXN1bHRzLiBJIGRvdWJ0IEkgY2FuIGp1c3QgZmlyZSB1cCBhIHN0YW5kYXJkIFZNIGFuZCBleHBlY3QgaXQgdG8gd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYW4gZW11bGF0b3IgdGhhdCBoYXMgdGhlIGFwcHJvcHJpYXRlIGhhcmR3YXJlIHN1cHBvcnQuCgpMZXQmIzM5O3Mgc2Vl4oCmIERvZXMgUUVNVSBzdXBwb3J0IHRoZSBDYWRlbmNlIE1BQ0I/IEkmIzM5O20gcHJldHR5IHN1cmUgSSYjMzk7dmUgc2VlbiBpdCBtZW50aW9uZWQgc29tZXdoZXJlLi4uIEFoYSwgaGVyZSB3ZSBnbywgUUVNVSBoYXMgYGh3L25ldC9jYWRlbmNlX2dlbS5jYC4gVGhpcyBpcyBwcm9taXNpbmchIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlcmUgKmlzKiBhIFFFTVUgbW9kZWwgZm9yIHRoZSBDYWRlbmNlIEdFTSwgd2hpY2ggaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBNQUNCLiBUaGlzIG1lYW5zIGl0ICptaWdodCogYmUgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCB3aGljaCBpcyBncmVhdC4KCk5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGhvdyB0byBlbmFibGUgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgUUVNVSBNQUNCL0dFTSBtb2RlbCBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQgc28gdGhhdCBJIGNhbiBhY3R1YWxseSB0ZXN0IHRoaXMgZHJpdmVyIGluIFFFTVUuIFRoYXQgaXMgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTA2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTM1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIE1BQ0IgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWcgaXMgYE1BQ0JgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIENhZGVuY2UgR0VNIGRyaXZlciBpcyBldmVuIHJlYWNoYWJsZSwgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gUUVNVSBzdXBwb3J0cyB0aGUgYGNhZGVuY2VfZ2VtYCBkZXZpY2UsIGFuZCBpZiBpdCYjMzk7cyB0aGVyZSBvbiBhbiBBUk0gYm9hcmQgKGxpa2UgdGhlIGB4aWxpbngtenlucS1hOWApLCB0aGUgZHJpdmVyIHNob3VsZCBwcm9iZS4gVGhlIGBNQUNCX1BDSWAgb3B0aW9uIG1ha2VzIG1lIHRoaW5rIGFib3V0IFBDSSBkZXZpY2VzIGFuZCB3aGV0aGVyIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZW07IEkga25vdyBpdCBkb2VzIGhhbmRsZSBzb21lIGVtdWxhdGVkIFBDSSBzdHVmZiBvciB1c2VzIHNvbWUgZ2VuZXJpY3MsIGJ1dCBub3JtYWxseSBpdCYjMzk7cyBtb3JlIGZvY3VzZWQgb24gc3lzY2FsbHMuIFN5emthbGxlciYjMzk7cyBub3QgZ290IGEgZ2VuZXJpYyBQQ0kgaW5qZWN0b3IuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGRyaXZlciB3b3VsZCBiZSByZWFjaGVkIGJ5IHN5emthbGxlci4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gY29uc2lkZXIgJiMzNDtDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCYjMzQ7IHNvIHJlYWNoYWJpbGl0eSBpcyBrZXkuCgpJZiBRRU1VIGhhcyBgY2FkZW5jZV9nZW1gLCB0aGVuIHRoYXQmIzM5O3MgYSBwb3NpdGl2ZSBzaWduYWwuIEFuZCBRRU1VICpkb2VzKiBoYXZlIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIHNvIGl0IHNlZW1zIHJlYWNoYWJsZS4gU28gSSYjMzk7bSB0aGlua2luZyBpdCYjMzk7cyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBhc3Nlc3MgdGhlIHBhdGNoIGl0c2VsZi4gVGhlIHBhdGNoIGFkZHMgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHN1cHBvcnQuIEl0IHRvdWNoZXMgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBCYXNpY2FsbHksIGl0JiMzOTtzIGFsbCBhYm91dCBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiwgcmlnaHQ/IGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBpcyBmb3IgcmVzdGFydGluZyBhdXRvLW5lZ290aWF0aW9uLCBgbWFjYl9tYWNfY29uZmlnYCBjb25maWd1cmVzIHRoZSBNQUMsIGFuZCBzbyBvbi4KClRoZSBmdW5jdGlvbnMgYXJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHVwL2Rvd24gZXZlbnRzLCB3aGljaCBhcmUgbm9ybWFsbHkgaG93IHN5emthbGxlciBvcGVyYXRlcy4KCkJ1dCBoZXJlJiMzOTtzIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGZ1bmN0aW9ucyAqd29ydGgqIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBpcyBiYXNpY2FsbHkganVzdCByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzLiBTYW1lIHdpdGggYG1hY2JfbWFjX2NvbmZpZ2AuIGBtYWNiX21hY19zZWxlY3RfcGNzYCByZXR1cm5zIGEgcG9pbnRlci4gTm90aGluZyBjb21wbGV4IGhlcmUuIGBtaWlfcHJvYmVgIHNldHRpbmcgc29tZSBib29sZWFucywgc2V0dGluZyBzb21lIGJpdHMsIGluaXQgZGVmYXVsdHMgaXMgc2V0dGluZyBtb3JlIGJpdHMuIGBpbml0X3Jlc2V0X29wdGlvbmFsYCBjYWxscyBgZGV2bV9waHlfb3B0aW9uYWxfZ2V0YC4gSXQmIzM5O3MgdmVyeSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uOyBubyBjb21wbGV4IGxvZ2ljLCBubyBwYWNrZXQgcGFyc2luZy4KClRoZSBwcm9tcHQgc2F5cyBJIHNob3VsZCBjb25zaWRlciB0aGUgcGF0Y2ggZm9yICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgaXQgaGFzIG1vZGlmaWNhdGlvbnMgdG86IERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLi4uIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4KCkkgdGhpbmssIHRoZSBrZXkgdGhpbmcgZm9yIGZ1enppbmcgaXMgcmVhY2hpbmcgdGhlIGRyaXZlciBjb2RlLiBJdCAqY2FuKiBiZSByZWFjaGVkIGlmIHRoZSBkZXZpY2UgaXMgcHJvYmVkLCB0aGUgZnVuY3Rpb25zIGNhbiBiZSB0cmlnZ2VyZWQuCgpTbywgKmhvdyogY2FuIHN5emthbGxlciB0cmlnZ2VyIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBzcGVjaWZpY2FsbHk/IFdlbGwsIGl0IG5lZWRzIHBoeWxpbmsgdG8gY2FsbCBpdC4gU3l6a2FsbGVyIG1heSBiZSBhYmxlIHRvIHJlYWNoIHRoYXQsIGFuZCBpcyB0aGUga2V5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAoZXRodG9vbCkgb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFuZ2xlISBUaGUgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHdvcnRoIGZvY3Vzc2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3Bjc19hbl9yZXN0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3Mz1zdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg0OnN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgbWFjYl9waHlsaW5rX3Bjc19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MzItXHQucGNzX2dldF9zdGF0ZSA9IG1hY2JfcGNzX2dldF9zdGF0ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjMzOlx0LnBjc19hbl9yZXN0YXJ0ID0gbWFjYl9wY3NfYW5fcmVzdGFydCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjM0LVx0LnBjc19jb25maWcgPSBtYWNiX3Bjc19jb25maWcsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUyOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFN5bWJvbCBDb25zaWRlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbi4gYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2UgYXMgYSBmb2N1cyBzeW1ib2wuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhbmQgZm9jdXNpbmcgb24gaXQgY291bGQgeWllbGQgc29tZSBpbnRlcmVzdGluZyBpbnNpZ2h0cy4gTm93LCBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgYG1hY2JfbWFjX2NvbmZpZ2AuIFRoYXQmIzM5O3MgYW5vdGhlciBwb3RlbnRpYWwgYXJlYSB0byBkaWcgaW50by4gSXQmIzM5O3MgdGllZCB0byBjb25maWd1cmF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0IHRob3JvdWdobHkgY291bGQgYmUgcmVhbGx5IGhlbHBmdWwuIExldCBtZSBzZWUgaG93IHRoZSB0d28gcmVsYXRlIGFuZCB3aGljaCBvbmUgaXMgbW9yZSByZWxldmFudCwgb3IgcGVyaGFwcywgZXhwbG9yZSBib3RoIGluIHRhbmRlbS4gSXQgZGVwZW5kcyBvbiB0aGUgaXNzdWUgSSBhbSB0cnlpbmcgdG8gcmVzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX21hY19jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTk1PXN0YXRpYyBpbnQgbWFjYl9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjEwLVx0ICogTXVzdCBiZSB3cml0dGVuIGFmdGVyIFBDU1NFTCBpcyBzZXQgaW4gTkNGR1Igd2hpY2ggaXMgZG9uZSBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MTE6XHQgKiBtYWNiX21hY19jb25maWcoKSwgb3RoZXJ3aXNlIHdyaXRlcyB3aWxsIG5vdCB0YWtlIGVmZmVjdC5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjEyLVx0ICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz03MTg9c3RhdGljIGludCBtYWNiX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjczODpzdGF0aWMgdm9pZCBtYWNiX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ni1cdC5tYWNfc2VsZWN0X3BjcyA9IG1hY2JfbWFjX3NlbGVjdF9wY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk3NzpcdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NzgtXHQubWFjX2xpbmtfZG93biA9IG1hY2JfbWFjX2xpbmtfZG93bixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjE0CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBtYWNiX21hY19zZWxlY3RfcGNzYCoqCgpIbW0sIGBtYWNiX21hY19zZWxlY3RfcGNzYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgbmFtZSBpcyBzdGlja2luZyBpbiBteSBtaW5kLiBJJiMzOTttIGltbWVkaWF0ZWx5IHdvbmRlcmluZyBhYm91dCBpdHMgcHVycG9zZSBhbmQgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIElzIGl0IHJlbGF0ZWQgdG8gTUFDIGFkZHJlc3Mgc2VsZWN0aW9uLCBwZXJoYXBzIGZvciB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyPyBPciBpcyB0aGUgJiMzNDtQQ1MmIzM0OyBhIGRpZmZlcmVudCBhY3JvbnltPyBBcmUgd2UgdGFsa2luZyBQaHlzaWNhbCBDb2RpbmcgU3VibGF5ZXI/IE9yIHNvbWV0aGluZyBjb21wbGV0ZWx5IG9ydGhvZ29uYWwsIGxpa2UgUHJvY2Vzc29yIENvbnRyb2wgU2lnbmFscy4gSSBzaG91bGQgbG9vayBpbnRvIHdoYXQgdGhhdCBzcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbiBoaW50cyBhdCBpbiB0aGlzIGFyY2hpdGVjdHVyZSYjMzk7cyBjb2RlIGJhc2UuIEl04oCZcyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkgaXRzIHJvbGUg4oCTIElzIHRoaXMgZGV2aWNlIGRyaXZlciBvciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29kZT8gTXkga25vd2xlZGdlIG9mIE1BQ0IgY29udHJvbGxlciBpbnRlcm5hbHMgaXMgcHJldHR5IHNvbGlkLCBzbyBhIGhpZ2gtbGV2ZWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgc2hvdWxkIHByb3ZpZGUgc29tZSBxdWljayBpbnNpZ2h0cywgYnV0IGtub3dpbmcgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgbmV0d29yayBzdGFjayBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgZnVsbCBpbXBhY3QuIEkgd2lsbCB3YW50IHRvIHRyYWNlIGNhbGxzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSB3aGF0IGFuZCB3aHkgaXQgaXMgcHJlc2VudCwgYnV0IG1vcmUgaW1wb3J0YW50bHkgaG93IGl0IG9wZXJhdGVzIGFuZCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9ODk0PXN0YXRpYyB2b2lkIG1hY2JfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk2MDpzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NjEtXHRcdFx0XHRcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjk3NjpcdC5tYWNfc2VsZWN0X3BjcyA9IG1hY2JfbWFjX3NlbGVjdF9wY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ny1cdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzkxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQSBQcm9iZSBGdW5jdGlvbiYjMzk7cyBQb3RlbnRpYWwqKgoKSG1tLCBzbyB0aGUgcHJvbXB0IG1lbnRpb25zIGBtYWNiX21paV9wcm9iZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgYWJvdXQgKnRoYXQqIGZ1bmN0aW9uPyYjMzQ7IEl0JiMzOTtzIG5vdCBhIGdlbmVyaWMgcXVlc3Rpb24uIEl0IGltcGxpZXMgSSYjMzk7bSBhbHJlYWR5IHdpdGhpbiBhIHNwZWNpZmljIGNvbnRleHQsIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyIGFuZCBpdHMgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIHByb2JpbmcgcHJvY2Vzcy4gTXkgbWluZCYjMzk7cyB3b3JraW5nIG9uIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLCBhbmQgSSYjMzk7bSBwcm9iYWJseSBjb25zaWRlcmluZyBhIHBhcnRpY3VsYXIgcHJvYmxlbSBvciBkZWJ1Z2dpbmcgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHByb2JlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJJiMzOTttIGxpa2VseSBhc3Nlc3NpbmcsIGJhc2VkIG9uIHRoZSBpbmNvbXBsZXRlIHBocmFzZSAmIzM0O1doYXQgYWJvdXQuLi4mIzM0OywgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgY29udGV4dCBJIGtub3cuIEkgbWlnaHQgYmUgY29uc2lkZXJpbmcgYWx0ZXJuYXRpdmUgcHJvYmUgYmVoYXZpb3JzLCBvciBsb29raW5nIGludG8gd2h5IGl0JiMzOTtzIHBvdGVudGlhbGx5IGZhaWxpbmcgdG8gd29yayBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MTAyMj1zdGF0aWMgdm9pZCBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDMxLS8qIGJhc2VkIG9uIGF1MTAwMF9ldGguIGMqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoxMDMyOnN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMTM5PXN0YXRpYyBpbnQgbWFjYl9taWlfaW5pdChzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTQ5LVx0aWYgKCFtZGlvX25wIFx1MDAyNlx1MDAyNiBvZl9waHlfaXNfZml4ZWRfbGluayhucCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjExNTA6XHRcdHJldHVybiBtYWNiX21paV9wcm9iZShicC1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTUxLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE3Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE3NzpcdGVyciA9IG1hY2JfbWlpX3Byb2JlKGJwLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNzgtXHRpZiAoZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uKioKCkhtbSwgKm1hY2JfaW5pdF9kZmx0Ki4uLiB0aGF0IG5hbWUgZmVlbHMgZmFtaWxpYXIuIEl0JiMzOTtzIGxpa2VseSBhIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgcHJvYmFibHkgZm9yIGEgTUFDIChNZWRpYSBBY2Nlc3MgQ29udHJvbGxlcikgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyBwdXJwb3NlLiBJcyBpdCBhIGZhbGxiYWNrIG9wdGlvbiB3aGVuIHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBmYWlscz8gRG9lcyBpdCBwZXJmb3JtIGVzc2VudGlhbCByZWdpc3RlciBzZXR1cCBjb21tb24gYWNyb3NzIGEgcmFuZ2Ugb2YgTUFDIGltcGxlbWVudGF0aW9ucz8gSXMgdGhpcyBhIHN0YW5kYXJkIGRlZmluaXRpb24sIHBlcmhhcHMgaW4gYSBzdGFuZGFyZCBsaWJyYXJ5PwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBzY29wZS4gRG9lcyB0aGlzIHJvdXRpbmUgaGFuZGxlIHBvd2VyLXVwIGNvbmZpZ3VyYXRpb24/IENsb2NrIHNldHVwPyBJbnRlcnJ1cHQgY29uZmlndXJhdGlvbj8gTWVtb3J5IGFsbG9jYXRpb24/IERvZXMgaXQgaW5pdGlhbGl6ZSBhbnkgc3BlY2lmaWMgRE1BIGNoYW5uZWxzPyBBbmQgY3JpdGljYWxseSwgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZXMgb2YgX25vdF8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBDb3VsZCBpdCBsZWF2ZSB0aGUgTUFDIGluIGFuIHVuZGVmaW5lZCBzdGF0ZSwgbGVhZGluZyB0byB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLCBsaWtlIG5ldHdvcmsgZHJvcG91dHMgb3IgZGF0YSBjb3JydXB0aW9uPwoKTXkgaW1tZWRpYXRlIG1lbnRhbCBjaGVja2xpc3Qgbm93IGluY2x1ZGVzOgoKKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBXaGVyZSBjYW4gSSBmaW5kIHRob3JvdWdoIGRvY3VtZW50YXRpb24gb24gYG1hY2JfaW5pdF9kZmx0YCBhbmQgaXRzIHNwZWNpZmljIGFyZ3VtZW50cyBhbmQgZWZmZWN0cz8KKiAgICoqU291cmNlIENvZGU6KiogSWYgZG9jdW1lbnRhdGlvbiBpcyBsYWNraW5nLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gZGV0YWlsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLCBidXQgYWxzbyBzZWFyY2ggd2hlcmUgaXQgaXMgdXNlZC4KKiAgICoqSGFyZHdhcmUgRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFzc3VtcHRpb25zIG1hZGUgYnkgYG1hY2JfaW5pdF9kZmx0YD8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IG5lZWRzIHRvIGFjY291bnQgZm9yLCBvciBpcyBpdCBpbnRlbmRlZCB0byBiZSByZWxhdGl2ZWx5IGdlbmVyaWM/CiogICAqKkVycm9yIEhhbmRsaW5nOioqIFdoYXQga2luZCBvZiBlcnJvciBjaGVja2luZyBpcyBwZXJmb3JtZWQgd2l0aGluIGBtYWNiX2luaXRfZGZsdGA/IERvZXMgaXQgcmV0dXJuIGVycm9yIGNvZGVzLCBhbmQgaG93IGFyZSB0aGVzZSBoYW5kbGVkIGJ5IHRoZSBjYWxsaW5nIGNvZGU/CiogICAqKlBlcmZvcm1hbmNlIEltcGxpY2F0aW9uczoqKiBJcyB0aGlzIGEgdGltZS1jcml0aWNhbCBpbml0aWFsaXphdGlvbiBwcm9jZXNzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHJ1bm5pbmcgdGhpcyBmdW5jdGlvbj8KCk15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vaywgZXZlbiBpZiBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBpcyBnZW5lcmljLiBUaGVyZeKAmXMgYWxtb3N0IGNlcnRhaW5seSBzb21ldGhpbmcgaW4gdGhlcmUgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2luaXRfZGZsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00NzUxPXN0YXRpYyBpbnQgbWFjYl9jbGtfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgY2xrICoqcGNsayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ3NjQ6c3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00NzY1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTQ5NTc9c3RhdGljIGludCBtYWNiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ5NjItXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjQ5NjM6XHRcdHJldHVybiBtYWNiX2luaXRfZGZsdChwZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNDk2NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY2Olx0cmV0dXJuIG1hY2JfaW5pdF9kZmx0KHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY3LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU0Njk9c3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NTE3Olx0cmV0ID0gbWFjYl9pbml0X2RmbHQocGRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU1MTgtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NTI2PXN0YXRpYyBpbnQgZXllcTVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTU0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTU0MjpcdHJldCA9IG1hY2JfaW5pdF9kZmx0KHBkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTQzLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgSW5pdGlhbGl6YXRpb24gUmVzZXQgT3B0aW9ucyoqCgpIbW0sIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3QgdGhlIHVzdWFsIHNldCBvZiBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzIGhhbmRsZWQsIEkgYXNzdW1lLiBCdXQsIEkmIzM5O20gd29uZGVyaW5nLi4uIHdoYXQgYWJvdXQgdGhlIGVkZ2UgY2FzZXMsIHRoZSBtb3JlIG51YW5jZWQgc2NlbmFyaW9zPyBXaGF0IGFib3V0IHdoZW4gd2Ugd2FudCBhIG1vcmUgc2VsZWN0aXZlIHJlc2V0IGR1cmluZyBpbml0aWFsaXphdGlvbj8gU3BlY2lmaWNhbGx5LCB0aGF0IGZ1bmN0aW9uLCBgaW5pdF9yZXNldF9vcHRpb25hbGAuLi4gdGhhdCYjMzk7cyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGEgYml0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHJlc2V0IGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGFsd2F5cyBzdHJpY3RseSByZXF1aXJlZC4gQXJlIHdlIGhhbmRsaW5nIHRob3NlIGNhc2VzIGNvcnJlY3RseT8gQXJlIHdlIHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBzdWJ0bGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGJ5ICpub3QqIHJlc2V0dGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIG9yLCBjb252ZXJzZWx5LCBwb3RlbnRpYWxseSBvdmVyLXJlc2V0dGluZyB0aGluZ3Mgd2hlbiBhIG1vcmUgdGFyZ2V0ZWQgaW5pdGlhbGl6YXRpb24gd291bGQgc3VmZmljZT8gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayB0aGVzZSBvcHRpb25hbCByZXNldHMsIGJ1dCB0aGV5IGNhbiBiZSBjcml0aWNhbCBmb3IgYXZvaWRpbmcgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSBpbiBjb21wbGV4IHN5c3RlbXMgd2l0aCBhIGxvdCBvZiBpbnRlcmRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbiBhbmQgcmVhbGx5IGludGVycm9nYXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGVtcGxveWVkLiBBcmUgdGhlIGFzc3VtcHRpb25zIGFyb3VuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAgY2xlYXJseSBkb2N1bWVudGVkPyBBcmUgd2UgYWRlcXVhdGVseSB0ZXN0aW5nIHRoZSBzY2VuYXJpb3Mgd2hlcmUgaXQgaXMgdXNlZCBvciBieXBhc3NlZD8gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXRzIHB1cnBvc2UgYW5kIGVuc3VyZSBpdCYjMzk7cyBpbnRlZ3JhdGVkIHNlYW1sZXNzbHkgaW50byB0aGUgZXhpc3RpbmcgaW5pdGlhbGl6YXRpb24gZmxvdyB3aXRob3V0IG9wZW5pbmcgYW55IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY0OC1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2NDk6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXHQuanVtYm9fbWF4X2xlbiA9IDEwMjQwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY2Ny1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2Njg6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXHQudXNyaW8gPSBcdTAwMjZtcGZzX3VzcmlvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTcwMTpcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTcwMi1cdC5qdW1ib19tYXhfbGVuID0gMTAyNDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgcGljNjRocHNjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzMwOlx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzMxLVx0Lmp1bWJvX21heF9sZW4gPSAxNjM4MyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODEKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBBbmFseXNpczogQ2FkZW5jZSBNQUNCIERyaXZlciBmb3IgMTAwMEJBU0VYIFN1cHBvcnQqKgoKT2theSwgc28gYGluaXRfcmVzZXRfb3B0aW9uYWxgIHRvdWNoZXMgY29uZmlndXJhdGlvbnMgZm9yIFp5bnFNUCwgTVBGUywgVmVyc2FsLCBhbmQgUElDNjRIUFNDLiBaeW5xTVAgaXMgc3VwcG9ydGVkIGluIFFFTVUsIHNwZWNpZmljYWxseSBgeGxueC16eW5xbXBgLCBzbyB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/CgpUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgdG8gdGhlIENhZGVuY2UgTUFDQiBkcml2ZXIuIEkmIzM5O3ZlIHRha2VuIGEgY2xvc2UgbG9vaywgYW5kIHRoZSBjaGFuZ2VzICpzZWVtKiBwdXJlbHkgcmVsYXRlZCB0byBoYXJkd2FyZSBjb25maWd1cmF0aW9uOiBzZXR0aW5nIGJpdHMgaW4gcmVnaXN0ZXJzLCBzZWxlY3RpbmcgdGhlIFBDUywgdGhpbmdzIGxpa2UgdGhhdC4gVGhlcmUgaXNuJiMzOTt0IGFueSBjb21wbGV4IGxvZ2ljLCBwYWNrZXQgcGFyc2luZywgb3Igc3RhdGUgbWFjaGluZSBpbnZvbHZlZC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBhIGhhcmR3YXJlIGRyaXZlciwgdGhvdWdoLiBJcyB0aGlzIGZ1enphYmxlPwoKVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsb29rcyBsaWtlIHRoaXM6IHNpbXBsZSByZWdpc3RlciByZWFkL3dyaXRlLCBiaXQgc2V0dGluZywgcG9pbnRlciByZXR1cm5zLCBzZXR0aW5nIGEgYm9vbGVhbiwgaWYgY29uZGl0aW9ucywgYW5kIHNldHRpbmcgYSBiaXQgaW4gYSBiaXRtYXAuIE5vdGhpbmcgZmFuY3kuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MganVzdCBhZGRpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGFuZCBzZXR0aW5nIHRoZSBgUENTU0VMYCBiaXQgYXMgbmVjZXNzYXJ5LgoKVGhlIHByb21wdCBzYXlzIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgbWFpbmx5IGRvY3VtZW50YXRpb24sIEtjb25maWcgY2hhbmdlcywgZGVjb3JhdGl2ZSwgcmVsYXRlZCB0byBjb25zdGFudCBvciBtYWNyb3Mgd2l0aG91dCBmdW5jdGlvbmFsIGV4ZWN1dGlvbiBhbHRlcmF0aW9uLCBvciB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSG93ZXZlciwgdGhpcyBwYXRjaCAqZG9lcyogZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93IGJ5IGVuYWJsaW5nIHRoZSBuZXcgUEhZIGludGVyZmFjZSBtb2RlIGFuZCBjb25maWd1cmluZyB0aGUgaGFyZHdhcmUuIEl0ICppcyogcmVhY2hhYmxlIGluIFFFTVUsIHNpbmNlIFp5bnFNUCBpcyBzdXBwb3J0ZWQuIFRoZSBwYXRjaCBpcyBhYm91dCBmdW5jdGlvbmFsIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgcHJvbXB0IHN0YXRlcyB0aGUgbmVnYXRpdmUgY2FzZXMsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgJiMzNDtuZWdhdGl2ZSBjYXNlcy4mIzM0OwoKVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBhbmFseXNpcyBsZWFkcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCldhaXQsIGJlZm9yZSBJIGRlY2lkZSwgSSBzaG91bGQgZG91YmxlIGNoZWNrLiBJcyB0aGVyZSBhbnkgcGFydGljdWxhciBDT05GSUcgb3B0aW9uIHJlcXVpcmVkPyBgTUFDQmAgYXBwZWFycyB0byBiZSB0aGUgcmVxdWlyZWQgY29uZmlnLiBBbmQgc2luY2UgdGhlcmUgZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgYXQgcGxheSwgdGhlIGNvbmNsdXNpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIGBNQUNCYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBjcnVjaWFsIHRvIG1hcCBvdXQgd2hhdCBgTUFDQmAgcmVsaWVzIG9uIGJlY2F1c2UgYSBjaGFuZ2UgdGhlcmUgY2FuIGNhc2NhZGUuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHNlcnZpY2VzIHRoYXQgYE1BQ0JgIHB1bGxzIGRhdGEgb3Igc2V0dGluZ3MgZnJvbT8gSWYgaXQgZG9lcywgYSBjaGFuZ2UgaW4gYW55IG9mIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmFkdmVydGVudGx5IGJyZWFrIGBNQUNCYCBvciBpbnRyb2R1Y2Ugc3VidGxlLCB5ZXQgY3JpdGljYWwsIHNpZGUgZWZmZWN0cy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoaXMgbWFwcGVkIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQ0IkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNjb3Bpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGxpbmUgMjIuIFRoaXMgbGlrZWx5IHRvdWNoZXMgdXBvbiB0aGUgY29yZSBDYWRlbmNlIEV0aGVybmV0IE1BQyBkcml2ZXImIzM5O3Mgc2V0dGluZ3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipGZWF0dXJlIHRvZ2dsZXMqKjogUG90ZW50aWFsIGhhcmR3YXJlIHZhcmlhbnRzLCBzdXBwb3J0IGZvciBzcGVjaWZpYyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLCBvciBwZXJoYXBzIGRpZmZlcmVudCBETUEgY29uZmlndXJhdGlvbnMuCiogICAqKkRlcGVuZGVuY2llcyoqOiBXaGF0IG90aGVyIGtlcm5lbCBjb21wb25lbnRzIG9yIGRyaXZlcnMgYXJlIHJlcXVpcmVkIG9yIG9wdGlvbmFsIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIgdG8gYnVpbGQgYW5kIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIHNwZWNpZmljIGNsb2NrIHNldHRpbmdzIG9yIGJ1cyBpbnRlcmZhY2UgcmVxdWlyZW1lbnRzPwoqICAgKipEZWZhdWx0IHZhbHVlcyoqOiBXaGF0IGFyZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGVzZSBvcHRpb25zPyBLbm93aW5nIHRoaXMgaXMgdml0YWwgdG8gdW5kZXJzdGFuZCB0aGUgJiMzNDtvdXQtb2YtdGhlLWJveCYjMzQ7IGJlaGF2aW9yIGFuZCBxdWlja2x5IGlkZW50aWZ5IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgYWRqdXN0bWVudCBiYXNlZCBvbiB0aGUgcGFydGljdWxhciBoYXJkd2FyZSBwbGF0Zm9ybSBJJiMzOTttIHdvcmtpbmcgd2l0aC4KKiAgICoqRG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyoqOiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGVudHJpZXMgYXJlIHdlbGwtY29tbWVudGVkLiBHb29kIGRvY3VtZW50YXRpb24gY2xhcmlmaWVzIHRoZSBwdXJwb3NlLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3RlbnRpYWxseSB0aGUgdHJhZGUtb2ZmcyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlIGNvbW1lbnRzIGFjY3VyYXRlPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBhYmxlIHRvIHRlbGwgcHJldHR5IHF1aWNrbHkuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogQSBxdWljayBzY2FuIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgYW55IHNldHRpbmdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgb3IgbWlnaHQgY2F1c2UgaXNzdWVzIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcywgb3IgYXQgcnVudGltZS4KCkkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gdGhlbiBpZGVudGlmeSB3aGF0IEkgbmVlZCB0byBhZGRyZXNzIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgQ2FkZW5jZSBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9DQURFTkNFXG4gICA3Olx0XHRib29sIFwmIzM0O0NhZGVuY2UgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cbiAgIDk6XHRcdGRlZmF1bHQgeVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE2Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDE3Olx0XHQgIHJlbWFpbmluZyBDYWRlbmNlIG5ldHdvcmsgY2FyZCBxdWVzdGlvbnMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmVcbiAgMTg6XHRcdCAgYXNrZWQgZm9yIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTk6XHRcbiAgMjA6XHRpZiBORVRfVkVORE9SX0NBREVOQ0VcbiAgMjE6XHRcbiAgMjI6XHRjb25maWcgTUFDQlxuICAyMzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIEhBU19ETUEgXHUwMDI2XHUwMDI2IENPTU1PTl9DTEtcbiAgMjU6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAgMjY6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDI3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgVGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBpbnRlcmZhY2UgaXMgZm91bmQgb24gbWFueSBBdG1lbCBBVDMyIGFuZFxuICAzMDpcdFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKioKClJpZ2h0LCBzbyBgTUFDQmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQgdGhlbiBhIHRob3VnaHQgcG9wcyB1cDogaGFuZyBvbiwgd2hhdCBhYm91dCBgTUFDQl9QQ0lgPyBJdCBkYXducyBvbiBtZSB0aGF0IGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IGZ1enppbmcgcG9zc2liaWxpdGllcywgcGFydGljdWxhcmx5IGFzIGEgUENJIGRldmljZSwgdGhhdCBzZWNvbmQgb3B0aW9uIG1pZ2h0IGFjdHVhbGx5IGJlIHRoZSBtb3JlIHJlbGV2YW50IG9uZSB0byBpbnZlc3RpZ2F0ZS4gR290dGEga2VlcCBhbGwgdGhlIGFuZ2xlcyBpbiBtaW5kIHdoZW4gY29uc2lkZXJpbmcgdGVzdGluZyBzdHJhdGVnaWVzLiBUaGVyZWZvcmUsIGxldCBtZSBjb25zdWx0IHRoZSBzb3VyY2UuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUgYXJvdW5kIGxpbmUgNDUsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM1Olx0XHQgIHdpbGwgYmUgbWFjYi5cbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuICAzODpcdFx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbiAgMzk6XHRcdGRlcGVuZHMgb24gTUFDQlxuICA0MDpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xuICA0MTpcdFx0ZGVmYXVsdCB5XG4gIDQyOlx0XHRoZWxwXG4gIDQzOlx0XHQgIEVuYWJsZSBJRUVFIDE1ODggUHJlY2lzaW9uIFRpbWUgUHJvdG9jb2wgKFBUUCkgc3VwcG9ydCBmb3IgTUFDQi5cbiAgNDQ6XHRcbiAgNDU6XHRjb25maWcgTUFDQl9QQ0lcbiAgNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gTUFDQiBcdTAwMjZcdTAwMjYgUENJXG4gIDQ4Olx0XHRoZWxwXG4gIDQ5Olx0XHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxuICA1MDpcdFxuICA1MTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gIDUyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIG1hY2JfcGNpLlxuICA1MzpcdFxuICA1NDpcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTcyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIGBNQUNCX1BDSWAgY29uZmlndXJhdGlvbiBpcyBhIHNtYXJ0IG1vdmUuIEl0IHdyYXBzIHRoZSBzdGFuZGFyZCBNQUNCIGRyaXZlciBhbmQsIGltcG9ydGFudGx5LCBtYWtlcyBpdCBmdXp6YWJsZSB2aWEgU3l6a2FsbGVyJiMzOTtzIFBDSSBkZXZpY2UgaW5qZWN0aW9uIGNhcGFiaWxpdGllcy4gVGhpcyBvcGVucyB1cCBhIGxvdCBvZiBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBNQUNCYCBhbmQgYE1BQ0JfUENJYC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24uIE15IGluaXRpYWwgc2NhbiB0dXJuZWQgdXAgYSBmZXcgaW50ZXJlc3RpbmcgY2FuZGlkYXRlczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCBgaW5pdF9yZXNldF9vcHRpb25hbGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24gdGhhdCYjMzk7cyBhIGNhbGxiYWNrIHdpdGhpbiBgbWFjYl9jb25maWdgLiBgbWFjYl9pbml0X2RmbHRgIHNlZW1zIHRvIGJlIGFub3RoZXIgY2FsbGJhY2sgb3IgaXMgY2FsbGVkIGRpcmVjdGx5LiAgYG1hY2JfbWlpX3Byb2JlYCBpcyBjbGVhcmx5IHBhcnQgb2YgdGhlIHByb2JlIHNlcXVlbmNlLiAgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYW5kIGBtYWNiX21hY19zZWxlY3RfcGNzYCBhcmUgYmVpbmcgY2FsbGVkIGJ5IHBoeWxpbmssIHdoaWNoIGlzIGFsd2F5cyBpbnRlcmVzdGluZy4KCkNvbnNpZGVyaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIEkgaW5pdGlhbGx5IGRlY2lkZWQgdG8gbGlzdCBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGFuZCBgbWFjYl9taWlfcHJvYmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7dmUgcmUtZXhhbWluZWQgdGhlIGNvZGUgY2hhbmdlcywgYW5kIGl0JiMzOTtzIGNsZWFyIEkmIzM5O3ZlIGdvdCB0byB0YWtlIGEgYnJvYWRlciB2aWV3LiBUaGUgZGlmZiBjb25maXJtcyB0aG9zZSwgYnV0IGFsc28gaW5jbHVkZXMgYG1hY2JfaW5pdF9kZmx0YCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLgoKU28sIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbTogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLgoKQSBicmllZiBzYW5pdHkgY2hlY2sgaXMgd2FycmFudGVkLCBlc3BlY2lhbGx5IHdpdGggYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBUaGUgbmFtZSBpcyBhIGxpdHRsZSBnZW5lcmljLCBidXQgaXQgaXMgc3RhdGljIHRvIGBtYWNiX21haW4uY2AsIHdoaWNoIHNob3VsZCBtYWtlIGl0IHVuaXF1ZSBlbm91Z2ggdG8gY29uc2lkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE1IDA2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfcmVzZXRfb3B0aW9uYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDcwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY0OC1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2NDk6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXHQuanVtYm9fbWF4X2xlbiA9IDEwMjQwLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTY2Ny1cdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU2Njg6XHQuaW5pdCA9IGluaXRfcmVzZXRfb3B0aW9uYWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXHQudXNyaW8gPSBcdTAwMjZtcGZzX3VzcmlvLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY5ND1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHZlcnNhbF9jb25maWcgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTcwMTpcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTcwMi1cdC5qdW1ib19tYXhfbGVuID0gMTAyNDAsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NzI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjYl9jb25maWcgcGljNjRocHNjX2NvbmZpZyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXHQuZG1hX2J1cnN0X2xlbmd0aCA9IDE2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzMwOlx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzMxLVx0Lmp1bWJvX21heF9sZW4gPSAxNjM4MyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTUgMDY6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTEKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMjE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkZ1enppbmcgUmVjb21tZW5kYXRpb246IENhZGVuY2UgTUFDQiBFdGhlcm5ldCBEcml2ZXIqKgoKT2theSwgdGhpcyBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUuIEkgY2FuIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzcGVjaWZpYyB0byB0aGlzIGZpbGUuIE15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBtb2RpZnlpbmcgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gZHVyaW5nIGJvdGggZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcywgYXMgbWFuYWdlZCBieSBwaHlsaW5rLiBGdXJ0aGVybW9yZSwgdGhpcyBkcml2ZXIgaXMgYWNjZXNzaWJsZSB3aXRoaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgUUVNVSwgd2hpY2ggZW11bGF0ZXMgdGhlIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzLCBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHVzaW5nIHRoZSBQQ0kgd3JhcHBlciAoYE1BQ0JfUENJYCkuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmVhY2hhYmxlIGRyaXZlciBsb2dpYyB0aGF0IGhhcyB1bmRlcmdvbmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZW5hYmxlIGZ1enppbmcgZm9yIHRoZSBgTUFDQmAgYW5kIGBNQUNCX1BDSWAgY29uZmlndXJhdGlvbnMuIEFuZCB0byBndWlkZSB0aGUgZnV6emluZyBwcm9jZXNzIGVmZmVjdGl2ZWx5LCBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIFRob3NlIHNlZW0gbGlrZSB0aGUga2V5IGFyZWFzIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNSAwNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDQiYjMzQ7LAogICAgJiMzNDtNQUNCX1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hY2JfcGNzX2FuX3Jlc3RhcnQmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfY29uZmlnJiMzNDssCiAgICAmIzM0O21hY2JfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7bWFjYl9taWlfcHJvYmUmIzM0OywKICAgICYjMzQ7bWFjYl9pbml0X2RmbHQmIzM0OywKICAgICYjMzQ7aW5pdF9yZXNldF9vcHRpb25hbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9wY3NfYW5fcmVzdGFydCYjMzQ7LAogICAgJiMzNDttYWNiX21hY19jb25maWcmIzM0OywKICAgICYjMzQ7bWFjYl9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDttYWNiX21paV9wcm9iZSYjMzQ7LAogICAgJiMzNDttYWNiX2luaXRfZGZsdCYjMzQ7LAogICAgJiMzNDtpbml0X3Jlc2V0X29wdGlvbmFsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjowMi40ODIxNzU4ODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjU3MjM4MTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2JfcGNzX2FuX3Jlc3RhcnRcIixcbiAgICBcIm1hY2JfbWFjX2NvbmZpZ1wiLFxuICAgIFwibWFjYl9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwibWFjYl9taWlfcHJvYmVcIixcbiAgICBcIm1hY2JfaW5pdF9kZmx0XCIsXG4gICAgXCJpbml0X3Jlc2V0X29wdGlvbmFsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCBpbnRlcmZhY2UgbW9kZSB0byB0aGUgQ2FkZW5jZSBNQUNCIGV0aGVybmV0IGRyaXZlci4gSXQgbW9kaWZpZXMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2dpYyBkdXJpbmcgZGV2aWNlIHByb2JlIGFuZCBpbnRlcmZhY2Ugc3RhdGUgY2hhbmdlcyAodmlhIHBoeWxpbmspLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHdoaWNoIGVtdWxhdGVzIENhZGVuY2UgR0VNIGZvciBaeW5xTVAgYm9hcmRzKSBhbmQgY2FuIGFsc28gYmUgdGVzdGVkIHZpYSB0aGUgUENJIHdyYXBwZXIgKE1BQ0JfUENJKS4gU2luY2UgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGRyaXZlciBsb2dpYywgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuNDgyMTgwOTYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDk2MjUxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiM2M4OTE2NzMzOWVhNDBhOTU4ODhmMTU4ZmFlOGZlNDFiY2Y0YzE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDE1IDA2OjI2OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuaW5kZXggZDM5NGYxZjQzYjY4NWUuLjI4NGEzYjAzZjhjNzc1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXFxuQEAgLTU4Myw3ICs1ODMsMTMgQEAgc3RhdGljIHZvaWQgbWFjYl9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuIFxcbiBzdGF0aWMgdm9pZCBtYWNiX3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbiB7XFxuLVxcdC8qIE5vdCBzdXBwb3J0ZWQgKi9cXG4rXFx0c3RydWN0IG1hY2IgKmJwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IG1hY2IsIHBoeWxpbmtfc2dtaWlfcGNzKTtcXG4rXFx0dTMyIG9sZCwgbmV3O1xcbitcXG4rXFx0b2xkID0gZ2VtX3JlYWRsKGJwLCBQQ1NDTlRSTCk7XFxuK1xcdG5ldyA9IG9sZCB8IEJNQ1JfQU5SRVNUQVJUO1xcbitcXHRpZiAob2xkICE9IG5ldylcXG4rXFx0XFx0Z2VtX3dyaXRlbChicCwgUENTQ05UUkwsIG5ldyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWFjYl9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxcbkBAIC03NTAsNyArNzU2LDkgQEAgc3RhdGljIHZvaWQgbWFjYl9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4gXFx0XFx0Y3RybCBcXHUwMDI2PSB+KEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCkpO1xcbiBcXHRcXHRuY3IgXFx1MDAyNj0gfkdFTV9CSVQoRU5BQkxFX0hTX01BQyk7XFxuIFxcbi1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkge1xcbitcXHRcXHRcXHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcXG4rXFx0XFx0fSBlbHNlIGlmIChzdGF0ZS1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbiBcXHRcXHRcXHRjdHJsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XFxuIFxcdFxcdH0gZWxzZSBpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHtcXG4gXFx0XFx0XFx0Y3RybCB8PSBHRU1fQklUKFBDU1NFTCk7XFxuQEAgLTk1Nyw3ICs5NjUsOCBAQCBzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICptYWNiX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbiBcXG4gXFx0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuIFxcdFxcdHJldHVybiBcXHUwMDI2YnAtXFx1MDAzZXBoeWxpbmtfdXN4X3BjcztcXG4tXFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4rXFx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgICAgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4gXFx0XFx0cmV0dXJuIFxcdTAwMjZicC1cXHUwMDNlcGh5bGlua19zZ21paV9wY3M7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTEwMjUsMTMgKzEwMzQsMTUgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4gXFx0YnAtXFx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLm9wcyA9IFxcdTAwMjZtYWNiX3BoeWxpbmtfcGNzX29wcztcXG4rXFx0YnAtXFx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLnBvbGwgPSB0cnVlO1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua191c3hfcGNzLm9wcyA9IFxcdTAwMjZtYWNiX3BoeWxpbmtfdXN4X3Bjc19vcHM7XFxuIFxcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlZGV2O1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbiBcXHRicC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbiBcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRpZiAoYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XFxuIFxcdFxcdGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5wb2xsX2ZpeGVkX3N0YXRlID0gdHJ1ZTtcXG4gXFx0XFx0YnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmdldF9maXhlZF9zdGF0ZSA9IG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZTtcXG4gXFx0XFx0LyogVGhlIFBDU0FVVE9ORUcgYml0IGluIFBDU0NOVFJMIGlzIG9uIG91dCBvZiByZXNldC4gU2V0dGluZ1xcbkBAIC0xMDYwLDkgKzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHRcXHRcXHQgIGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcdFxcdHBoeV9pbnRlcmZhY2Vfc2V0X3JnbWlpKGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcbi1cXHRcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfUENTKVxcbitcXHRcXHRpZiAoYnAtXFx1MDAzZWNhcHMgXFx1MDAyNiBNQUNCX0NBUFNfUENTKSB7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxcbitcXHRcXHRcXHRcXHQgIGJwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuIFxcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfU0dNSUksXFxuIFxcdFxcdFxcdFxcdCAgYnAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGJwLVxcdTAwM2VjYXBzIFxcdTAwMjYgTUFDQl9DQVBTX0hJR0hfU1BFRUQpIHtcXG4gXFx0XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUixcXG5AQCAtNDkzMSw3ICs0OTQ1LDkgQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHQvKiBTZXQgTUlJIG1hbmFnZW1lbnQgY2xvY2sgZGl2aWRlciAqL1xcbiBcXHR2YWwgPSBtYWNiX21kY19jbGtfZGl2KGJwKTtcXG4gXFx0dmFsIHw9IG1hY2JfZGJ3KGJwKTtcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4rXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXFxuK1xcdFxcdHZhbCB8PSBHRU1fQklUKFBDU1NFTCk7XFxuK1xcdGVsc2UgaWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcXG4gXFx0XFx0dmFsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XFxuIFxcdG1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgdmFsKTtcXG4gXFxuQEAgLTU0NTYsNyArNTQ3Miw4IEBAIHN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRpZiAoYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgYnAtXFx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XFxuIFxcdFxcdC8qIEVuc3VyZSBQSFkgZGV2aWNlIHVzZWQgaW4gU0dNSUkgbW9kZSBpcyByZWFkeSAqL1xcbiBcXHRcXHRicC1cXHUwMDNlcGh5ID0gZGV2bV9waHlfb3B0aW9uYWxfZ2V0KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIE5VTEwpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuODkyNjI1NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MTYxOTI0MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9wY3NfYW5fcmVzdGFydFwiLFxuICAgIFwibWFjYl9tYWNfY29uZmlnXCIsXG4gICAgXCJtYWNiX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJtYWNiX21paV9wcm9iZVwiLFxuICAgIFwibWFjYl9pbml0X2RmbHRcIixcbiAgICBcImluaXRfcmVzZXRfb3B0aW9uYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIGludGVyZmFjZSBtb2RlIHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyLiBJdCBtb2RpZmllcyBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGxvZ2ljIGR1cmluZyBkZXZpY2UgcHJvYmUgYW5kIGludGVyZmFjZSBzdGF0ZSBjaGFuZ2VzICh2aWEgcGh5bGluaykuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAod2hpY2ggZW11bGF0ZXMgQ2FkZW5jZSBHRU0gZm9yIFp5bnFNUCBib2FyZHMpIGFuZCBjYW4gYWxzbyBiZSB0ZXN0ZWQgdmlhIHRoZSBQQ0kgd3JhcHBlciAoTUFDQl9QQ0kpLiBTaW5jZSBpdCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgZHJpdmVyIGxvZ2ljLCBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGIzYzg5MTY3MzM5ZWE0MGE5NTg4OGYxNThmYWU4ZmU0MWJjZjRjMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxNSAwNjoyNjowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5pbmRleCBkMzk0ZjFmNDNiNjg1ZS4uMjg0YTNiMDNmOGM3NzUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXG5AQCAtNTgzLDcgKzU4MywxMyBAQCBzdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbiBcbiBzdGF0aWMgdm9pZCBtYWNiX3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuIHtcbi1cdC8qIE5vdCBzdXBwb3J0ZWQgKi9cbitcdHN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBtYWNiLCBwaHlsaW5rX3NnbWlpX3Bjcyk7XG4rXHR1MzIgb2xkLCBuZXc7XG4rXG4rXHRvbGQgPSBnZW1fcmVhZGwoYnAsIFBDU0NOVFJMKTtcbitcdG5ldyA9IG9sZCB8IEJNQ1JfQU5SRVNUQVJUO1xuK1x0aWYgKG9sZCAhPSBuZXcpXG4rXHRcdGdlbV93cml0ZWwoYnAsIFBDU0NOVFJMLCBuZXcpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hY2JfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbkBAIC03NTAsNyArNzU2LDkgQEAgc3RhdGljIHZvaWQgbWFjYl9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiBcdFx0Y3RybCBcdTAwMjY9IH4oR0VNX0JJVChTR01JSUVOKSB8IEdFTV9CSVQoUENTU0VMKSk7XG4gXHRcdG5jciBcdTAwMjY9IH5HRU1fQklUKEVOQUJMRV9IU19NQUMpO1xuIFxuLVx0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpIHtcbitcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbitcdFx0fSBlbHNlIGlmIChzdGF0ZS1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdFx0Y3RybCB8PSBHRU1fQklUKFNHTUlJRU4pIHwgR0VNX0JJVChQQ1NTRUwpO1xuIFx0XHR9IGVsc2UgaWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpIHtcbiBcdFx0XHRjdHJsIHw9IEdFTV9CSVQoUENTU0VMKTtcbkBAIC05NTcsNyArOTY1LDggQEAgc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqbWFjYl9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuIFx0XHRyZXR1cm4gXHUwMDI2YnAtXHUwMDNlcGh5bGlua191c3hfcGNzO1xuLVx0ZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbitcdGVsc2UgaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4rXHQgICAgICAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKVxuIFx0XHRyZXR1cm4gXHUwMDI2YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3M7XG4gXHRlbHNlXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTEwMjUsMTMgKzEwMzQsMTUgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0c3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdGJwLVx1MDAzZXBoeWxpbmtfc2dtaWlfcGNzLm9wcyA9IFx1MDAyNm1hY2JfcGh5bGlua19wY3Nfb3BzO1xuK1x0YnAtXHUwMDNlcGh5bGlua19zZ21paV9wY3MucG9sbCA9IHRydWU7XG4gXHRicC1cdTAwM2VwaHlsaW5rX3VzeF9wY3Mub3BzID0gXHUwMDI2bWFjYl9waHlsaW5rX3VzeF9wY3Nfb3BzO1xuIFxuIFx0YnAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZWRldjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiBcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdGJwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnBvbGxfZml4ZWRfc3RhdGUgPSB0cnVlO1xuIFx0XHRicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5nZXRfZml4ZWRfc3RhdGUgPSBtYWNiX2dldF9wY3NfZml4ZWRfc3RhdGU7XG4gXHRcdC8qIFRoZSBQQ1NBVVRPTkVHIGJpdCBpbiBQQ1NDTlRSTCBpcyBvbiBvdXQgb2YgcmVzZXQuIFNldHRpbmdcbkBAIC0xMDYwLDkgKzEwNzEsMTIgQEAgc3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuIFx0XHRwaHlfaW50ZXJmYWNlX3NldF9yZ21paShicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4tXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfUENTKVxuK1x0XHRpZiAoYnAtXHUwMDNlY2FwcyBcdTAwMjYgTUFDQl9DQVBTX1BDUykge1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuK1x0XHRcdFx0ICBicC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSxcbiBcdFx0XHRcdCAgYnAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHR9XG4gXG4gXHRcdGlmIChicC1cdTAwM2VjYXBzIFx1MDAyNiBNQUNCX0NBUFNfSElHSF9TUEVFRCkge1xuIFx0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIsXG5AQCAtNDkzMSw3ICs0OTQ1LDkgQEAgc3RhdGljIGludCBtYWNiX2luaXRfZGZsdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0LyogU2V0IE1JSSBtYW5hZ2VtZW50IGNsb2NrIGRpdmlkZXIgKi9cbiBcdHZhbCA9IG1hY2JfbWRjX2Nsa19kaXYoYnApO1xuIFx0dmFsIHw9IG1hY2JfZGJ3KGJwKTtcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbitcdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4rXHRcdHZhbCB8PSBHRU1fQklUKFBDU1NFTCk7XG4rXHRlbHNlIGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSlcbiBcdFx0dmFsIHw9IEdFTV9CSVQoU0dNSUlFTikgfCBHRU1fQklUKFBDU1NFTCk7XG4gXHRtYWNiX3dyaXRlbChicCwgTkNGR1IsIHZhbCk7XG4gXG5AQCAtNTQ1Niw3ICs1NDcyLDggQEAgc3RhdGljIGludCBpbml0X3Jlc2V0X29wdGlvbmFsKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHJldDtcbiBcbi1cdGlmIChicC1cdTAwM2VwaHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xuK1x0aWYgKGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGJwLVx1MDAzZXBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4gXHRcdC8qIEVuc3VyZSBQSFkgZGV2aWNlIHVzZWQgaW4gU0dNSUkgbW9kZSBpcyByZWFkeSAqL1xuIFx0XHRicC1cdTAwM2VwaHkgPSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIE5VTEwpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MDIuODkyNjI2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzUwODA3MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ2FkZW5jZSBNQUNCIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCBzdXBwb3J0IHRvIHRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0J3MgdG91Y2hpbmcgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEJhc2ljYWxseSwgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBhIHNwZWNpZmljIGhhcmR3YXJlIGNvbnRyb2xsZXIsIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGp1bXBzIHRvIG1pbmQgaXM6IGNhbiBJIGVmZmVjdGl2ZWx5IHRlc3QgdGhpcyB0aGluZyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1xuXG5UeXBpY2FsbHksIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgYXJlIGEgcGFpbiB0byB3b3JrIHdpdGggdW5sZXNzIHlvdSBoYXZlIGEgZ29vZCBlbXVsYXRvci4gWW91IHJlYWxseSBuZWVkIHNvbWV0aGluZyB0aGF0IGNhbiBhY2N1cmF0ZWx5IHNpbXVsYXRlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIHRvIGdldCBtZWFuaW5nZnVsIHRlc3QgcmVzdWx0cy4gSSBkb3VidCBJIGNhbiBqdXN0IGZpcmUgdXAgYSBzdGFuZGFyZCBWTSBhbmQgZXhwZWN0IGl0IHRvIHdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIGFuIGVtdWxhdG9yIHRoYXQgaGFzIHRoZSBhcHByb3ByaWF0ZSBoYXJkd2FyZSBzdXBwb3J0LlxuXG5MZXQncyBzZWXigKYgRG9lcyBRRU1VIHN1cHBvcnQgdGhlIENhZGVuY2UgTUFDQj8gSSdtIHByZXR0eSBzdXJlIEkndmUgc2VlbiBpdCBtZW50aW9uZWQgc29tZXdoZXJlLi4uIEFoYSwgaGVyZSB3ZSBnbywgUUVNVSBoYXMgYGh3L25ldC9jYWRlbmNlX2dlbS5jYC4gVGhpcyBpcyBwcm9taXNpbmchIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhlcmUgKmlzKiBhIFFFTVUgbW9kZWwgZm9yIHRoZSBDYWRlbmNlIEdFTSwgd2hpY2ggaXMgb2Z0ZW4gaW1wbGVtZW50ZWQgYXMgYSBNQUNCLiBUaGlzIG1lYW5zIGl0ICptaWdodCogYmUgcmVhY2hhYmxlIHdpdGhpbiBRRU1VLCB3aGljaCBpcyBncmVhdC5cblxuTm93LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGVuYWJsZSBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiB0byBtYWtlIHN1cmUgdGhlIFFFTVUgTUFDQi9HRU0gbW9kZWwgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkIHNvIHRoYXQgSSBjYW4gYWN0dWFsbHkgdGVzdCB0aGlzIGRyaXZlciBpbiBRRU1VLiBUaGF0IGlzIGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjA4LjI0MzQzNjk4N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDQyNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXFx0Ym9vbCBcXFwiVXNlIElFRUUgMTU4OCBod3N0YW1wXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjA4LjMxNzg2ODkwMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMzY1NzY0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgQXNzZXNzbWVudCBmb3IgTUFDQiBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlnIGlzIGBNQUNCYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBDYWRlbmNlIEdFTSBkcml2ZXIgaXMgZXZlbiByZWFjaGFibGUsIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFFFTVUgc3VwcG9ydHMgdGhlIGBjYWRlbmNlX2dlbWAgZGV2aWNlLCBhbmQgaWYgaXQncyB0aGVyZSBvbiBhbiBBUk0gYm9hcmQgKGxpa2UgdGhlIGB4aWxpbngtenlucS1hOWApLCB0aGUgZHJpdmVyIHNob3VsZCBwcm9iZS4gVGhlIGBNQUNCX1BDSWAgb3B0aW9uIG1ha2VzIG1lIHRoaW5rIGFib3V0IFBDSSBkZXZpY2VzIGFuZCB3aGV0aGVyIHN5emthbGxlciBjYW4gaGFuZGxlIHRoZW07IEkga25vdyBpdCBkb2VzIGhhbmRsZSBzb21lIGVtdWxhdGVkIFBDSSBzdHVmZiBvciB1c2VzIHNvbWUgZ2VuZXJpY3MsIGJ1dCBub3JtYWxseSBpdCdzIG1vcmUgZm9jdXNlZCBvbiBzeXNjYWxscy4gU3l6a2FsbGVyJ3Mgbm90IGdvdCBhIGdlbmVyaWMgUENJIGluamVjdG9yLiBJJ20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGlzIGRyaXZlciB3b3VsZCBiZSByZWFjaGVkIGJ5IHN5emthbGxlci5cblxuVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byBjb25zaWRlciBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsXCIgc28gcmVhY2hhYmlsaXR5IGlzIGtleS5cblxuSWYgUUVNVSBoYXMgYGNhZGVuY2VfZ2VtYCwgdGhlbiB0aGF0J3MgYSBwb3NpdGl2ZSBzaWduYWwuIEFuZCBRRU1VICpkb2VzKiBoYXZlIGBody9uZXQvY2FkZW5jZV9nZW0uY2AsIHNvIGl0IHNlZW1zIHJlYWNoYWJsZS4gU28gSSdtIHRoaW5raW5nIGl0J3MgcmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGFzc2VzcyB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgcGF0Y2ggYWRkcyBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgc3VwcG9ydC4gSXQgdG91Y2hlcyBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEJhc2ljYWxseSwgaXQncyBhbGwgYWJvdXQgaW5pdGlhbGl6YXRpb24gYW5kIGNvbmZpZ3VyYXRpb24sIHJpZ2h0PyBgbWFjYl9wY3NfYW5fcmVzdGFydGAgaXMgZm9yIHJlc3RhcnRpbmcgYXV0by1uZWdvdGlhdGlvbiwgYG1hY2JfbWFjX2NvbmZpZ2AgY29uZmlndXJlcyB0aGUgTUFDLCBhbmQgc28gb24uXG5cblRoZSBmdW5jdGlvbnMgYXJlIHJlYWNoZWQgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHVwL2Rvd24gZXZlbnRzLCB3aGljaCBhcmUgbm9ybWFsbHkgaG93IHN5emthbGxlciBvcGVyYXRlcy5cblxuQnV0IGhlcmUncyB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGFyZSB0aGVzZSBmdW5jdGlvbnMgKndvcnRoKiBmdXp6aW5nPyBMb29raW5nIGF0IHRoZSBjb2RlLCBgbWFjYl9wY3NfYW5fcmVzdGFydGAgaXMgYmFzaWNhbGx5IGp1c3QgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcy4gU2FtZSB3aXRoIGBtYWNiX21hY19jb25maWdgLiBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AgcmV0dXJucyBhIHBvaW50ZXIuIE5vdGhpbmcgY29tcGxleCBoZXJlLiBgbWlpX3Byb2JlYCBzZXR0aW5nIHNvbWUgYm9vbGVhbnMsIHNldHRpbmcgc29tZSBiaXRzLCBpbml0IGRlZmF1bHRzIGlzIHNldHRpbmcgbW9yZSBiaXRzLiBgaW5pdF9yZXNldF9vcHRpb25hbGAgY2FsbHMgYGRldm1fcGh5X29wdGlvbmFsX2dldGAuIEl0J3MgdmVyeSBiYXNpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9uOyBubyBjb21wbGV4IGxvZ2ljLCBubyBwYWNrZXQgcGFyc2luZy5cblxuVGhlIHByb21wdCBzYXlzIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSBwYXRjaCBmb3IgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBpZiBpdCBoYXMgbW9kaWZpY2F0aW9ucyB0bzogRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMuLi4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlxuXG5JIHRoaW5rLCB0aGUga2V5IHRoaW5nIGZvciBmdXp6aW5nIGlzIHJlYWNoaW5nIHRoZSBkcml2ZXIgY29kZS4gSXQgKmNhbiogYmUgcmVhY2hlZCBpZiB0aGUgZGV2aWNlIGlzIHByb2JlZCwgdGhlIGZ1bmN0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkLlxuXG5TbywgKmhvdyogY2FuIHN5emthbGxlciB0cmlnZ2VyIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCBzcGVjaWZpY2FsbHk/IFdlbGwsIGl0IG5lZWRzIHBoeWxpbmsgdG8gY2FsbCBpdC4gU3l6a2FsbGVyIG1heSBiZSBhYmxlIHRvIHJlYWNoIHRoYXQsIGFuZCBpcyB0aGUga2V5IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSAoZXRodG9vbCkgb3IgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGFuZ2xlISBUaGUgYG1hY2JfcGNzX2FuX3Jlc3RhcnRgIHNlZW1zIHRvIGJlIHRoZSBwYXJ0IHdvcnRoIGZvY3Vzc2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjEuNjgzNjM0NTcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NTIzNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfcGNzX2FuX3Jlc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU3Mz1zdGF0aWMgdm9pZCBtYWNiX3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTg0OnN0YXRpYyB2b2lkIG1hY2JfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MzA9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgbWFjYl9waHlsaW5rX3Bjc19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYzMi1cXHQucGNzX2dldF9zdGF0ZSA9IG1hY2JfcGNzX2dldF9zdGF0ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjYzMzpcXHQucGNzX2FuX3Jlc3RhcnQgPSBtYWNiX3Bjc19hbl9yZXN0YXJ0LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjM0LVxcdC5wY3NfY29uZmlnID0gbWFjYl9wY3NfY29uZmlnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyMS43NzIxNjI1MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMzNDkyNTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBTeW1ib2wgQ29uc2lkZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgYXR0ZW50aW9uLiBgbWFjYl9wY3NfYW5fcmVzdGFydGAgZmVlbHMgbGlrZSBhIHNvbGlkIGNob2ljZSBhcyBhIGZvY3VzIHN5bWJvbC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYW5kIGZvY3VzaW5nIG9uIGl0IGNvdWxkIHlpZWxkIHNvbWUgaW50ZXJlc3RpbmcgaW5zaWdodHMuIE5vdywgSSdtIGFsc28gY29uc2lkZXJpbmcgYG1hY2JfbWFjX2NvbmZpZ2AuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCBhcmVhIHRvIGRpZyBpbnRvLiBJdCdzIHRpZWQgdG8gY29uZmlndXJhdGlvbiwgc28gdW5kZXJzdGFuZGluZyBpdCB0aG9yb3VnaGx5IGNvdWxkIGJlIHJlYWxseSBoZWxwZnVsLiBMZXQgbWUgc2VlIGhvdyB0aGUgdHdvIHJlbGF0ZSBhbmQgd2hpY2ggb25lIGlzIG1vcmUgcmVsZXZhbnQsIG9yIHBlcmhhcHMsIGV4cGxvcmUgYm90aCBpbiB0YW5kZW0uIEl0IGRlcGVuZHMgb24gdGhlIGlzc3VlIEkgYW0gdHJ5aW5nIHRvIHJlc29sdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MjksIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyNC45MDU2NTY5NDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ3OTUxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9tYWNfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01OTU9c3RhdGljIGludCBtYWNiX3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYxMC1cXHQgKiBNdXN0IGJlIHdyaXR0ZW4gYWZ0ZXIgUENTU0VMIGlzIHNldCBpbiBOQ0ZHUiB3aGljaCBpcyBkb25lIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MTE6XFx0ICogbWFjYl9tYWNfY29uZmlnKCksIG90aGVyd2lzZSB3cml0ZXMgd2lsbCBub3QgdGFrZSBlZmZlY3QuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy02MTItXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTcxOD1zdGF0aWMgaW50IG1hY2JfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNzM3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NzM4OnN0YXRpYyB2b2lkIG1hY2JfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy03MzktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz05NzU9c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgbWFjYl9waHlsaW5rX29wcyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ni1cXHQubWFjX3NlbGVjdF9wY3MgPSBtYWNiX21hY19zZWxlY3RfcGNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6OTc3OlxcdC5tYWNfY29uZmlnID0gbWFjYl9tYWNfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtOTc4LVxcdC5tYWNfbGlua19kb3duID0gbWFjYl9tYWNfbGlua19kb3duLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjoyNC45NjA0NTYyNjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY0NDk2ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AqKlxuXG5IbW0sIGBtYWNiX21hY19zZWxlY3RfcGNzYC4gVGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBvciBtb2R1bGUgbmFtZSBpcyBzdGlja2luZyBpbiBteSBtaW5kLiBJJ20gaW1tZWRpYXRlbHkgd29uZGVyaW5nIGFib3V0IGl0cyBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gSXMgaXQgcmVsYXRlZCB0byBNQUMgYWRkcmVzcyBzZWxlY3Rpb24sIHBlcmhhcHMgZm9yIHRoZSBNQUNCIEV0aGVybmV0IGNvbnRyb2xsZXI/IE9yIGlzIHRoZSBcIlBDU1wiIGEgZGlmZmVyZW50IGFjcm9ueW0/IEFyZSB3ZSB0YWxraW5nIFBoeXNpY2FsIENvZGluZyBTdWJsYXllcj8gT3Igc29tZXRoaW5nIGNvbXBsZXRlbHkgb3J0aG9nb25hbCwgbGlrZSBQcm9jZXNzb3IgQ29udHJvbCBTaWduYWxzLiBJIHNob3VsZCBsb29rIGludG8gd2hhdCB0aGF0IHNwZWNpZmljIG5hbWluZyBjb252ZW50aW9uIGhpbnRzIGF0IGluIHRoaXMgYXJjaGl0ZWN0dXJlJ3MgY29kZSBiYXNlLiBJdOKAmXMgaW1wb3J0YW50IHRvIGlkZW50aWZ5IGl0cyByb2xlIOKAkyBJcyB0aGlzIGRldmljZSBkcml2ZXIgb3IgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGNvZGU/IE15IGtub3dsZWRnZSBvZiBNQUNCIGNvbnRyb2xsZXIgaW50ZXJuYWxzIGlzIHByZXR0eSBzb2xpZCwgc28gYSBoaWdoLWxldmVsIHJldmlldyBvZiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIHNob3VsZCBwcm92aWRlIHNvbWUgcXVpY2sgaW5zaWdodHMsIGJ1dCBrbm93aW5nIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5ldHdvcmsgc3RhY2sgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGZ1bGwgaW1wYWN0LiBJIHdpbGwgd2FudCB0byB0cmFjZSBjYWxscyB0byB1bmRlcnN0YW5kIHRoZSBmbG93LiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgd2hhdCBhbmQgd2h5IGl0IGlzIHByZXNlbnQsIGJ1dCBtb3JlIGltcG9ydGFudGx5IGhvdyBpdCBvcGVyYXRlcyBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjE0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjguNDI0OTU0NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0ODg2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTg5ND1zdGF0aWMgdm9pZCBtYWNiX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy05NTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo5NjA6c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqbWFjYl9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk2MS1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9OTc1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIG1hY2JfcGh5bGlua19vcHMgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo5NzY6XFx0Lm1hY19zZWxlY3RfcGNzID0gbWFjYl9tYWNfc2VsZWN0X3BjcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTk3Ny1cXHQubWFjX2NvbmZpZyA9IG1hY2JfbWFjX2NvbmZpZyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MjguNDc5ODQ4MTY2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjg2OTkxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEEgUHJvYmUgRnVuY3Rpb24ncyBQb3RlbnRpYWwqKlxuXG5IbW0sIHNvIHRoZSBwcm9tcHQgbWVudGlvbnMgYG1hY2JfbWlpX3Byb2JlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBhYm91dCAqdGhhdCogZnVuY3Rpb24/XCIgSXQncyBub3QgYSBnZW5lcmljIHF1ZXN0aW9uLiBJdCBpbXBsaWVzIEknbSBhbHJlYWR5IHdpdGhpbiBhIHNwZWNpZmljIGNvbnRleHQsIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gaXNzdWUgcmVsYXRlZCB0byB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyIGFuZCBpdHMgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNSUkpIHByb2JpbmcgcHJvY2Vzcy4gTXkgbWluZCdzIHdvcmtpbmcgb24gYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGFuZCBJJ20gcHJvYmFibHkgY29uc2lkZXJpbmcgYSBwYXJ0aWN1bGFyIHByb2JsZW0gb3IgZGVidWdnaW5nIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBwcm9iZSBmdW5jdGlvbidzIGJlaGF2aW9yIGlzIGNyaXRpY2FsLiBJJ20gbGlrZWx5IGFzc2Vzc2luZywgYmFzZWQgb24gdGhlIGluY29tcGxldGUgcGhyYXNlIFwiV2hhdCBhYm91dC4uLlwiLCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwcm9iZSBmdW5jdGlvbiByZWxhdGVkIHRvIHRoZSBjb250ZXh0IEkga25vdy4gSSBtaWdodCBiZSBjb25zaWRlcmluZyBhbHRlcm5hdGl2ZSBwcm9iZSBiZWhhdmlvcnMsIG9yIGxvb2tpbmcgaW50byB3aHkgaXQncyBwb3RlbnRpYWxseSBmYWlsaW5nIHRvIHdvcmsgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3OTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjozMS43NDg1NDk1MzRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTI5MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIyPXN0YXRpYyB2b2lkIG1hY2JfZ2V0X3Bjc19maXhlZF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMS0vKiBiYXNlZCBvbiBhdTEwMDBfZXRoLiBjKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwMzI6c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTAzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTExMzk9c3RhdGljIGludCBtYWNiX21paV9pbml0KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTE0OS1cXHRpZiAoIW1kaW9fbnAgXFx1MDAyNlxcdTAwMjYgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsobnApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE1MDpcXHRcXHRyZXR1cm4gbWFjYl9taWlfcHJvYmUoYnAtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMTc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTE3NzpcXHRlcnIgPSBtYWNiX21paV9wcm9iZShicC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTExNzgtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzEuODAzNDgyMDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzcwODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIEluaXRpYWxpemF0aW9uIEZ1bmN0aW9uKipcblxuSG1tLCAqbWFjYl9pbml0X2RmbHQqLi4uIHRoYXQgbmFtZSBmZWVscyBmYW1pbGlhci4gSXQncyBsaWtlbHkgYSBkZWZhdWx0IGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHByb2JhYmx5IGZvciBhIE1BQyAoTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIpIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0uIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyBwdXJwb3NlLiBJcyBpdCBhIGZhbGxiYWNrIG9wdGlvbiB3aGVuIHNwZWNpZmljIGhhcmR3YXJlLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBmYWlscz8gRG9lcyBpdCBwZXJmb3JtIGVzc2VudGlhbCByZWdpc3RlciBzZXR1cCBjb21tb24gYWNyb3NzIGEgcmFuZ2Ugb2YgTUFDIGltcGxlbWVudGF0aW9ucz8gSXMgdGhpcyBhIHN0YW5kYXJkIGRlZmluaXRpb24sIHBlcmhhcHMgaW4gYSBzdGFuZGFyZCBsaWJyYXJ5P1xuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHNjb3BlLiBEb2VzIHRoaXMgcm91dGluZSBoYW5kbGUgcG93ZXItdXAgY29uZmlndXJhdGlvbj8gQ2xvY2sgc2V0dXA/IEludGVycnVwdCBjb25maWd1cmF0aW9uPyBNZW1vcnkgYWxsb2NhdGlvbj8gRG9lcyBpdCBpbml0aWFsaXplIGFueSBzcGVjaWZpYyBETUEgY2hhbm5lbHM/IEFuZCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGNvbnNlcXVlbmNlcyBvZiBfbm90XyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IENvdWxkIGl0IGxlYXZlIHRoZSBNQUMgaW4gYW4gdW5kZWZpbmVkIHN0YXRlLCBsZWFkaW5nIHRvIHVucHJlZGljdGFibGUgYmVoYXZpb3IsIGxpa2UgbmV0d29yayBkcm9wb3V0cyBvciBkYXRhIGNvcnJ1cHRpb24/XG5cbk15IGltbWVkaWF0ZSBtZW50YWwgY2hlY2tsaXN0IG5vdyBpbmNsdWRlczpcblxuKiAgICoqRG9jdW1lbnRhdGlvbjoqKiBXaGVyZSBjYW4gSSBmaW5kIHRob3JvdWdoIGRvY3VtZW50YXRpb24gb24gYG1hY2JfaW5pdF9kZmx0YCBhbmQgaXRzIHNwZWNpZmljIGFyZ3VtZW50cyBhbmQgZWZmZWN0cz9cbiogICAqKlNvdXJjZSBDb2RlOioqIElmIGRvY3VtZW50YXRpb24gaXMgbGFja2luZywgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gZGV0YWlsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIGJ1dCBhbHNvIHNlYXJjaCB3aGVyZSBpdCBpcyB1c2VkLlxuKiAgICoqSGFyZHdhcmUgRGVwZW5kZW5jaWVzOioqIFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFzc3VtcHRpb25zIG1hZGUgYnkgYG1hY2JfaW5pdF9kZmx0YD8gQXJlIHRoZXJlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGl0IG5lZWRzIHRvIGFjY291bnQgZm9yLCBvciBpcyBpdCBpbnRlbmRlZCB0byBiZSByZWxhdGl2ZWx5IGdlbmVyaWM/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGtpbmQgb2YgZXJyb3IgY2hlY2tpbmcgaXMgcGVyZm9ybWVkIHdpdGhpbiBgbWFjYl9pbml0X2RmbHRgPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgYW5kIGhvdyBhcmUgdGhlc2UgaGFuZGxlZCBieSB0aGUgY2FsbGluZyBjb2RlP1xuKiAgICoqUGVyZm9ybWFuY2UgSW1wbGljYXRpb25zOioqIElzIHRoaXMgYSB0aW1lLWNyaXRpY2FsIGluaXRpYWxpemF0aW9uIHByb2Nlc3M/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgcnVubmluZyB0aGlzIGZ1bmN0aW9uP1xuXG5NeSBndXQgdGVsbHMgbWUgaXQncyBpbXBvcnRhbnQgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vaywgZXZlbiBpZiBteSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBpcyBnZW5lcmljLiBUaGVyZeKAmXMgYWxtb3N0IGNlcnRhaW5seSBzb21ldGhpbmcgaW4gdGhlcmUgdGhhdCBuZWVkcyB0byBiZSBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzYuMTU3MTkyMDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQxNzc2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX2luaXRfZGZsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NDc1MT1zdGF0aWMgaW50IG1hY2JfY2xrX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGNsayAqKnBjbGssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo0NzY0OnN0YXRpYyBpbnQgbWFjYl9pbml0X2RmbHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ3NjUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz00OTU3PXN0YXRpYyBpbnQgbWFjYl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTQ5NjItXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NDk2MzpcXHRcXHRyZXR1cm4gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy00OTY0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTQ2MD1zdGF0aWMgaW50IGZ1NTQwX2MwMDBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTQ2NjpcXHRyZXR1cm4gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NDY3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTQ2OT1zdGF0aWMgaW50IGluaXRfcmVzZXRfb3B0aW9uYWwoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTUxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU1MTc6XFx0cmV0ID0gbWFjYl9pbml0X2RmbHQocGRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTE4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NTI2PXN0YXRpYyBpbnQgZXllcTVfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NTQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NTU0MjpcXHRyZXQgPSBtYWNiX2luaXRfZGZsdChwZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU1NDMtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzYuMjEyNjE0NDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjA4NzQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQ29uc2lkZXJpbmcgSW5pdGlhbGl6YXRpb24gUmVzZXQgT3B0aW9ucyoqXG5cbkhtbSwgc28gd2UncmUgbG9va2luZyBhdCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gTGV0J3Mgc2VlLi4uIHdlJ3ZlIGdvdCB0aGUgdXN1YWwgc2V0IG9mIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXMgaGFuZGxlZCwgSSBhc3N1bWUuIEJ1dCwgSSdtIHdvbmRlcmluZy4uLiB3aGF0IGFib3V0IHRoZSBlZGdlIGNhc2VzLCB0aGUgbW9yZSBudWFuY2VkIHNjZW5hcmlvcz8gV2hhdCBhYm91dCB3aGVuIHdlIHdhbnQgYSBtb3JlIHNlbGVjdGl2ZSByZXNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24/IFNwZWNpZmljYWxseSwgdGhhdCBmdW5jdGlvbiwgYGluaXRfcmVzZXRfb3B0aW9uYWxgLi4uIHRoYXQncyBiZWVuIGJ1Z2dpbmcgbWUgZm9yIGEgYml0LiBXZSdyZSB0YWxraW5nIGFib3V0IGEgcmVzZXQgZnVuY3Rpb24gdGhhdCBpc24ndCBhbHdheXMgc3RyaWN0bHkgcmVxdWlyZWQuIEFyZSB3ZSBoYW5kbGluZyB0aG9zZSBjYXNlcyBjb3JyZWN0bHk/IEFyZSB3ZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBzdWJ0bGUgc3RhdGUgaW5jb25zaXN0ZW5jaWVzIGJ5ICpub3QqIHJlc2V0dGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMsIG9yLCBjb252ZXJzZWx5LCBwb3RlbnRpYWxseSBvdmVyLXJlc2V0dGluZyB0aGluZ3Mgd2hlbiBhIG1vcmUgdGFyZ2V0ZWQgaW5pdGlhbGl6YXRpb24gd291bGQgc3VmZmljZT8gSXQncyBlYXN5IHRvIG92ZXJsb29rIHRoZXNlIG9wdGlvbmFsIHJlc2V0cywgYnV0IHRoZXkgY2FuIGJlIGNyaXRpY2FsIGZvciBhdm9pZGluZyBoYXJkLXRvLWRlYnVnIGlzc3VlcyBkb3duIHRoZSBsaW5lLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggc3lzdGVtcyB3aXRoIGEgbG90IG9mIGludGVyZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gcmV2aXNpdCB0aGF0IGZ1bmN0aW9uIGFuZCByZWFsbHkgaW50ZXJyb2dhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQncyBlbXBsb3llZC4gQXJlIHRoZSBhc3N1bXB0aW9ucyBhcm91bmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgIGNsZWFybHkgZG9jdW1lbnRlZD8gQXJlIHdlIGFkZXF1YXRlbHkgdGVzdGluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIGl0IGlzIHVzZWQgb3IgYnlwYXNzZWQ/IEknbSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgaXRzIHB1cnBvc2UgYW5kIGVuc3VyZSBpdCdzIGludGVncmF0ZWQgc2VhbWxlc3NseSBpbnRvIHRoZSBleGlzdGluZyBpbml0aWFsaXphdGlvbiBmbG93IHdpdGhvdXQgb3BlbmluZyBhbnkgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6MzkuNzczNDkxMzA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA5NzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X3Jlc2V0X29wdGlvbmFsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU0NjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTQ3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjQ4LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjQ5OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjY3LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjY4OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXFx0LnVzcmlvID0gXFx1MDAyNm1wZnNfdXNyaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzAxOlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MDItXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTcyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHBpYzY0aHBzY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU3MzA6XFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTczMS1cXHQuanVtYm9fbWF4X2xlbiA9IDE2MzgzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjozOS44Mjk1OTM2OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDY3NTYzMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgQW5hbHlzaXM6IENhZGVuY2UgTUFDQiBEcml2ZXIgZm9yIDEwMDBCQVNFWCBTdXBwb3J0KipcblxuT2theSwgc28gYGluaXRfcmVzZXRfb3B0aW9uYWxgIHRvdWNoZXMgY29uZmlndXJhdGlvbnMgZm9yIFp5bnFNUCwgTVBGUywgVmVyc2FsLCBhbmQgUElDNjRIUFNDLiBaeW5xTVAgaXMgc3VwcG9ydGVkIGluIFFFTVUsIHNwZWNpZmljYWxseSBgeGxueC16eW5xbXBgLCBzbyB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/XG5cblRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYYCB0byB0aGUgQ2FkZW5jZSBNQUNCIGRyaXZlci4gSSd2ZSB0YWtlbiBhIGNsb3NlIGxvb2ssIGFuZCB0aGUgY2hhbmdlcyAqc2VlbSogcHVyZWx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgY29uZmlndXJhdGlvbjogc2V0dGluZyBiaXRzIGluIHJlZ2lzdGVycywgc2VsZWN0aW5nIHRoZSBQQ1MsIHRoaW5ncyBsaWtlIHRoYXQuIFRoZXJlIGlzbid0IGFueSBjb21wbGV4IGxvZ2ljLCBwYWNrZXQgcGFyc2luZywgb3Igc3RhdGUgbWFjaGluZSBpbnZvbHZlZC4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGEgaGFyZHdhcmUgZHJpdmVyLCB0aG91Z2guIElzIHRoaXMgZnV6emFibGU/XG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbG9va3MgbGlrZSB0aGlzOiBzaW1wbGUgcmVnaXN0ZXIgcmVhZC93cml0ZSwgYml0IHNldHRpbmcsIHBvaW50ZXIgcmV0dXJucywgc2V0dGluZyBhIGJvb2xlYW4sIGlmIGNvbmRpdGlvbnMsIGFuZCBzZXR0aW5nIGEgYml0IGluIGEgYml0bWFwLiBOb3RoaW5nIGZhbmN5LiBJdCBsb29rcyBsaWtlIGl0J3MganVzdCBhZGRpbmcgYFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVhgIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpbnRlcmZhY2VzIGFuZCBzZXR0aW5nIHRoZSBgUENTU0VMYCBiaXQgYXMgbmVjZXNzYXJ5LlxuXG5UaGUgcHJvbXB0IHNheXMgSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgZG9jdW1lbnRhdGlvbiwgS2NvbmZpZyBjaGFuZ2VzLCBkZWNvcmF0aXZlLCByZWxhdGVkIHRvIGNvbnN0YW50IG9yIG1hY3JvcyB3aXRob3V0IGZ1bmN0aW9uYWwgZXhlY3V0aW9uIGFsdGVyYXRpb24sIG9yIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBIb3dldmVyLCB0aGlzIHBhdGNoICpkb2VzKiBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cgYnkgZW5hYmxpbmcgdGhlIG5ldyBQSFkgaW50ZXJmYWNlIG1vZGUgYW5kIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZS4gSXQgKmlzKiByZWFjaGFibGUgaW4gUUVNVSwgc2luY2UgWnlucU1QIGlzIHN1cHBvcnRlZC4gVGhlIHBhdGNoIGlzIGFib3V0IGZ1bmN0aW9uYWwgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBwcm9tcHQgc3RhdGVzIHRoZSBuZWdhdGl2ZSBjYXNlcywgYW5kIHRoaXMgcGF0Y2ggZG9lc24ndCBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIFwibmVnYXRpdmUgY2FzZXMuXCJcblxuVGhlcmVmb3JlLCBJIHRoaW5rIHRoZSBhbmFseXNpcyBsZWFkcyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC5cblxuV2FpdCwgYmVmb3JlIEkgZGVjaWRlLCBJIHNob3VsZCBkb3VibGUgY2hlY2suIElzIHRoZXJlIGFueSBwYXJ0aWN1bGFyIENPTkZJRyBvcHRpb24gcmVxdWlyZWQ/IGBNQUNCYCBhcHBlYXJzIHRvIGJlIHRoZSByZXF1aXJlZCBjb25maWcuIEFuZCBzaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIGF0IHBsYXksIHRoZSBjb25jbHVzaW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjo0OC44OTcxNTg5OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNDMxMTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTIwPWlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjMtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6Mzc6Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzgtXFx0Ym9vbCBcXFwiVXNlIElFRUUgMTU4OCBod3N0YW1wXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzo0NTpjb25maWcgTUFDQl9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjUxLjkzMTQ3ODExNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDUwMDI3OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gYE1BQ0JgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZSB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSXQncyBjcnVjaWFsIHRvIG1hcCBvdXQgd2hhdCBgTUFDQmAgcmVsaWVzIG9uIGJlY2F1c2UgYSBjaGFuZ2UgdGhlcmUgY2FuIGNhc2NhZGUuIEFyZSB0aGVyZSBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzLCBsaWJyYXJpZXMsIG9yIGV4dGVybmFsIHNlcnZpY2VzIHRoYXQgYE1BQ0JgIHB1bGxzIGRhdGEgb3Igc2V0dGluZ3MgZnJvbT8gSWYgaXQgZG9lcywgYSBjaGFuZ2UgaW4gYW55IG9mIHRob3NlIGRlcGVuZGVuY2llcyBtaWdodCBpbmFkdmVydGVudGx5IGJyZWFrIGBNQUNCYCBvciBpbnRyb2R1Y2Ugc3VidGxlLCB5ZXQgY3JpdGljYWwsIHNpZGUgZWZmZWN0cy4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgdGhpcyBtYXBwZWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM1MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjU0Ljk4MTUwNzg3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzA3NzQ3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0IkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzoyMjpjb25maWcgTUFDQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNjo1NS4zMTIyODc4NDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMDI5MDc5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNjb3Bpbmcgb3V0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJvdW5kIGxpbmUgMjIuIFRoaXMgbGlrZWx5IHRvdWNoZXMgdXBvbiB0aGUgY29yZSBDYWRlbmNlIEV0aGVybmV0IE1BQyBkcml2ZXIncyBzZXR0aW5ncy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOlxuXG4qICAgKipGZWF0dXJlIHRvZ2dsZXMqKjogUG90ZW50aWFsIGhhcmR3YXJlIHZhcmlhbnRzLCBzdXBwb3J0IGZvciBzcGVjaWZpYyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpLCBvciBwZXJoYXBzIGRpZmZlcmVudCBETUEgY29uZmlndXJhdGlvbnMuXG4qICAgKipEZXBlbmRlbmNpZXMqKjogV2hhdCBvdGhlciBrZXJuZWwgY29tcG9uZW50cyBvciBkcml2ZXJzIGFyZSByZXF1aXJlZCBvciBvcHRpb25hbCBmb3IgdGhlIENhZGVuY2UgRXRoZXJuZXQgZHJpdmVyIHRvIGJ1aWxkIGFuZCBmdW5jdGlvbiBjb3JyZWN0bHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbG9jayBzZXR0aW5ncyBvciBidXMgaW50ZXJmYWNlIHJlcXVpcmVtZW50cz9cbiogICAqKkRlZmF1bHQgdmFsdWVzKio6IFdoYXQgYXJlIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZXNlIG9wdGlvbnM/IEtub3dpbmcgdGhpcyBpcyB2aXRhbCB0byB1bmRlcnN0YW5kIHRoZSBcIm91dC1vZi10aGUtYm94XCIgYmVoYXZpb3IgYW5kIHF1aWNrbHkgaWRlbnRpZnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBhZGp1c3RtZW50IGJhc2VkIG9uIHRoZSBwYXJ0aWN1bGFyIGhhcmR3YXJlIHBsYXRmb3JtIEknbSB3b3JraW5nIHdpdGguXG4qICAgKipEb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzKio6IEhvcGVmdWxseSwgdGhlIEtjb25maWcgZW50cmllcyBhcmUgd2VsbC1jb21tZW50ZWQuIEdvb2QgZG9jdW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhlIHB1cnBvc2UsIGltcGxpY2F0aW9ucywgYW5kIHBvdGVudGlhbGx5IHRoZSB0cmFkZS1vZmZzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGUgY29tbWVudHMgYWNjdXJhdGU/IEknbGwgcHJvYmFibHkgYmUgYWJsZSB0byB0ZWxsIHByZXR0eSBxdWlja2x5LlxuKiAgICoqUG90ZW50aWFsIGNvbmZsaWN0cyoqOiBBIHF1aWNrIHNjYW4gd2lsbCBoZWxwIG1lIGRldGVybWluZSBpZiBhbnkgc2V0dGluZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvciBtaWdodCBjYXVzZSBpc3N1ZXMgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBvciBhdCBydW50aW1lLlxuXG5JJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYWJsZSBhc3BlY3RzIG9mIHRoaXMgZHJpdmVyIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gdGhlbiBpZGVudGlmeSB3aGF0IEkgbmVlZCB0byBhZGRyZXNzIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjUwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTVUMDY6MjY6NTkuODEyNTgxOTM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBDYWRlbmNlIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX0NBREVOQ0VcXG4gICA3OlxcdFxcdGJvb2wgXFxcIkNhZGVuY2UgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSEFTX0lPTUVNXFxuICAgOTpcXHRcXHRkZWZhdWx0IHlcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTY6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsIHRoZVxcbiAgMTc6XFx0XFx0ICByZW1haW5pbmcgQ2FkZW5jZSBuZXR3b3JrIGNhcmQgcXVlc3Rpb25zLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlXFxuICAxODpcXHRcXHQgIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGlmIE5FVF9WRU5ET1JfQ0FERU5DRVxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgTUFDQlxcbiAgMjM6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBDT01NT05fQ0xLXFxuICAyNTpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNjpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgMjc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIFRoZSBDYWRlbmNlIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQXRtZWwgQVQzMiBhbmRcXG4gIDMwOlxcdFxcdCAgQVQ5MSBwYXJ0cy4gIFRoaXMgZHJpdmVyIGFsc28gc3VwcG9ydHMgdGhlIENhZGVuY2UgR0VNIChHaWdhYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI2OjU5LjgxMjY1NzMwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDI4NzYyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIGBNQUNCYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCdzIGNsZWFyLiBCdXQgdGhlbiBhIHRob3VnaHQgcG9wcyB1cDogaGFuZyBvbiwgd2hhdCBhYm91dCBgTUFDQl9QQ0lgPyBJdCBkYXducyBvbiBtZSB0aGF0IGlmIHdlJ3JlIGxvb2tpbmcgYXQgZnV6emluZyBwb3NzaWJpbGl0aWVzLCBwYXJ0aWN1bGFybHkgYXMgYSBQQ0kgZGV2aWNlLCB0aGF0IHNlY29uZCBvcHRpb24gbWlnaHQgYWN0dWFsbHkgYmUgdGhlIG1vcmUgcmVsZXZhbnQgb25lIHRvIGludmVzdGlnYXRlLiBHb3R0YSBrZWVwIGFsbCB0aGUgYW5nbGVzIGluIG1pbmQgd2hlbiBjb25zaWRlcmluZyB0ZXN0aW5nIHN0cmF0ZWdpZXMuIFRoZXJlZm9yZSwgbGV0IG1lIGNvbnN1bHQgdGhlIHNvdXJjZS4gTGV0J3MgaGVhZCBvdmVyIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnYCBmaWxlIGFyb3VuZCBsaW5lIDQ1LCB0aGF0J3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI3OjAyLjg0MTQyMTczNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE1VDA2OjI3OjAyLjg0MTQ4Mjg2NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODQ4Njg1NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgYE1BQ0JfUENJYCBjb25maWd1cmF0aW9uIGlzIGEgc21hcnQgbW92ZS4gSXQgd3JhcHMgdGhlIHN0YW5kYXJkIE1BQ0IgZHJpdmVyIGFuZCwgaW1wb3J0YW50bHksIG1ha2VzIGl0IGZ1enphYmxlIHZpYSBTeXprYWxsZXIncyBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgTUFDQmAgYW5kIGBNQUNCX1BDSWAuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gTXkgaW5pdGlhbCBzY2FuIHR1cm5lZCB1cCBhIGZldyBpbnRlcmVzdGluZyBjYW5kaWRhdGVzOiBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGBtYWNiX21paV9wcm9iZWAsIGBtYWNiX2luaXRfZGZsdGAsIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIEkgaGF2ZSB0byByZW1lbWJlciB0aGF0IGBpbml0X3Jlc2V0X29wdGlvbmFsYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0J3MgYSBjYWxsYmFjayB3aXRoaW4gYG1hY2JfY29uZmlnYC4gYG1hY2JfaW5pdF9kZmx0YCBzZWVtcyB0byBiZSBhbm90aGVyIGNhbGxiYWNrIG9yIGlzIGNhbGxlZCBkaXJlY3RseS4gIGBtYWNiX21paV9wcm9iZWAgaXMgY2xlYXJseSBwYXJ0IG9mIHRoZSBwcm9iZSBzZXF1ZW5jZS4gIGBtYWNiX3Bjc19hbl9yZXN0YXJ0YCwgYG1hY2JfbWFjX2NvbmZpZ2AsIGFuZCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AgYXJlIGJlaW5nIGNhbGxlZCBieSBwaHlsaW5rLCB3aGljaCBpcyBhbHdheXMgaW50ZXJlc3RpbmcuXG5cbkNvbnNpZGVyaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIEkgaW5pdGlhbGx5IGRlY2lkZWQgdG8gbGlzdCBgbWFjYl9wY3NfYW5fcmVzdGFydGAsIGBtYWNiX21hY19jb25maWdgLCBgbWFjYl9tYWNfc2VsZWN0X3Bjc2AsIGFuZCBgbWFjYl9taWlfcHJvYmVgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ3ZlIHJlLWV4YW1pbmVkIHRoZSBjb2RlIGNoYW5nZXMsIGFuZCBpdCdzIGNsZWFyIEkndmUgZ290IHRvIHRha2UgYSBicm9hZGVyIHZpZXcuIFRoZSBkaWZmIGNvbmZpcm1zIHRob3NlLCBidXQgYWxzbyBpbmNsdWRlcyBgbWFjYl9pbml0X2RmbHRgIGFuZCBgaW5pdF9yZXNldF9vcHRpb25hbGAuXG5cblNvLCBmb3IgdGhlIGBGb2N1c1N5bWJvbHNgLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBhbGwgb2YgdGhlbTogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLlxuXG5BIGJyaWVmIHNhbml0eSBjaGVjayBpcyB3YXJyYW50ZWQsIGVzcGVjaWFsbHkgd2l0aCBgaW5pdF9yZXNldF9vcHRpb25hbGAuIFRoZSBuYW1lIGlzIGEgbGl0dGxlIGdlbmVyaWMsIGJ1dCBpdCBpcyBzdGF0aWMgdG8gYG1hY2JfbWFpbi5jYCwgd2hpY2ggc2hvdWxkIG1ha2UgaXQgdW5pcXVlIGVub3VnaCB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzowOS42OTAxNzAwNDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDkyNzc4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF9yZXNldF9vcHRpb25hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz01NDYwPXN0YXRpYyBpbnQgZnU1NDBfYzAwMF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU0NjgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NDY5OnN0YXRpYyBpbnQgaW5pdF9yZXNldF9vcHRpb25hbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTQ3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2NDM9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB6eW5xbXBfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjQ4LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjQ5OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NTAtXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTY2Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIG1wZnNfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NjY3LVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NjY4OlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU2NjktXFx0LnVzcmlvID0gXFx1MDAyNm1wZnNfdXNyaW8sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTU2OTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBtYWNiX2NvbmZpZyB2ZXJzYWxfY29uZmlnID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy01NzAwLVxcdC5kbWFfYnVyc3RfbGVuZ3RoID0gMTYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo1NzAxOlxcdC5pbml0ID0gaW5pdF9yZXNldF9vcHRpb25hbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MDItXFx0Lmp1bWJvX21heF9sZW4gPSAxMDI0MCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9NTcyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG1hY2JfY29uZmlnIHBpYzY0aHBzY19jb25maWcgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTU3MjktXFx0LmRtYV9idXJzdF9sZW5ndGggPSAxNixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjU3MzA6XFx0LmluaXQgPSBpbml0X3Jlc2V0X29wdGlvbmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNTczMS1cXHQuanVtYm9fbWF4X2xlbiA9IDE2MzgzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzoxMS45Mzk0NTI1NDJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0MTQ0NDQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRnV6emluZyBSZWNvbW1lbmRhdGlvbjogQ2FkZW5jZSBNQUNCIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHRoaXMgbG9va3MgbGlrZSBhIGdvb2QgY2FuZGlkYXRlLiBJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgc3BlY2lmaWMgdG8gdGhpcyBmaWxlLiBNeSByZWFzb25pbmc/IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWGAgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbW9kaWZ5aW5nIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGR1cmluZyBib3RoIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMsIGFzIG1hbmFnZWQgYnkgcGh5bGluay4gRnVydGhlcm1vcmUsIHRoaXMgZHJpdmVyIGlzIGFjY2Vzc2libGUgd2l0aGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IFFFTVUsIHdoaWNoIGVtdWxhdGVzIHRoZSBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcywgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB1c2luZyB0aGUgUENJIHdyYXBwZXIgKGBNQUNCX1BDSWApLiBTaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggcmVhY2hhYmxlIGRyaXZlciBsb2dpYyB0aGF0IGhhcyB1bmRlcmdvbmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLlxuXG5HaXZlbiB0aGlzLCBJIHNob3VsZCBlbmFibGUgZnV6emluZyBmb3IgdGhlIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCBjb25maWd1cmF0aW9ucy4gQW5kIHRvIGd1aWRlIHRoZSBmdXp6aW5nIHByb2Nlc3MgZWZmZWN0aXZlbHksIEknbGwgZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYG1hY2JfcGNzX2FuX3Jlc3RhcnRgLCBgbWFjYl9tYWNfY29uZmlnYCwgYG1hY2JfbWFjX3NlbGVjdF9wY3NgLCBgbWFjYl9taWlfcHJvYmVgLCBgbWFjYl9pbml0X2RmbHRgLCBhbmQgYGluaXRfcmVzZXRfb3B0aW9uYWxgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzExLCJPdXRwdXRUb2tlbnMiOjIwNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNVQwNjoyNzoxOC45ODA4OTg2MDhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzY0ODUzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3Bjc19hbl9yZXN0YXJ0XCIsXG4gICAgXCJtYWNiX21hY19jb25maWdcIixcbiAgICBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gICAgXCJtYWNiX2luaXRfZGZsdFwiLFxuICAgIFwiaW5pdF9yZXNldF9vcHRpb25hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX3Bjc19hbl9yZXN0YXJ0XCIsXG4gICAgXCJtYWNiX21hY19jb25maWdcIixcbiAgICBcIm1hY2JfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcIm1hY2JfbWlpX3Byb2JlXCIsXG4gICAgXCJtYWNiX2luaXRfZGZsdFwiLFxuICAgIFwiaW5pdF9yZXNldF9vcHRpb25hbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggaW50ZXJmYWNlIG1vZGUgdG8gdGhlIENhZGVuY2UgTUFDQiBldGhlcm5ldCBkcml2ZXIuIEl0IG1vZGlmaWVzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbG9naWMgZHVyaW5nIGRldmljZSBwcm9iZSBhbmQgaW50ZXJmYWNlIHN0YXRlIGNoYW5nZXMgKHZpYSBwaHlsaW5rKS4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VICh3aGljaCBlbXVsYXRlcyBDYWRlbmNlIEdFTSBmb3IgWnlucU1QIGJvYXJkcykgYW5kIGNhbiBhbHNvIGJlIHRlc3RlZCB2aWEgdGhlIFBDSSB3cmFwcGVyIChNQUNCX1BDSSkuIFNpbmNlIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBkcml2ZXIgbG9naWMsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[1] Phase: Succeeded StartedAt: 2026-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 06:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 06:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2] Phase: Succeeded StartedAt: 2026-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 06:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:30 +0000 UTC FinishedAt: 2026-07-15 06:27:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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-workflowqp6dc/series-workflowqp6dc-convert-artifact-1181034224/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:40 +0000 UTC FinishedAt: 2026-07-15 07:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:40 +0000 UTC FinishedAt: 2026-07-15 07:01:05 +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:*d2d5180f-9903-425c-8ae5-414bfe3bc17f,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-workflowqp6dc/series-workflowqp6dc-convert-artifact-1181034224/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": "e0ba1792-2d38-417f-80b7-83ca862c5309", "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-workflowqp6dc/series-workflowqp6dc-build-action-3774755318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 06:27:40 +0000 UTC FinishedAt: 2026-07-15 07:00:55 +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:*d2d5180f-9903-425c-8ae5-414bfe3bc17f,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-workflowqp6dc/series-workflowqp6dc-convert-artifact-1181034224/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": "e0ba1792-2d38-417f-80b7-83ca862c5309", "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-workflowqp6dc/series-workflowqp6dc-build-action-3774755318/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:05 +0000 UTC FinishedAt: 2026-07-15 07:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:05 +0000 UTC FinishedAt: 2026-07-15 07:01:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:05 +0000 UTC FinishedAt: 2026-07-15 07:01:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:05 +0000 UTC FinishedAt: 2026-07-15 07:01:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-workflowqp6dc/series-workflowqp6dc-convert-artifact-2296732375/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:25 +0000 UTC FinishedAt: 2026-07-15 07:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:01:25 +0000 UTC FinishedAt: 2026-07-15 07:03:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0ba1792-2d38-417f-80b7-83ca862c5309,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-workflowqp6dc/series-workflowqp6dc-build-action-3774755318/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-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:03:28 +0000 UTC FinishedAt: 2026-07-15 07:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:03:28 +0000 UTC FinishedAt: 2026-07-15 07:03:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:03:28 +0000 UTC FinishedAt: 2026-07-15 07:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:03:28 +0000 UTC FinishedAt: 2026-07-15 07:32:35 +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:*d2d5180f-9903-425c-8ae5-414bfe3bc17f,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-workflowqp6dc/series-workflowqp6dc-convert-artifact-2296732375/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": "5afaef42-a504-482a-9bf8-d6cf0e4b84a3", "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-workflowqp6dc/series-workflowqp6dc-build-action-1237832219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:03:28 +0000 UTC FinishedAt: 2026-07-15 07:32:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d2d5180f-9903-425c-8ae5-414bfe3bc17f,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-workflowqp6dc/series-workflowqp6dc-convert-artifact-2296732375/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": "5afaef42-a504-482a-9bf8-d6cf0e4b84a3", "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-workflowqp6dc/series-workflowqp6dc-build-action-1237832219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:32:35 +0000 UTC FinishedAt: 2026-07-15 07:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:32:35 +0000 UTC FinishedAt: 2026-07-15 07:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:32:35 +0000 UTC FinishedAt: 2026-07-15 07:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:32:35 +0000 UTC FinishedAt: 2026-07-15 07:34:39 +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:*5afaef42-a504-482a-9bf8-d6cf0e4b84a3,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-workflowqp6dc/series-workflowqp6dc-build-action-1237832219/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-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"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:*e0ba1792-2d38-417f-80b7-83ca862c5309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5afaef42-a504-482a-9bf8-d6cf0e4b84a3,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-workflowqp6dc/series-workflowqp6dc-build-action-3774755318/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-workflowqp6dc/series-workflowqp6dc-build-action-1237832219/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:35:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:35:18 +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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"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-workflowqp6dc/series-workflowqp6dc-convert-artifact-3718371472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:34:48 +0000 UTC FinishedAt: 2026-07-15 07:34:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:35:25 +0000 UTC FinishedAt: 2026-07-15 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqp6dc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"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":["macb_pcs_an_restart","macb_mac_config","macb_mac_select_pcs","macb_mii_probe","macb_init_dflt","init_reset_optional"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"8a468ff4-aad6-441d-9ab1-6d636bccb9e0","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-07-15 07:35:25 +0000 UTC FinishedAt: 2026-07-15 07:36:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0ba1792-2d38-417f-80b7-83ca862c5309,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5afaef42-a504-482a-9bf8-d6cf0e4b84a3,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-workflowqp6dc/series-workflowqp6dc-build-action-3774755318/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-workflowqp6dc/series-workflowqp6dc-build-action-1237832219/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-workflowqp6dc/series-workflowqp6dc-convert-artifact-3718371472/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,}