Name: series-workflowspxmb Phase: Succeeded StartedAt: 2026-09-06 04:44:36 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[0] Phase: Succeeded StartedAt: 2026-09-06 04:44:36 +0000 UTC FinishedAt: 2026-09-06 05:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 04:44:36 +0000 UTC FinishedAt: 2026-09-06 05:02:48 +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": "3f4b7d1a49c5c826f3be9b684313eea5b83ac232", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "NET_IPGRE", "NET_IPIP", "NET_FOU_IP_TUNNELS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f4b7d1a49c5c826f3be9b684313eea5b83ac232", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "NET_IPGRE", "NET_IPIP", "NET_FOU_IP_TUNNELS" ], "series_id": "d09a84b9-80e1-440c-9987-e9982aee12f2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_xmit", "ip_md_tunnel_xmit", "tnl_update_pmtu" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwX21kX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O3RubF91cGRhdGVfcG10dSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIGFuZCBQTVRVL2hlYWRyb29tIGNhbGN1bGF0aW9ucyBpbiBJUHY0IHR1bm5lbCB0cmFuc21pc3Npb24gKGlwX3R1bm5lbF94bWl0IGFuZCB0bmxfdXBkYXRlX3BtdHUpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXG4yLiBJdCBhY2NvdW50cyBmb3IgYGVuY2FwX2hsZW5gIGluIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBkZWZlcnMgY2FsbGluZyBgaXBfdHVubmVsX2VuY2FwKClgIHVudGlsIGFmdGVyIHNrYiBoZWFkcm9vbSBpcyBleHBhbmRlZCB3aXRoIGBza2JfY293X2hlYWQoKWAuXG5cblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxuLSBNZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20sIHNrYiBib3VuZHMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBLQVNBTi5cbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MDE5M2E1MTdmYWY3MjAxNDllZTkyNGViNWRhYjdlMWVjY2FmNzA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi40NDdiNDM1YjEwY2NhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtNTEyLDE0ICYjNDM7NTEyLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG4gc3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGgsXG4tXHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZClcbiYjNDM7XHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCxcbiYjNDM7XHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgcGt0X3NpemU7XG4gXHRpbnQgbXR1O1xuIFxuIFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4tXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gLSB0dW5uZWxfaGxlbjtcbiYjNDM7XHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xuIFx0cGt0X3NpemUgLT0gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRpZiAoZGYpIHtcbkBAIC02MjksNyAmIzQzOzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpKVxuIFx0XHRkZiA9IGh0b25zKElQX0RGKTtcbiBcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCB0dW5uZWxfaGxlbixcbi1cdFx0XHQgICAga2V5LVx1MDAzZXUuaXB2NC5kc3QsIHRydWUpKSB7XG4mIzQzO1x0XHRcdCAgICBrZXktXHUwMDNldS5pcHY0LmRzdCwgdHJ1ZSwgMCkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC02NzEsNiAmIzQzOzY3Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1x0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cbiBcdHN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDtcdFx0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJvb2wgbWQgPSBmYWxzZTtcbiBcdGJvb2wgY29ubmVjdGVkO1xuIFx0aW50IGVycl9jb3VudDtcbiYjNDM7XHRpbnQgZW5jYXBfaGxlbjtcbiBcdHU4IHRvcywgdHRsO1xuIFx0X19iZTMyIGRzdDtcbiBcdF9fYmUxNiBkZjtcbkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiBcbi1cdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKVxuJiM0MztcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4mIzQzO1x0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXHUwMDNlZW5jYXApO1xuJiM0MztcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuJiM0MztcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbkBAIC04MDMsNyAmIzQzOzgwOSw4IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2VpZ25vcmVfZGYpXG4gXHRcdGRmIHw9IChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSk7XG4gXG4tXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UpKSB7XG4mIzQzO1x0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuJiM0MztcdFx0XHQgICAgZW5jYXBfaGxlbikpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC04MzQsNyAmIzQzOzg0MSw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdG1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpXG4tXHRcdFx0JiM0MzsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gJiM0MzsgaXBfZW5jYXBfaGxlbihcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXApO1xuJiM0MztcdFx0XHQmIzQzOyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiAmIzQzOyBlbmNhcF9obGVuO1xuIFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcbiBcbiYjNDM7XHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlwX3J0X3B1dChydCk7XG4mIzQzO1x0XHRnb3RvIHR4X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpcHR1bm5lbF94bWl0KE5VTEwsIHJ0LCBza2IsIGZsNC5zYWRkciwgZmw0LmRhZGRyLCBwcm90b2NvbCwgdG9zLCB0dGwsXG4gXHRcdCAgICAgIGRmLCAhbmV0X2VxKHR1bm5lbC1cdTAwM2VuZXQsIGRldl9uZXQoZGV2KSksIDApO1xuIFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwX21kX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O3RubF91cGRhdGVfcG10dSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBQTVRVIGNhbGN1bGF0aW9uIGFuZCB0dW5uZWwgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgSVAgdHVubmVsaW5nIHN1YnN5c3RlbSAobmV0L2lwdjQvaXBfdHVubmVsLmMpLiBJdCBzbmFwc2hvdHMgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyBjb25jdXJyZW50IGNoYW5nZWxpbmsgb3BlcmF0aW9ucywgZGVmZXJzIGVuY2Fwc3VsYXRpb24gaW4gaXBfdHVubmVsX3htaXQsIGFuZCBhY2NvdW50cyBmb3IgZW5jYXAgaGVhZGVyIGxlbmd0aCBpbiBQTVRVIHVwZGF0ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCB0dW5uZWwgZGV2aWNlcyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC01MTIsMTQgJiM0Mzs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTsKIHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCwKLQkJCSAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQpCiYjNDM7CQkJICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCwKJiM0MzsJCQkgICAgaW50IGVuY2FwX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcGt0X3NpemU7CiAJaW50IG10dTsKIAogCXR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC0mZ3Q7aGxlbjsKLQlwa3Rfc2l6ZSA9IHNrYi0mZ3Q7bGVuIC0gdHVubmVsX2hsZW47CiYjNDM7CXBrdF9zaXplID0gc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuOwogCXBrdF9zaXplIC09IGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAlpZiAoZGYpIHsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgdm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS0mZ3Q7dHVuX2ZsYWdzKSkKIAkJZGYgPSBodG9ucyhJUF9ERik7CiAJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLAotCQkJICAgIGtleS0mZ3Q7dS5pcHY0LmRzdCwgdHJ1ZSkpIHsKJiM0MzsJCQkgICAga2V5LSZndDt1LmlwdjQuZHN0LCB0cnVlLCAwKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTY3MSw2ICYjNDM7NjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaDsKIAl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlib29sIG1kID0gZmFsc2U7CiAJYm9vbCBjb25uZWN0ZWQ7CiAJaW50IGVycl9jb3VudDsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggdG9zLCB0dGw7CiAJX19iZTMyIGRzdDsKIAlfX2JlMTYgZGY7CkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgdHVubmVsLSZndDtuZXQsIFJFQURfT05DRSh0dW5uZWwtJmd0O3Bhcm1zLmxpbmspLAogCQkJICAgIHR1bm5lbC0mZ3Q7ZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7CiAKLQlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDt0dW5uZWwtJmd0O2VuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKQomIzQzOwkvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC0mZ3Q7ZW5jYXApOwomIzQzOwllbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAoZW5jYXBfaGxlbiAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAKIAlpZiAoY29ubmVjdGVkICZhbXA7JmFtcDsgbWQpIHsKQEAgLTgwMyw3ICYjNDM7ODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7ICF0dW5uZWwtJmd0O2lnbm9yZV9kZikKIAkJZGYgfD0gKGlubmVyX2lwaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKTsKIAotCWlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHsKJiM0MzsJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLAomIzQzOwkJCSAgICBlbmNhcF9obGVuKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTgzNCw3ICYjNDM7ODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCW1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKQotCQkJJiM0MzsgcnQtJmd0O2RzdC5oZWFkZXJfbGVuICYjNDM7IGlwX2VuY2FwX2hsZW4oJmFtcDt0dW5uZWwtJmd0O2VuY2FwKTsKJiM0MzsJCQkmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW4gJiM0MzsgZW5jYXBfaGxlbjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTsKIAomIzQzOwlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDtpcGVuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKSB7CiYjNDM7CQlpcF9ydF9wdXQocnQpOwomIzQzOwkJZ290byB0eF9lcnJvcjsKJiM0MzsJfQomIzQzOwogCWlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCwKIAkJICAgICAgZGYsICFuZXRfZXEodHVubmVsLSZndDtuZXQsIGRldl9uZXQoZGV2KSksIDApOwogCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gTGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIGBpcF90dW5uZWxfeG1pdGAsIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gUmlnaHQsIHRoZSBtYWluIHRoaW5nIGlzIHRoaXMgbmV3IGBlbmNhcF9obGVuYCBhcmd1bWVudCBiZWluZyBpbnRyb2R1Y2VkIGludG8gYHRubF91cGRhdGVfcG10dWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwYWNrZXQgc2l6ZSBmb3IgUGF0aCBNVFUgZGlzY292ZXJ5LiBJbiBgdG5sX3VwZGF0ZV9wbXR1YCwgdGhlIGNhbGN1bGF0aW9uIGlzIG5vdyBgcGt0X3NpemUgPSBza2ItJmd0O2xlbiAmIzQzOyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW5gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKVGhlbiwgbG9va2luZyBhdCBgaXBfdHVubmVsX3htaXRgLCBJIHNlZSB0aGV5JiMzOTtyZSBncmFiYmluZyBgZW5jYXBfaGxlbmAgZnJvbSBgdHVubmVsLSZndDtlbmNhcGAuIFNtYXJ0IHRvIHVzZSBgZGF0YV9yYWNlYCB0aGVyZSwgbWluaW1pemVzIGxvY2tpbmcgb3ZlcmhlYWQuIFRoZSBlcnJvciBjaGVjayBgaWYgKGVuY2FwX2hsZW4gJmx0OyAwKSBnb3RvIHR4X2Vycm9yO2AgaXMgY3J1Y2lhbC4gVGhleSBhcmUgYWxzbyBkZWZlcnJpbmcgYGlwX3R1bm5lbF9lbmNhcGAgdW50aWwgYWZ0ZXIgYHNrYl9jb3dfaGVhZGAgYW5kIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYC4gVGhpcyBzaG91bGQgaW1wcm92ZSBlZmZpY2llbmN5LiBNb3N0IGltcG9ydGFudGx5LCBgZW5jYXBfaGxlbmAgaXMgcGFzc2VkIG9uIHRvIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgaXMgYWxzbyB1c2VkIGluIGBtYXhfaGVhZHJvb21gLiBUaGlzIGlzIGFsbCBsb2dpY2FsbHkgY29ubmVjdGVkLCB0aGUgaGVhZGVyIHNpemUgaXMgdXNlZCBpbiBzZXZlcmFsIHBsYWNlcy4KCkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgb3RoZXIgZnVuY3Rpb25zIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBBbmQgb2YgY291cnNlLCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgYnVpbGQgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBfVFVOTkVMfG9iai1cXCRcXChDT05GSUdfTkVUX0lQX1RVTk5FTFxcKXxpcF90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE3NDQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE3LVx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG5uZXQvaXB2NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTEyLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTEzOiNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTQtI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz0xODgyPXN0YXRpYyBpbnQgX19pbml0IGluZXRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAyLVxubmV0L2lwdjQvYWZfaW5ldC5jOjIwMDM6XHRpcF90dW5uZWxfY29yZV9pbml0KCk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMjAwNC1cbi0tXG5uZXQvaXB2NC9hcnAuYy0xMTItI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG5uZXQvaXB2NC9hcnAuYzoxMTM6I2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxubmV0L2lwdjQvYXJwLmMtMTE0LVxuLS1cbm5ldC9pcHY0L2ZvdV9icGYuYz00ND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrYl9zZXRfZm91X2VuY2FwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsXG4tLVxubmV0L2lwdjQvZm91X2JwZi5jLTQ3LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG5uZXQvaXB2NC9mb3VfYnBmLmM6NDg6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbm5ldC9pcHY0L2ZvdV9icGYuYy00OS1cbi0tXG5uZXQvaXB2NC9mb3VfYnBmLmM9ODY9X19icGZfa2Z1bmMgaW50IGJwZl9za2JfZ2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxuLS1cbm5ldC9pcHY0L2ZvdV9icGYuYy04OS1cdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xubmV0L2lwdjQvZm91X2JwZi5jOjkwOlx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XG5uZXQvaXB2NC9mb3VfYnBmLmMtOTEtXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz05MDM9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBmb3VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTkxNS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTE2OnNpemVfdCBmb3VfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTIwPUVYUE9SVF9TWU1CT0woZm91X2VuY2FwX2hsZW4pO1xubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjkyMjpzaXplX3QgZ3VlX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTIzLXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkzOD1FWFBPUlRfU1lNQk9MKGd1ZV9lbmNhcF9obGVuKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTM5LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NDEtXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTU0PUVYUE9SVF9TWU1CT0woX19mb3VfYnVpbGRfaGVhZGVyKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NTY6aW50IF9fZ3VlX2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NTctXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDMwLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMi1cdFx0XHQgIHN0cnVjdCBmbG93aTQgKmZsNCwgdTggKnByb3RvY29sLCBfX2JlMTYgc3BvcnQpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDUxLVx0XHRcdCAgICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwNjc6c3RhdGljIGludCBndWVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXHRcdFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTA5Nj1zdGF0aWMgaW50IGd1ZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYxLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBmb3VfaXB0dW5fb3BzID0ge1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVx0LmVuY2FwX2hsZW4gPSBmb3VfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGd1ZV9pcHR1bl9vcHMgPSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjktXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTc1LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNzg6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExODMtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBhZGQgZ3VlIG9wc1xcblwmIzM0Oyk7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XHRcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTg4LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5NS17XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOTY6XHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NzpcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTk4LX1cbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyMDI6c3RhdGljIGludCBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA2LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA4LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNTYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1OC1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNjk9c3RhdGljIHZvaWQgX19leGl0IGZvdV9maW5pKHZvaWQpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xubmV0L2lwdjQvZm91X2NvcmUuYzoxMjcxOlx0aXBfdHVubmVsX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmZvdV9ubF9mYW1pbHkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTM1LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvaXB2NC9pcF9ncmUuYzozNjojaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG5uZXQvaXB2NC9pcF9ncmUuYy0zNy0jaW5jbHVkZSBcdTAwM2NuZXQvYXJwLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMjI9c3RhdGljIGludCBpcGdyZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDEtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDMtXHRjb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktXHUwMDNlY29kZTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDpcdHN0cnVjdCBpcF90dW5uZWwgKnQ7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTU0LVx0aXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShpY21wX2hkcihza2IpICYjNDM7IDEpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTU1Olx0dCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIHRwaS1cdTAwM2VmbGFncyxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1Ni1cdFx0XHQgICAgIGlwaC1cdTAwM2VkYWRkciwgaXBoLVx1MDAzZXNhZGRyLCB0cGktXHUwMDNla2V5KTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0yNzMtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoyNzQ6XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mjc1Olx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xubmV0L2lwdjQvaXBfZ3JlLmMtMjc2LVx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMjgwLVxubmV0L2lwdjQvaXBfZ3JlLmM6MjgxOlx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0yODItXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMjg3LVx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjI4ODpcdFx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgZmxhZ3MsXG5uZXQvaXB2NC9pcF9ncmUuYy0yODktXHRcdFx0XHRcdCAgaXBoLVx1MDAzZXNhZGRyLCBpcGgtXHUwMDNlZGFkZHIsIDApO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTI5OC1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoyOTk6XHRcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIGZsYWdzLFxubmV0L2lwdjQvaXBfZ3JlLmMtMzAwLVx0XHRcdFx0XHQgIGlwaC1cdTAwM2VzYWRkciwgaXBoLVx1MDAzZWRhZGRyLCB0cGktXHUwMDNla2V5KTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zMTktXHRcdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqcGt0X21kLCAqbWQ7XG5uZXQvaXB2NC9pcF9ncmUuYzozMjA6XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzIxLVx0XHRcdHVuc2lnbmVkIGNoYXIgKmdoO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTMyNC1cdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzozMjU6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0zMjYtXHRcdFx0dHVuX2lkID0ga2V5MzJfdG9fdHVubmVsX2lkKHRwaS1cdTAwM2VrZXkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cdFx0XHRcdFx0XHRcdCAgICBzaXplb2YoKmVyc2hkcikpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MzQ1Olx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzQ2LVx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzU1LVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MzU2Olx0XHRpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzU3LVx0XHRyZXR1cm4gUEFDS0VUX1JDVkQ7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MzY2PXN0YXRpYyBpbnQgX19pcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxubmV0L2lwdjQvaXBfZ3JlLmM6MzY3Olx0XHQgICAgICAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwgaW50IGhkcl9sZW4sIGJvb2wgcmF3X3Byb3RvKVxubmV0L2lwdjQvaXBfZ3JlLmMtMzY4LXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzAtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbm5ldC9pcHY0L2lwX2dyZS5jOjM3MTpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbm5ldC9pcHY0L2lwX2dyZS5jLTM3Mi1cbm5ldC9pcHY0L2lwX2dyZS5jLTM3My1cdGlwaCA9IGlwX2hkcihza2IpO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mzc0Olx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgdHBpLVx1MDAzZWZsYWdzLFxubmV0L2lwdjQvaXBfZ3JlLmMtMzc1LVx0XHRcdFx0ICBpcGgtXHUwMDNlc2FkZHIsIGlwaC1cdTAwM2VkYWRkciwgdHBpLVx1MDAzZWtleSk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzk4LVx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mzk5Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19hbmQoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncywgZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNDAwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQwNi1cbm5ldC9pcHY0L2lwX2dyZS5jOjQwNzpcdFx0aXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQwOC1cdFx0cmV0dXJuIFBBQ0tFVF9SQ1ZEO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQxNz1zdGF0aWMgaW50IGlwZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDIwLVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjQyMTpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XG5uZXQvaXB2NC9pcF9ncmUuYy00MjItXHRpbnQgcmVzO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDc5LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjQ4MDpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy00ODEtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy00ODItXG5uZXQvaXB2NC9pcF9ncmUuYzo0ODM6XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNDg0LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ5MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjQ5MTpcdGlwX3R1bm5lbF94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCB0bmxfcGFyYW1zLVx1MDAzZXByb3RvY29sKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQ5Mi19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NDk5PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTAxLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjUwMjpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy01MDMtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG5uZXQvaXB2NC9pcF9ncmUuYzo1MDQ6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTA1Olx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcbm5ldC9pcHY0L2lwX2dyZS5jLTUwNi1cdGludCB0dW5uZWxfaGxlbjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01MDktXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYzo1MTA6XHRcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtNTExLVx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01MjYtXHRfX3NldF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjUyNzpcdGlwX3R1bm5lbF9mbGFnc19hbmQoZmxhZ3MsIHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTUyOC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz01NDM9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTU0NC17XG5uZXQvaXB2NC9pcF9ncmUuYzo1NDU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTQ2LVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpID0geyB9O1xubmV0L2lwdjQvaXBfZ3JlLmM6NTQ3Olx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcbm5ldC9pcHY0L2lwX2dyZS5jOjU0ODpcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYy01NDktXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NTctXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYzo1NTg6XHRcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtNTU5LVx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NjUtXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTY2Olx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTU2Ny1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz02Mjg9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX2dyZS5jLTYyOS17XG5uZXQvaXB2NC9pcF9ncmUuYzo2MzA6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjYzMTpcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYy02MzItXHRzdHJ1Y3QgcnRhYmxlICpydDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy02MzQtXG5uZXQvaXB2NC9pcF9ncmUuYzo2MzU6XHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgIT0gQUZfSU5FVClcbm5ldC9pcHY0L2lwX2dyZS5jLTYzNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjM4LVx0a2V5ID0gXHUwMDI2aW5mby1cdTAwM2VrZXk7XG5uZXQvaXB2NC9pcF9ncmUuYzo2Mzk6XHRpcF90dW5uZWxfaW5pdF9mbG93KFx1MDAyNmZsNCwgSVBQUk9UT19HUkUsIGtleS1cdTAwM2V1LmlwdjQuZHN0LCBrZXktXHUwMDNldS5pcHY0LnNyYyxcbm5ldC9pcHY0L2lwX2dyZS5jLTY0MC1cdFx0XHQgICAgdHVubmVsX2lkX3RvX2tleTMyKGtleS1cdTAwM2V0dW5faWQpLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTY1Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTY1NC17XG5uZXQvaXB2NC9pcF9ncmUuYzo2NTU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNjU2LVx0Y29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTY3Ni1cbm5ldC9pcHY0L2lwX2dyZS5jOjY3NzpcdFx0LyogaXBfdHVubmVsX3htaXQoKSBuZWVkcyBza2ItXHUwMDNlZGF0YSBwb2ludGluZyB0byBncmUgaGVhZGVyLiAqL1xubmV0L2lwdjQvaXBfZ3JlLmMtNjc4LVx0XHRza2JfcHVsbChza2IsIHB1bGxfbGVuKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz03MDQ9c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzA2LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjcwNzpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy03MDgtXHRib29sIHRydW5jYXRlID0gZmFsc2U7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NzU5PXN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03NjEte1xubmV0L2lwdjQvaXBfZ3JlLmM6NzYyOlx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTc2My1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz03ODg9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxubmV0L2lwdjQvaXBfZ3JlLmMtNzg5LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjc5MDpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy03OTEtXHRpbnQgbGVuO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTgxNz1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX2dyZS5jOjgxODpcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG5uZXQvaXB2NC9pcF9ncmUuYy04MTktXHRcdFx0ICAgIGludCBjbWQpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODIzLVxubmV0L2lwdjQvaXBfZ3JlLmM6ODI0Olx0aWYgKCFpcF90dW5uZWxfZmxhZ3NfaXNfYmUxNl9jb21wYXQocC1cdTAwM2VpX2ZsYWdzKSB8fFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI1Olx0ICAgICFpcF90dW5uZWxfZmxhZ3NfaXNfYmUxNl9jb21wYXQocC1cdTAwM2VvX2ZsYWdzKSlcbm5ldC9pcHY0L2lwX2dyZS5jLTgyNi1cdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXG5uZXQvaXB2NC9pcF9ncmUuYzo4Mjg6XHRpX2ZsYWdzID0gaXBfdHVubmVsX2ZsYWdzX3RvX2JlMTYocC1cdTAwM2VpX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjgyOTpcdG9fZmxhZ3MgPSBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNihwLVx1MDAzZW9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODMwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTg0MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjg0MTpcdGVyciA9IGlwX3R1bm5lbF9jdGwoZGV2LCBwLCBjbWQpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODQyLVx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04NDUtXHRpZiAoY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbm5ldC9pcHY0L2lwX2dyZS5jOjg0NjpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy04NDctXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDg6XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC1cdTAwM2VpX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjg0OTpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODUwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTg1NS1cdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6ODU2Olx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihwLVx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODU3LVx0b19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlb19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzo4NTg6XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlb19mbGFncywgb19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy04NTktXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9ODkwPXN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODkzLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjg5NDpcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODk1LVx0c3RydWN0IGdyZV9iYXNlX2hkciAqZ3JlaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05Mzc9c3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy05Mzgte1xubmV0L2lwdjQvaXBfZ3JlLmM6OTM5Olx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy05NDAtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTY2PXN0YXRpYyBpbnQgaXBncmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTk2Ny17XG5uZXQvaXB2NC9pcF9ncmUuYzo5Njg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTk2OS1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjQvaXBfZ3JlLmMtOTgxLVx0Lm5kb19pbml0XHRcdD0gaXBncmVfdHVubmVsX2luaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODI6XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy05ODMtI2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTg3LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gaXBncmVfeG1pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4ODpcdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg5Olx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYy05OTAtXHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5OTE6XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cdC5uZG9fdHVubmVsX2N0bFx0XHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAwMD1zdGF0aWMgdm9pZCBpcGdyZV90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAzLVx0ZGV2LVx1MDAzZXR5cGVcdFx0PSBBUlBIUkRfSVBHUkU7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDA0Olx0aXBfdHVubmVsX3NldHVwKGRldiwgaXBncmVfbmV0X2lkKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDUtfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEwMDc9c3RhdGljIHZvaWQgX19ncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDgte1xubmV0L2lwdjQvaXBfZ3JlLmM6MTAwOTpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMTAtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAzNj1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDM3LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMzg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAzOS1cdHN0cnVjdCBpcGhkciAqaXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDY2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTA2NzpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTA2OC19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTA3NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3Ni17XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDc3Olx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXHUwMDI2aXBncmVfbGlua19vcHMsIE5VTEwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTA3OC19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTA4MD1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwZ3JlX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4Mi17XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDgzOlx0aXBfdHVubmVsX2RlbGV0ZV9uZXQobmV0LCBpcGdyZV9uZXRfaWQsIFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMDg0LX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDg2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBncmVfbmV0X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDg5LVx0LmlkICAgPSBcdTAwMjZpcGdyZV9uZXRfaWQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDkwOlx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA5MS19O1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTExODI9c3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4NC1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMTg1Olx0XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4Ni1cdFx0XHRcdF9fdTMyICpmd21hcmspXG5uZXQvaXB2NC9pcF9ncmUuYy0xMTg3LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjExODg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTExODktXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTI1MT1zdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1My1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjU0Olx0XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1NS1cdFx0XHRcdF9fdTMyICpmd21hcmspXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjU2LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEyNTc6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTgtXHRpbnQgZXJyO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjk3Olx0XHRcdFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzMjk9c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTMzNTpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNi19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzQwOlx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0MS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGdyZV90YXBfeG1pdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQzLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM0NDpcdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NS1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDY6XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDctXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzUwPXN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzUxLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNTI6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM1My1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzY3LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM2ODpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM2OS19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Mi1cdC5uZG9faW5pdFx0XHQ9IGVyc3Bhbl90dW5uZWxfaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzM6XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc0LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gZXJzcGFuX3htaXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ni1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzc6XHQubmRvX2NoYW5nZV9tdHVcdFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzgtXHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc5Olx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gaXBfdHVubmVsX2dldF9pZmxpbmssXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgwLVx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFx0PSBncmVfZmlsbF9tZXRhZGF0YV9kc3QsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg5LVx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MDpcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGdyZV90YXBfbmV0X2lkKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTEtfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk1LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5OC1cdGlmIChpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk5Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDA6XHRcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAxLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxNC1cdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0Yjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MTU6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQxNi1cdF9fdTMyIGZ3bWFyayA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyNS1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MjY6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI3LVx0XHRcdFx0IGZ3bWFyayk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNS1cdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0Yjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MzY6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNy1cdF9fdTMyIGZ3bWFyayA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0Ni1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDc6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ4LVx0XHRcdFx0IGZ3bWFyayk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ1MT1zdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU0LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTY6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1Ny1cdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjctXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY4Olx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXHUwMDI2cCwgZndtYXJrKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjktXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzEtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDcyOlx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQ3MzpcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzQtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ4MD1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ4My17XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDg0Olx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDg1Olx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODYtXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NzpcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGlwX3R1bm5lbC5jYC4gTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZSBmb3IgSVB2NC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIElQIHR1bm5lbGluZyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBjYW4gZmluZC4uLiBJIGV4cGVjdCB0byBzZWUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gdHVubmVsaW5nLCBHUkUsIElQSVAsIG9yIHNpbWlsYXIgdGVjaG5vbG9naWVzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY29uZmlnIHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIHNldCB0byBidWlsZCBhbmQgZW5hYmxlIHRoZSB0dW5uZWwgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfSVBfVFVOTkVMfE5FVF9JUEdSRXxORVRfSVBJUHxORVRfRk9VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnLTE2NC1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMTg1LVxubmV0L2lwdjQvS2NvbmZpZzoxODY6Y29uZmlnIE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTg3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MTk0Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWc6MTk1Olx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTk2LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjA2LVxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIwOTpcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFx1MDAyNlx1MDAyNiBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMjEwLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMwNi1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMDgtXHRzZWxlY3QgWEZSTVxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzE2PWNvbmZpZyBORVRfVURQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXHR0cmlzdGF0ZVxubmV0L2lwdjQvS2NvbmZpZzozMTg6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMTktXHRkZWZhdWx0IG5cbm5ldC9pcHY0L0tjb25maWctMzIwLVxubmV0L2lwdjQvS2NvbmZpZzozMjE6Y29uZmlnIE5FVF9GT1Vcbm5ldC9pcHY0L0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEZvbyAoSVAgcHJvdG9jb2xzKSBvdmVyIFVEUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzI5LVxubmV0L2lwdjQvS2NvbmZpZzozMzA6Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xubmV0L2lwdjQvS2NvbmZpZy0zMzEtXHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjMzMjpcdGRlcGVuZHMgb24gTkVUX0lQSVAgfHwgTkVUX0lQR1JFIHx8IElQVjZfU0lUXG5uZXQvaXB2NC9LY29uZmlnOjMzMzpcdHNlbGVjdCBORVRfRk9VXG5uZXQvaXB2NC9LY29uZmlnLTMzNC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQdjQgVHVubmVsIENvZGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIElQdjQgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb2FkaW5nIHVwIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIEkmIzM5O20gZ29pbmcgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29kZS4KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIEkgcmVtZW1iZXIsIEkgdGhpbmsgdGhlIHNlY3Rpb24gYmV0d2VlbiBsaW5lcyA1MDAgYW5kIDg2MCBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvci4uLiB3ZWxsLCBwcm9iYWJseSB0aGUgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHByb2Nlc3MsIG9yIG1heWJlIHRoZSBoYW5kbGluZyBvZiB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIGFuZCBkZWxldGlvbi4gVGhhdCByYW5nZSBmZWVscyBhYm91dCByaWdodCBmb3IgdGhlIG1lYXQgb2YgdGhlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB0aGUgYml0IEkgd2FudCB0byB1bmRlcnN0YW5kIGJldHRlci4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSB0dW5uZWwgcHJvdG9jb2wgYWN0dWFsbHkgbWFuaXB1bGF0ZXMgdGhlIElQIHBhY2tldHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBhbnRpY2lwYXRlIGEgZ29vZCBjaHVuayBvZiBzd2l0Y2ggc3RhdGVtZW50cyBhbmQgaGVscGVyIGZ1bmN0aW9uIGNhbGxzIGluIHRoZXJlLiBTaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcbiA1MTE6XHRcbiA1MTI6XHRzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDUxMzpcdFx0XHRcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxuIDUxNDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcbiA1MTU6XHRcdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxuIDUxNjpcdFx0XHRcdCAgICBpbnQgZW5jYXBfaGxlbilcbiA1MTc6XHR7XG4gNTE4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDUxOTpcdFx0aW50IHBrdF9zaXplO1xuIDUyMDpcdFx0aW50IG10dTtcbiA1MjE6XHRcbiA1MjI6XHRcdHR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC1cdTAwM2VobGVuO1xuIDUyMzpcdFx0cGt0X3NpemUgPSBza2ItXHUwMDNlbGVuICYjNDM7IGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcbiA1MjQ6XHRcdHBrdF9zaXplIC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIDUyNTpcdFxuIDUyNjpcdFx0aWYgKGRmKSB7XG4gNTI3Olx0XHRcdG10dSA9IGRzdF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSAtIChzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB0dW5uZWxfaGxlbik7XG4gNTI4Olx0XHRcdG10dSAtPSBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcbiA1Mjk6XHRcdH0gZWxzZSB7XG4gNTMwOlx0XHRcdG10dSA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9tdHUoc2tiX2RzdChza2IpKSA6IGRldi1cdTAwM2VtdHU7XG4gNTMxOlx0XHR9XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIDUzNDpcdFx0XHRza2JfZHN0X3VwZGF0ZV9wbXR1X25vX2NvbmZpcm0oc2tiLCBtdHUpO1xuIDUzNTpcdFxuIDUzNjpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHtcbiA1Mzc6XHRcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXHUwMDI2XHUwMDI2XG4gNTM4Olx0XHRcdCAgICAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpIFx1MDAyNlx1MDAyNlxuIDUzOTpcdFx0XHQgICAgbXR1IFx1MDAzYyBwa3Rfc2l6ZSkge1xuIDU0MDpcdFx0XHRcdGljbXBfbmRvX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7XG4gNTQxOlx0XHRcdFx0cmV0dXJuIC1FMkJJRztcbiA1NDI6XHRcdFx0fVxuIDU0MzpcdFx0fVxuIDU0NDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIDU0NTpcdFx0ZWxzZSBpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4gNTQ2Olx0XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xuIDU0NzpcdFx0XHRfX2JlMzIgZGFkZHI7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRcdHJ0NiA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpIDpcbiA1NTA6XHRcdFx0XHRcdFx0ICAgTlVMTDtcbiA1NTE6XHRcdFx0ZGFkZHIgPSBtZCA/IGRzdCA6IHR1bm5lbC1cdTAwM2VwYXJtcy5pcGguZGFkZHI7XG4gNTUyOlx0XG4gNTUzOlx0XHRcdGlmIChydDYgXHUwMDI2XHUwMDI2IG10dSBcdTAwM2MgZHN0X210dShza2JfZHN0KHNrYikpIFx1MDAyNlx1MDAyNlxuIDU1NDpcdFx0XHRcdCAgIG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSkge1xuIDU1NTpcdFx0XHRcdGlmICgoZGFkZHIgXHUwMDI2XHUwMDI2ICFpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHx8XG4gNTU2Olx0XHRcdFx0ICAgIHJ0Ni1cdTAwM2VydDZpX2RzdC5wbGVuID09IDEyOCkge1xuIDU1NzpcdFx0XHRcdFx0cnQ2LVx1MDAzZXJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEO1xuIDU1ODpcdFx0XHRcdFx0ZHN0X21ldHJpY19zZXQoc2tiX2RzdChza2IpLCBSVEFYX01UVSwgbXR1KTtcbiA1NTk6XHRcdFx0XHR9XG4gNTYwOlx0XHRcdH1cbiA1NjE6XHRcbiA1NjI6XHRcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXHUwMDI2XHUwMDI2IG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSBcdTAwMjZcdTAwMjZcbiA1NjM6XHRcdFx0XHRcdFx0bXR1IFx1MDAzYyBwa3Rfc2l6ZSkge1xuIDU2NDpcdFx0XHRcdGljbXB2Nl9uZG9fc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpO1xuIDU2NTpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNTY2Olx0XHRcdH1cbiA1Njc6XHRcdH1cbiA1Njg6XHQjZW5kaWZcbiA1Njk6XHRcdHJldHVybiAwO1xuIDU3MDpcdH1cbiA1NzE6XHRcbiA1NzI6XHR2b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNTczOlx0XHRcdCAgICAgICB1OCBwcm90bywgaW50IHR1bm5lbF9obGVuKVxuIDU3NDpcdHtcbiA1NzU6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gNTc2Olx0XHR1MzIgaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbiA1Nzc6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XG4gNTc4Olx0XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqa2V5O1xuIDU3OTpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gNTgwOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7XG4gNTgxOlx0XHRzdHJ1Y3QgZmxvd2k0IGZsNDtcbiA1ODI6XHRcdF9fYmUxNiBkZiA9IDA7XG4gNTgzOlx0XHR1OCB0b3MsIHR0bDtcbiA1ODQ6XHRcdGJvb2wgdXNlX2NhY2hlO1xuIDU4NTpcdFxuIDU4NjpcdFx0dHVuX2luZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiA1ODc6XHRcdGlmICh1bmxpa2VseSghdHVuX2luZm8gfHwgISh0dW5faW5mby1cdTAwM2Vtb2RlIFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkgfHxcbiA1ODg6XHRcdFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXG4gNTg5Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZW1haW5pbmcgY29kZSB3aXRoaW4gYGlwX3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBzZWN0aW9uIG9mIHRoZSBjb2RlIHRvIHByb3Blcmx5IGFzc2VzcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdFx0XHR9IGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA3NjE6XHRcdFx0XHR0b3MgPSBpcHY2X2dldF9kc2ZpZWxkKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKWlubmVyX2lwaCk7XG4gNzYyOlx0XHRcdFx0Y29ubmVjdGVkID0gZmFsc2U7XG4gNzYzOlx0XHRcdH1cbiA3NjQ6XHRcdH1cbiA3NjU6XHRcbiA3NjY6XHRcdGlwX3R1bm5lbF9pbml0X2Zsb3coXHUwMDI2Zmw0LCBwcm90b2NvbCwgZHN0LCB0bmxfcGFyYW1zLVx1MDAzZXNhZGRyLFxuIDc2NzpcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlcGFybXMub19rZXksIHRvcyBcdTAwMjYgSU5FVF9EU0NQX01BU0ssXG4gNzY4Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gNzY5Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiA3NzA6XHRcbiA3NzE6XHRcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4gNzcyOlx0XHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cdTAwM2VlbmNhcCk7XG4gNzczOlx0XHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbiA3NzQ6XHRcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIDc3NTpcdFx0XHRnb3RvIHR4X2Vycm9yO1xuIDc3NjpcdFxuIDc3NzpcdFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbiA3Nzg6XHRcdFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCB0dW5faW5mbyk7XG4gNzc5Olx0XHRcdGlmICh1c2VfY2FjaGUpXG4gNzgwOlx0XHRcdFx0cnQgPSBkc3RfY2FjaGVfZ2V0X2lwNChcdTAwMjZ0dW5faW5mby1cdTAwM2Vkc3RfY2FjaGUsXG4gNzgxOlx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZmbDQuc2FkZHIpO1xuIDc4MjpcdFx0fSBlbHNlIHtcbiA3ODM6XHRcdFx0cnQgPSBjb25uZWN0ZWQgPyBkc3RfY2FjaGVfZ2V0X2lwNChcdTAwMjZ0dW5uZWwtXHUwMDNlZHN0X2NhY2hlLFxuIDc4NDpcdFx0XHRcdFx0XHRcdFx1MDAyNmZsNC5zYWRkcikgOiBOVUxMO1xuIDc4NTpcdFx0fVxuIDc4NjpcdFxuIDc4NzpcdFx0aWYgKCFydCkge1xuIDc4ODpcdFx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVx1MDAzZW5ldCwgXHUwMDI2Zmw0KTtcbiA3ODk6XHRcbiA3OTA6XHRcdFx0aWYgKElTX0VSUihydCkpIHtcbiA3OTE6XHRcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfY2Fycmllcl9lcnJvcnMpO1xuIDc5MjpcdFx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gNzkzOlx0XHRcdH1cbiA3OTQ6XHRcdFx0aWYgKHVzZV9jYWNoZSlcbiA3OTU6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNChcdTAwMjZ0dW5faW5mby1cdTAwM2Vkc3RfY2FjaGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiA3OTY6XHRcdFx0XHRcdFx0ICBmbDQuc2FkZHIpO1xuIDc5NzpcdFx0XHRlbHNlIGlmICghbWQgXHUwMDI2XHUwMDI2IGNvbm5lY3RlZClcbiA3OTg6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNChcdTAwMjZ0dW5uZWwtXHUwMDNlZHN0X2NhY2hlLCBcdTAwMjZydC1cdTAwM2Vkc3QsXG4gNzk5Olx0XHRcdFx0XHRcdCAgZmw0LnNhZGRyKTtcbiA4MDA6XHRcdH1cbiA4MDE6XHRcbiA4MDI6XHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2ID09IGRldikge1xuIDgwMzpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDgwNDpcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgY29sbGlzaW9ucyk7XG4gODA1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gODA2Olx0XHR9XG4gODA3Olx0XG4gODA4Olx0XHRkZiA9IHRubF9wYXJhbXMtXHUwMDNlZnJhZ19vZmY7XG4gODA5Olx0XHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlaWdub3JlX2RmKVxuIDgxMDpcdFx0XHRkZiB8PSAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpO1xuIDgxMTpcdFxuIDgxMjpcdFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuIDgxMzpcdFx0XHRcdCAgICBlbmNhcF9obGVuKSkge1xuIDgxNDpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDgxNTpcdFx0XHRnb3RvIHR4X2Vycm9yO1xuIDgxNjpcdFx0fVxuIDgxNzpcdFxuIDgxODpcdFx0ZXJyX2NvdW50ID0gUkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQpO1xuIDgxOTpcdFx0aWYgKGVycl9jb3VudCBcdTAwM2UgMCkge1xuIDgyMDpcdFx0XHRpZiAodGltZV9iZWZvcmUoamlmZmllcyxcbiA4MjE6XHRcdFx0XHRcdFJFQURfT05DRSh0dW5uZWwtXHUwMDNlZXJyX3RpbWUpICYjNDM7IElQVFVOTkVMX0VSUl9USU1FTykpIHtcbiA4MjI6XHRcdFx0XHRXUklURV9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQsIGVycl9jb3VudCAtIDEpO1xuIDgyMzpcdFxuIDgyNDpcdFx0XHRcdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcbiA4MjU6XHRcdFx0fSBlbHNlIHtcbiA4MjY6XHRcdFx0XHRXUklURV9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQsIDApO1xuIDgyNzpcdFx0XHR9XG4gODI4Olx0XHR9XG4gODI5Olx0XG4gODMwOlx0XHR0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaW5uZXJfaXBoLCBza2IpO1xuIDgzMTpcdFx0dHRsID0gdG5sX3BhcmFtcy1cdTAwM2V0dGw7XG4gODMyOlx0XHRpZiAodHRsID09IDApIHtcbiA4MzM6XHRcdFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxuIDgzNDpcdFx0XHRcdHR0bCA9IGlubmVyX2lwaC1cdTAwM2V0dGw7XG4gODM1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gODM2Olx0XHRcdGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXG4gODM3Olx0XHRcdFx0dHRsID0gKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKWlubmVyX2lwaCktXHUwMDNlaG9wX2xpbWl0O1xuIDgzODpcdCNlbmRpZlxuIDgzOTpcdFx0XHRlbHNlXG4gODQwOlx0XHRcdFx0dHRsID0gaXA0X2RzdF9ob3BsaW1pdChcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIDg0MTpcdFx0fVxuIDg0MjpcdFxuIDg0MzpcdFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcilcbiA4NDQ6XHRcdFx0XHQmIzQzOyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiAmIzQzOyBlbmNhcF9obGVuO1xuIDg0NTpcdFxuIDg0NjpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcbiA4NDc6XHRcdFx0aXBfcnRfcHV0KHJ0KTtcbiA4NDg6XHRcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xuIDg0OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA4NTA6XHRcdFx0cmV0dXJuO1xuIDg1MTpcdFx0fVxuIDg1MjpcdFxuIDg1MzpcdFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gODU0Olx0XG4gODU1Olx0XHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbiA4NTY6XHRcdFx0aXBfcnRfcHV0KHJ0KTtcbiA4NTc6XHRcdFx0Z290byB0eF9lcnJvcjtcbiA4NTg6XHRcdH1cbiA4NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJUCBUdW5uZWxpbmcgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyAqY29yZSogdG8gdGhlIGtlcm5lbCYjMzk7cyBJUCB0dW5uZWxpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgY292ZXJzIHRoaW5ncyBsaWtlIEdSRSwgSVBJUCwgYW5kIHNvIG9uIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBsaWtlIGBpcGdyZWAgYW5kIGBpcGlwYC4gIEltcG9ydGFudGx5LCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjay4gVGhlIGZhY3QgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gVFJVRSBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgY29uZmlybXMgb3VyIGh1bmNoOiB3ZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoaXMgdGhvcm91Z2hseS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBhcmVhcyBvZiBncmVhdGVzdCBpbnRlcmVzdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3NlZCBzeW1ib2xzLCBhbmQgdGhlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuICBgaXBfdHVubmVsX3htaXRgLCBgdG5sX3VwZGF0ZV9wbXR1YCwgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgYXJlIHRoZSBpbW1lZGlhdGUgdGFyZ2V0cy4gYGlwX3R1bm5lbF94bWl0YCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YCBhcmUgKmV4cG9ydGVkKiwgbWVhbmluZyB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIFNwZWNpZmljYWxseSwgYEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF94bWl0KWAgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTChpcF9tZF90dW5uZWxfeG1pdClgIGNvbmZpcm0gdGhpcy4gIGB0bmxfdXBkYXRlX3BtdHVgLCBhbHRob3VnaCBzdGF0aWMsIGlzIGFsc28gaW50ZXJlc3Rpbmcgc2luY2UgaXQgZ2V0cyBjYWxsZWQgYnkgYGlwX3R1bm5lbF94bWl0YCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gVGhlIGZhY3QgdGhhdCBgdG5sX3VwZGF0ZV9wbXR1YCBpcyAqbW9kaWZpZWQqIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZy4gIFRoaXMgc3VnZ2VzdHMgdGhhdCB3aGF0ZXZlciBpcyBoYXBwZW5pbmcgZHVyaW5nIFBNVFUgdXBkYXRlcywgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGVkIHdpdGhpbiB0aGUgeG1pdCBwYXRocywgd2FycmFudHMgY2xvc2VyIHNjcnV0aW55LgoKRmluYWxseSwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuICBMb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgYENPTkZJR19ORVRfSVBfVFVOTkVMYCBpcyB0cmlzdGF0ZSBhbmQgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19ORVRfSVBJUGAsIGV0Yy4gIE9mIGNvdXJzZSwgYENPTkZJR19JTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGVudGlyZSBgbmV0L2lwdjRgIHN1YnRyZWUuICBJdCYjMzk7cyB1c2VmdWwgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBzZWxlY3QgYE5FVF9JUF9UVU5ORUxgIGFyZSBrbm93bi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZnV6emluZyBjYW1wYWlnbnMgYW5kIGRldGVybWluaW5nIHBvdGVudGlhbCBpbXBhY3QuIFdlIG5vdyBoYXZlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBfVFVOTkVMfHNlbGVjdCBORVRfSVBfVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2NC1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODA9Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTg1LVxubmV0L2lwdjQvS2NvbmZpZzoxODY6Y29uZmlnIE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTg3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTE5Mj1jb25maWcgTkVUX0lQR1JFXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTQtXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxubmV0L2lwdjQvS2NvbmZpZzoxOTU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xOTYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA2LVx0c2VsZWN0IElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjMwNzpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cdHNlbGVjdCBYRlJNXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMxNy1cdHRyaXN0YXRlXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMxOS1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTUwPWNvbmZpZyBJUFY2X1ZUSVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTUyLVx0c2VsZWN0IElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjE1MzpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE1NC1cdHNlbGVjdCBYRlJNXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNjI9Y29uZmlnIElQVjZfU0lUXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjQtXHRzZWxlY3QgSU5FVF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTY1Olx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTY2LVx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIxMi1cdHNlbGVjdCBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoyMTM6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMTQtXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk5MgoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgSVAgdHVubmVscyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IEtjb25maWcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGVpdGhlciBgTkVUX0lQX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBvciBgTkVUX0lQSVBgIGlzIGNydWNpYWwuIFRoZSBgTkVUX0lQX1RVTk5FTGAgc3ltYm9sIGRpcmVjdGx5IGxpbmtzIHRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgd2hlcmUgYGlwX3R1bm5lbC5vYCBpcyBidWlsdC4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHdoaWNoIGxldmVyYWdlcyBlbmNhcHN1bGF0aW9uLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYE5FVF9GT1VgIHRvIGVuc3VyZSBpdCwgYWxvbmcgd2l0aCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgaXMgYWNjb3VudGVkIGZvci4KCkkmIzM5O3ZlIGdvdCB0aGUgcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBhbmQgdGhlIGtleSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRfSVBfVFVOTkVMYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBJUGAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4KClRoZSBmb2N1cyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gc2hvdWxkIGJlIG9uIGBGb2N1c1N5bWJvbHNgOiBgaXBfdHVubmVsX3htaXRgLCBgaXBfbWRfdHVubmVsX3htaXRgLCBhbmQgYHRubF91cGRhdGVfcG10dWAuCgpJJiMzOTttIG1ha2luZyBzdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1ha2Ugc2Vuc2UgaW4gcmVsYXRpb24gdG8gb25lIGFub3RoZXIuIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgY2hlY2ssIHRvIGVuc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhY3R1YWxseSBhIHN5bWJvbCBpbiBgaXBfdHVubmVsLm9gLCB1bmxlc3MsIG9mIGNvdXJzZSwgaXQmIzM5O3MgaW5saW5lZC4gRXZlbiBpZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgd2lsbCBiZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LgoKT2theSwgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF9tZF90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDt0bmxfdXBkYXRlX3BtdHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBfbWRfdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7dG5sX3VwZGF0ZV9wbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgc25hcHNob3RzIGB0dW5uZWwtXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxuXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXG4tIENvbmN1cnJlbmN5IGlzc3VlcyBhbmQgZGF0YSByYWNlcyBhcmUgdGFyZ2V0ZWQgYnkgS0NTQU4vTE9DS0RFUC5cbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC01MTIsMTQgJiM0Mzs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTsKIHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCwKLQkJCSAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQpCiYjNDM7CQkJICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCwKJiM0MzsJCQkgICAgaW50IGVuY2FwX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcGt0X3NpemU7CiAJaW50IG10dTsKIAogCXR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC0mZ3Q7aGxlbjsKLQlwa3Rfc2l6ZSA9IHNrYi0mZ3Q7bGVuIC0gdHVubmVsX2hsZW47CiYjNDM7CXBrdF9zaXplID0gc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuOwogCXBrdF9zaXplIC09IGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAlpZiAoZGYpIHsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgdm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS0mZ3Q7dHVuX2ZsYWdzKSkKIAkJZGYgPSBodG9ucyhJUF9ERik7CiAJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLAotCQkJICAgIGtleS0mZ3Q7dS5pcHY0LmRzdCwgdHJ1ZSkpIHsKJiM0MzsJCQkgICAga2V5LSZndDt1LmlwdjQuZHN0LCB0cnVlLCAwKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTY3MSw2ICYjNDM7NjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaDsKIAl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlib29sIG1kID0gZmFsc2U7CiAJYm9vbCBjb25uZWN0ZWQ7CiAJaW50IGVycl9jb3VudDsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggdG9zLCB0dGw7CiAJX19iZTMyIGRzdDsKIAlfX2JlMTYgZGY7CkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgdHVubmVsLSZndDtuZXQsIFJFQURfT05DRSh0dW5uZWwtJmd0O3Bhcm1zLmxpbmspLAogCQkJICAgIHR1bm5lbC0mZ3Q7ZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7CiAKLQlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDt0dW5uZWwtJmd0O2VuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKQomIzQzOwkvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC0mZ3Q7ZW5jYXApOwomIzQzOwllbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAoZW5jYXBfaGxlbiAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAKIAlpZiAoY29ubmVjdGVkICZhbXA7JmFtcDsgbWQpIHsKQEAgLTgwMyw3ICYjNDM7ODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7ICF0dW5uZWwtJmd0O2lnbm9yZV9kZikKIAkJZGYgfD0gKGlubmVyX2lwaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKTsKIAotCWlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHsKJiM0MzsJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLAomIzQzOwkJCSAgICBlbmNhcF9obGVuKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTgzNCw3ICYjNDM7ODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCW1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKQotCQkJJiM0MzsgcnQtJmd0O2RzdC5oZWFkZXJfbGVuICYjNDM7IGlwX2VuY2FwX2hsZW4oJmFtcDt0dW5uZWwtJmd0O2VuY2FwKTsKJiM0MzsJCQkmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW4gJiM0MzsgZW5jYXBfaGxlbjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTsKIAomIzQzOwlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDtpcGVuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKSB7CiYjNDM7CQlpcF9ydF9wdXQocnQpOwomIzQzOwkJZ290byB0eF9lcnJvcjsKJiM0MzsJfQomIzQzOwogCWlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCwKIAkJICAgICAgZGYsICFuZXRfZXEodHVubmVsLSZndDtuZXQsIGRldl9uZXQoZGV2KSksIDApOwogCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKktNU0FOIEZ1enppbmcgQ29uc2lkZXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBqdXN0aWZpZXMgZmlyaW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQsICp3aHkqLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBzYWZldHkuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgZmFzdGVzdCBhbmQgbW9zdCBlZmZpY2llbnQg4oCTIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIEtub3dpbmcgdGhhdCBjb2RlIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgb3IgaWYgS0FTQU4gYWxvbmUgaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0aWYgKCFtZClcbiA3NTE6XHRcdFx0XHRjb25uZWN0ZWQgPSBmYWxzZTtcbiA3NTI6XHRcdH1cbiA3NTM6XHRcbiA3NTQ6XHRcdHRvcyA9IHRubF9wYXJhbXMtXHUwMDNldG9zO1xuIDc1NTpcdFx0aWYgKHRvcyBcdTAwMjYgMHgxKSB7XG4gNzU2Olx0XHRcdHRvcyBcdTAwMjY9IH4weDE7XG4gNzU3Olx0XHRcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xuIDc1ODpcdFx0XHRcdHRvcyA9IGlubmVyX2lwaC1cdTAwM2V0b3M7XG4gNzU5Olx0XHRcdFx0Y29ubmVjdGVkID0gZmFsc2U7XG4gNzYwOlx0XHRcdH0gZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuIDc2MTpcdFx0XHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKTtcbiA3NjI6XHRcdFx0XHRjb25uZWN0ZWQgPSBmYWxzZTtcbiA3NjM6XHRcdFx0fVxuIDc2NDpcdFx0fVxuIDc2NTpcdFxuIDc2NjpcdFx0aXBfdHVubmVsX2luaXRfZmxvdyhcdTAwMjZmbDQsIHByb3RvY29sLCBkc3QsIHRubF9wYXJhbXMtXHUwMDNlc2FkZHIsXG4gNzY3Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSwgdG9zIFx1MDAyNiBJTkVUX0RTQ1BfTUFTSyxcbiA3Njg6XHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZW5ldCwgUkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKSxcbiA3Njk6XHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZWZ3bWFyaywgc2tiX2dldF9oYXNoKHNrYiksIDApO1xuIDc3MDpcdFxuIDc3MTpcdFx0LyogU25hcHNob3QgZW5jYXA7IGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gdXBkYXRlIGl0IGNvbmN1cnJlbnRseS4gKi9cbiA3NzI6XHRcdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbiA3NzM6XHRcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuIDc3NDpcdFx0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4gNzc1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gNzc2Olx0XG4gNzc3Olx0XHRpZiAoY29ubmVjdGVkIFx1MDAyNlx1MDAyNiBtZCkge1xuIDc3ODpcdFx0XHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIHR1bl9pbmZvKTtcbiA3Nzk6XHRcdFx0aWYgKHVzZV9jYWNoZSlcbiA3ODA6XHRcdFx0XHRydCA9IGRzdF9jYWNoZV9nZXRfaXA0KFx1MDAyNnR1bl9pbmZvLVx1MDAzZWRzdF9jYWNoZSxcbiA3ODE6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmZsNC5zYWRkcik7XG4gNzgyOlx0XHR9IGVsc2Uge1xuIDc4MzpcdFx0XHRydCA9IGNvbm5lY3RlZCA/IGRzdF9jYWNoZV9nZXRfaXA0KFx1MDAyNnR1bm5lbC1cdTAwM2Vkc3RfY2FjaGUsXG4gNzg0Olx0XHRcdFx0XHRcdFx0XHUwMDI2Zmw0LnNhZGRyKSA6IE5VTEw7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XG4gNzg3Olx0XHRpZiAoIXJ0KSB7XG4gNzg4Olx0XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xuIDc4OTpcdFxuIDc5MDpcdFx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuIDc5MTpcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9jYXJyaWVyX2Vycm9ycyk7XG4gNzkyOlx0XHRcdFx0Z290byB0eF9lcnJvcjtcbiA3OTM6XHRcdFx0fVxuIDc5NDpcdFx0XHRpZiAodXNlX2NhY2hlKVxuIDc5NTpcdFx0XHRcdGRzdF9jYWNoZV9zZXRfaXA0KFx1MDAyNnR1bl9pbmZvLVx1MDAzZWRzdF9jYWNoZSwgXHUwMDI2cnQtXHUwMDNlZHN0LFxuIDc5NjpcdFx0XHRcdFx0XHQgIGZsNC5zYWRkcik7XG4gNzk3Olx0XHRcdGVsc2UgaWYgKCFtZCBcdTAwMjZcdTAwMjYgY29ubmVjdGVkKVxuIDc5ODpcdFx0XHRcdGRzdF9jYWNoZV9zZXRfaXA0KFx1MDAyNnR1bm5lbC1cdTAwM2Vkc3RfY2FjaGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiA3OTk6XHRcdFx0XHRcdFx0ICBmbDQuc2FkZHIpO1xuIDgwMDpcdFx0fVxuIDgwMTpcdFxuIDgwMjpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgPT0gZGV2KSB7XG4gODAzOlx0XHRcdGlwX3J0X3B1dChydCk7XG4gODA0Olx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCBjb2xsaXNpb25zKTtcbiA4MDU6XHRcdFx0Z290byB0eF9lcnJvcjtcbiA4MDY6XHRcdH1cbiA4MDc6XHRcbiA4MDg6XHRcdGRmID0gdG5sX3BhcmFtcy1cdTAwM2VmcmFnX29mZjtcbiA4MDk6XHRcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2VpZ25vcmVfZGYpXG4gODEwOlx0XHRcdGRmIHw9IChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSk7XG4gODExOlx0XG4gODEyOlx0XHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXG4gODEzOlx0XHRcdFx0ICAgIGVuY2FwX2hsZW4pKSB7XG4gODE0Olx0XHRcdGlwX3J0X3B1dChydCk7XG4gODE1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gODE2Olx0XHR9XG4gODE3Olx0XG4gODE4Olx0XHRlcnJfY291bnQgPSBSRUFEX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCk7XG4gODE5Olx0XHRpZiAoZXJyX2NvdW50IFx1MDAzZSAwKSB7XG4gODIwOlx0XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxuIDgyMTpcdFx0XHRcdFx0UkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfdGltZSkgJiM0MzsgSVBUVU5ORUxfRVJSX1RJTUVPKSkge1xuIDgyMjpcdFx0XHRcdFdSSVRFX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCwgZXJyX2NvdW50IC0gMSk7XG4gODIzOlx0XG4gODI0Olx0XHRcdFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xuIDgyNTpcdFx0XHR9IGVsc2Uge1xuIDgyNjpcdFx0XHRcdFdSSVRFX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCwgMCk7XG4gODI3Olx0XHRcdH1cbiA4Mjg6XHRcdH1cbiA4Mjk6XHRcbiA4MzA6XHRcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpbm5lcl9pcGgsIHNrYik7XG4gODMxOlx0XHR0dGwgPSB0bmxfcGFyYW1zLVx1MDAzZXR0bDtcbiA4MzI6XHRcdGlmICh0dGwgPT0gMCkge1xuIDgzMzpcdFx0XHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG4gODM0Olx0XHRcdFx0dHRsID0gaW5uZXJfaXBoLVx1MDAzZXR0bDtcbiA4MzU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiA4MzY6XHRcdFx0ZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcbiA4Mzc6XHRcdFx0XHR0dGwgPSAoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKS1cdTAwM2Vob3BfbGltaXQ7XG4gODM4Olx0I2VuZGlmXG4gODM5Olx0XHRcdGVsc2VcbiA4NDA6XHRcdFx0XHR0dGwgPSBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gODQxOlx0XHR9XG4gODQyOlx0XG4gODQzOlx0XHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKVxuIDg0NDpcdFx0XHRcdCYjNDM7IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuICYjNDM7IGVuY2FwX2hsZW47XG4gODQ1Olx0XG4gODQ2Olx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xuIDg0NzpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDg0ODpcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZHJvcHBlZCk7XG4gODQ5Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdG5sX3VwZGF0ZV9wbXR1YCBpbiBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiBsaW5lcyA1MTAtNTUwIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGB0bmxfdXBkYXRlX3BtdHVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4gZm9yIGFkanVzdGluZyBQTVRVIHZhbHVlcyBpbiBhIHR1bm5lbCBjb250ZXh0LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsb2dpYyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IE1UVS1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHR1bm5lbCBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2VzLCBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBhbmQsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZCwgaG93IGl0IGRlYWxzIHdpdGggcGF0aCBNVFUgZGlzY292ZXJ5IGFuZCBhbnkgcmVsYXRlZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSBhbGwgdGhlIFBNVFUgJiMzNDttYWdpYyYjMzQ7IGhhcHBlbnMuIEdpdmVuIHRoZSBjb2RlJiMzOTtzIGNvbXBsZXhpdHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB3ZSBoYXZlIG11bHRpcGxlIHR1bm5lbCBpbnN0YW5jZXMuIE15IGV4cGVydCBleWUgd2lsbCBiZSBsYXNlci1mb2N1c2VkIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2l0aGluIHRoYXQgcGFydGljdWxhciBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gNTEzOlx0XHRcdFx0ICAgIHN0cnVjdCBydGFibGUgKnJ0LCBfX2JlMTYgZGYsXG4gNTE0Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxuIDUxNTpcdFx0XHRcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXG4gNTE2Olx0XHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIDUxNzpcdHtcbiA1MTg6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gNTE5Olx0XHRpbnQgcGt0X3NpemU7XG4gNTIwOlx0XHRpbnQgbXR1O1xuIDUyMTpcdFxuIDUyMjpcdFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4gNTIzOlx0XHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xuIDUyNDpcdFx0cGt0X3NpemUgLT0gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gNTI1Olx0XG4gNTI2Olx0XHRpZiAoZGYpIHtcbiA1Mjc6XHRcdFx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gKHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHR1bm5lbF9obGVuKTtcbiA1Mjg6XHRcdFx0bXR1IC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIDUyOTpcdFx0fSBlbHNlIHtcbiA1MzA6XHRcdFx0bXR1ID0gc2tiX3ZhbGlkX2RzdChza2IpID8gZHN0X210dShza2JfZHN0KHNrYikpIDogZGV2LVx1MDAzZW10dTtcbiA1MzE6XHRcdH1cbiA1MzI6XHRcbiA1MzM6XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gNTM0Olx0XHRcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XG4gNTM1Olx0XG4gNTM2Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xuIDUzNzpcdFx0XHRpZiAoIXNrYl9pc19nc28oc2tiKSBcdTAwMjZcdTAwMjZcbiA1Mzg6XHRcdFx0ICAgIChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSkgXHUwMDI2XHUwMDI2XG4gNTM5Olx0XHRcdCAgICBtdHUgXHUwMDNjIHBrdF9zaXplKSB7XG4gNTQwOlx0XHRcdFx0aWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTtcbiA1NDE6XHRcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDU0MjpcdFx0XHR9XG4gNTQzOlx0XHR9XG4gNTQ0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gNTQ1Olx0XHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA1NDY6XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XG4gNTQ3Olx0XHRcdF9fYmUzMiBkYWRkcjtcbiA1NDg6XHRcbiA1NDk6XHRcdFx0cnQ2ID0gc2tiX3ZhbGlkX2RzdChza2IpID8gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSkgOlxuIDU1MDpcdFx0XHRcdFx0XHQgICBOVUxMO1xuIDU1MTpcdFx0XHRkYWRkciA9IG1kID8gZHN0IDogdHVubmVsLVx1MDAzZXBhcm1zLmlwaC5kYWRkcjtcbiA1NTI6XHRcbiA1NTM6XHRcdFx0aWYgKHJ0NiBcdTAwMjZcdTAwMjYgbXR1IFx1MDAzYyBkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgXHUwMDI2XHUwMDI2XG4gNTU0Olx0XHRcdFx0ICAgbXR1IFx1MDAzZT0gSVBWNl9NSU5fTVRVKSB7XG4gNTU1Olx0XHRcdFx0aWYgKChkYWRkciBcdTAwMjZcdTAwMjYgIWlwdjRfaXNfbXVsdGljYXN0KGRhZGRyKSkgfHxcbiA1NTY6XHRcdFx0XHQgICAgcnQ2LVx1MDAzZXJ0NmlfZHN0LnBsZW4gPT0gMTI4KSB7XG4gNTU3Olx0XHRcdFx0XHRydDYtXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XG4gNTU4Olx0XHRcdFx0XHRkc3RfbWV0cmljX3NldChza2JfZHN0KHNrYiksIFJUQVhfTVRVLCBtdHUpO1xuIDU1OTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21taXQgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBjb21taXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgKndoYXQqLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHByb2JsZW0gdGhpcyBhZGRyZXNzZXMuIEkmIzM5O20gbG9va2luZyBiZXlvbmQgdGhlIGNvZGU7IHdoYXQgd2FzIHRoZSB0cmlnZ2VyPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbT8gUGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5PyBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBhbmQgYGlwX2VuY2FwX2hsZW5gIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgKG9yIHdoYXRldmVyIHRoaXMgc3BlY2lmaWMgc3lzdGVtIHVzZXMpLiBUaGVzZSBhcmUgbGlrZWx5IGtleSBlbGVtZW50cywgZ2l2ZW4gdGhlaXIgbWVudGlvbi4gVGhleSBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZSB0byBzb21lIGZvcm0gb2YgSVAgZW5jYXBzdWxhdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0dW5uZWxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBoZXJlIGFyZSBhZmZlY3RpbmcgdGhvc2UgZnVuY3Rpb25zL3ZhcmlhYmxlcy4gQW55IG1vZGlmaWNhdGlvbnMgdG8gdGhvc2UgYXJlYXMgYXJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGNoYW5nZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaGVhZGVyIHNpemUgaXNzdWVzPyBBbnkgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gY2hhbmdlcz8gRW5jcnlwdGlvbiBjb25jZXJucz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBhcmUgdXNlZCwgYW5kIGhvdyBkb2VzIHRoaXMgdXBkYXRlIGludGVyYWN0PyBJdCBhbGwgYm9pbHMgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZW5jYXBfaGxlbnxpcF90dW5uZWxfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZm91X2NvcmUuYz05MDM9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBmb3VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTkxNS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTE2OnNpemVfdCBmb3VfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTIwPUVYUE9SVF9TWU1CT0woZm91X2VuY2FwX2hsZW4pO1xubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjkyMjpzaXplX3QgZ3VlX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTIzLXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkzOD1FWFBPUlRfU1lNQk9MKGd1ZV9lbmNhcF9obGVuKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTM5LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NDEtXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTU0PUVYUE9SVF9TWU1CT0woX19mb3VfYnVpbGRfaGVhZGVyKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NTY6aW50IF9fZ3VlX2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NTctXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDMwLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMi1cdFx0XHQgIHN0cnVjdCBmbG93aTQgKmZsNCwgdTggKnByb3RvY29sLCBfX2JlMTYgc3BvcnQpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDUxLVx0XHRcdCAgICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwNjc6c3RhdGljIGludCBndWVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXHRcdFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTA5Nj1zdGF0aWMgaW50IGd1ZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYxLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBmb3VfaXB0dW5fb3BzID0ge1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVx0LmVuY2FwX2hsZW4gPSBmb3VfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGd1ZV9pcHR1bl9vcHMgPSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjktXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTc1LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNzg6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExODMtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBhZGQgZ3VlIG9wc1xcblwmIzM0Oyk7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XHRcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTg4LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5NS17XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOTY6XHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NzpcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTk4LX1cbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyMDI6c3RhdGljIGludCBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA2LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA4LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNTYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1OC1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNjk9c3RhdGljIHZvaWQgX19leGl0IGZvdV9maW5pKHZvaWQpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xubmV0L2lwdjQvZm91X2NvcmUuYzoxMjcxOlx0aXBfdHVubmVsX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmZvdV9ubF9mYW1pbHkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjk3Olx0XHRcdFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk1LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktXHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMDpcdFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDU4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDU5OmludCBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDYwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnVtKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ2NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2NTpcdHJldHVybiAhY21weGNoZygoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKiopXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjYtXHRcdFx0XHUwMDI2aXB0dW5fZW5jYXBzW251bV0sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ3MTppbnQgaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3Mi1cdFx0XHQgICAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzgtXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0Nzk6XHRyZXQgPSAoY21weGNoZygoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKiopXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODAtXHRcdCAgICAgICBcdTAwMjZpcHR1bl9lbmNhcHNbbnVtXSxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg3OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg5OmludCBpcF90dW5uZWxfZW5jYXBfc2V0dXAoc3RydWN0IGlwX3R1bm5lbCAqdCxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5MDpcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmlwZW5jYXApXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTEte1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ5NS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5NjpcdGhsZW4gPSBpcF9lbmNhcF9obGVuKGlwZW5jYXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDk3LVx0aWYgKGhsZW4gXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNTA5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjUxMDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNTExLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3Mj12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjA1LVx0aWYgKCF0dW5uZWxfaGxlbilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYwNjpcdFx0dHVubmVsX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNnR1bl9pbmZvLVx1MDAzZWVuY2FwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYwNy1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYwODpcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5faW5mby1cdTAwM2VlbmNhcCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZsNCkgXHUwMDNjIDApXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDktXHRcdGdvdG8gdHhfZXJyb3I7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjcwPXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzQtXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gTlVMTDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjY3NTpcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY3Ni1cdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTc3Mi1cdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjc3MzpcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNzc0LVx0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtODU0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODU1Olx0aWYgKGlwX3R1bm5lbF9lbmNhcChza2IsIFx1MDAyNmlwZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTYtXHRcdGlwX3J0X3B1dChydCk7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00MS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NDI6Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00My1cdFx0aXB0dW5fZW5jYXBzW01BWF9JUFRVTl9FTkNBUF9PUFNdIF9fcmVhZF9tb3N0bHk7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMTI5PWJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMTMwOlx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTExMzEte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDcwLVx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVx1MDAzZXRiO1xubmV0L2lwdjQvaXBpcC5jOjQ3MTpcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbm5ldC9pcHY0L2lwaXAuYy00NzItXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xuLS1cbm5ldC9pcHY0L2lwaXAuYy00NzUtXHRpZiAoaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoZGF0YSwgXHUwMDI2aXBlbmNhcCkpIHtcbm5ldC9pcHY0L2lwaXAuYzo0NzY6XHRcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2NC9pcGlwLmMtNDc3LVxuLS1cbm5ldC9pcHY0L2lwaXAuYz00ODc9c3RhdGljIGludCBpcGlwX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDkxLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcGlwLmM6NDkyOlx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xubmV0L2lwdjQvaXBpcC5jLTQ5My1cdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQ5Ny1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjQvaXBpcC5jOjQ5ODpcdFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY0L2lwaXAuYy00OTktXG4tLVxubmV0L2lwdjQvdWRwLmM9ODE3PXN0YXRpYyBpbnQgX191ZHA0X2xpYl9lcnJfZW5jYXBfbm9fc2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvdWRwLmMtODIyLVx0XHRpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbyk7XG5uZXQvaXB2NC91ZHAuYzo4MjM6XHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICplbmNhcDtcbm5ldC9pcHY0L3VkcC5jLTgyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlZmluaXRpb25zLCBwdWxsaW5nIGZyb20gbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBuZXR3b3JrIGVuY2Fwc3VsYXRpb246CgoqKkRlY2lwaGVyaW5nIGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAuICBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIG9mIElQIGVuY2Fwc3VsYXRpb24sIGFuZCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyAtIGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBhZGRpbmcgaGVhZGVycyBhbmQgZnJhbWluZyBkYXRhIGZvciB0dW5uZWxpbmcgYW5kIG90aGVyIGVuY2Fwc3VsYXRpb24gc2NlbmFyaW9zLiBgaXBfZW5jYXBfaGxlbmAgaW1tZWRpYXRlbHkgc2lnbmFscyAmIzM0O2hlYWRlciBsZW5ndGgmIzM0Oy4gSSYjMzk7bSBiZXR0aW5nIHRoaXMgaXMgYSB2YWx1ZSwgcHJvYmFibHkgYW4gaW50ZWdlciwgdGhhdCB0ZWxscyB0aGUgSVAgc3RhY2sgKmV4YWN0bHkqIGhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBvcmlnaW5hbCBwYWNrZXQgd2hlbiBpdCYjMzk7cyBiZWluZyBlbmNhcHN1bGF0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSB1cHBlciBsYXllcnMgdG8gY2FsY3VsYXRlIGNoZWNrc3VtcyBhbmQgcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBpbmNvbWluZyBkYXRhLiBJJiMzOTttIHRoaW5raW5nIGl04oCZbGwgYmUgdXNlZCBhdCBib3RoIHRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgc2lkZXMuCgpUaGVuIHRoZXJlJiMzOTtzIGBpcF90dW5uZWxfZW5jYXBgLiBUaGlzIHNjcmVhbXMgJiMzNDt0dW5uZWwgZW5jYXBzdWxhdGlvbiwmIzM0OyBvZiBjb3Vyc2UhIEl0JiMzOTtzIHByb2JhYmx5IGEgc3RydWN0dXJlIG9yIGEgZnVuY3Rpb24gcG9pbnRlciwgaWYgSSB3ZXJlIHRvIGd1ZXNzLCB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBwcm9jZXNzIG9mIGNvbnN0cnVjdGluZyB0aGUgdHVubmVsIGhlYWRlcnMuICBJdCBtaWdodCBpbmNsdWRlIHRoaW5ncyBsaWtlIGFkZGluZyB0aGUgb3V0ZXIgSVAgaGVhZGVyIChpZiBpdCYjMzk7cyBhbiBJUC1pbi1JUCB0dW5uZWwpLCBHUkUgaGVhZGVycywgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbi1zcGVjaWZpYyBmaWVsZHMuIEnigJlkIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSB3b3JraG9yc2UgdGhhdCB3cmFwcyB0aGUgaW5uZXIgcGFja2V0IGluIHRoZSBuZWNlc3NhcnkgdHVubmVsIGZyYW1pbmcsIGVmZmVjdGl2ZWx5IGhpZGluZyB0aGUgb3JpZ2luYWwgSVAgcGF5bG9hZCBhbmQgcHJvdmlkaW5nIGEgc2FmZSBwYXNzYWdlIHRocm91Z2ggc29tZSBuZXR3b3JrLiBJJiMzOTtkIGltYWdpbmUgdGhhdCB0aGlzIGVuY2Fwc3VsYXRlcyB0aGUgZW50aXJlIHByb2NlZHVyZSBvZiBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBJUCBwYWNrZXQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHVzZXMgdGhlc2UgdHdvIGluIGNvbmp1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0d28sIHN1Y2ggYXMsIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBtYWtlcyB1c2Ugb2YgYGlwX2VuY2FwX2hsZW5gIHRvIGNvbnN0cnVjdCB0aGUgZW5jYXBzdWxhdGlvbiBmcmFtZS4gIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfZW5jYXBcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NTI2PXN0YXRpYyBpbmxpbmUgaW50IGlwX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTQ1LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjU0NjpzdGF0aWMgaW5saW5lIGludCBpcF90dW5uZWxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NDctXHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwX3R1bm5lbHMuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBJUCB0dW5uZWxzLCBhbmQgdGhlIGxpa2VseSBwbGFjZSB0byBmaW5kIHJlbGV2YW50IGRlZmluaXRpb25zIGlzIHRoZSBrZXJuZWwgaGVhZGVyIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBbmQgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA1MjA7IHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHNwb3QgdG8gZmluZCBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgbmV0d29ya2luZyBjb2RlLiBJdCYjMzk7cyBhIHRhcmdldGVkIGFwcHJvYWNoIHJhdGhlciB0aGFuIGEgZnVsbCBjb2RlIHJldmlldyBhdCB0aGlzIHBvaW50LCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gbXkgdGltZS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFx0ICogYSBiYXNlIG5ldHdvcmsgaGVhZGVyIGluIHNrYi1cdTAwM2VoZWFkLlxuIDUxNjpcdFx0ICovXG4gNTE3Olx0XHRyZWFzb24gPSBwc2tiX21heV9wdWxsX3JlYXNvbihza2IsIG1hY2xlbiAmIzQzOyBuaGxlbik7XG4gNTE4Olx0XHRpZiAocmVhc29uKVxuIDUxOTpcdFx0XHRyZXR1cm4gcmVhc29uO1xuIDUyMDpcdFxuIDUyMTpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY2xlbik7XG4gNTIyOlx0XG4gNTIzOlx0XHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcbiA1MjQ6XHR9XG4gNTI1Olx0XG4gNTI2Olx0c3RhdGljIGlubGluZSBpbnQgaXBfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxuIDUyNzpcdHtcbiA1Mjg6XHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHM7XG4gNTI5Olx0XHRpbnQgaGxlbiA9IC1FSU5WQUw7XG4gNTMwOlx0XG4gNTMxOlx0XHRpZiAoZS1cdTAwM2V0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuIDUzMjpcdFx0XHRyZXR1cm4gMDtcbiA1MzM6XHRcbiA1MzQ6XHRcdGlmIChlLVx1MDAzZXR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuIDUzNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzY6XHRcbiA1Mzc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA1Mzg6XHRcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcHR1bl9lbmNhcHNbZS1cdTAwM2V0eXBlXSk7XG4gNTM5Olx0XHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWVuY2FwX2hsZW4pKVxuIDU0MDpcdFx0XHRobGVuID0gb3BzLVx1MDAzZWVuY2FwX2hsZW4oZSk7XG4gNTQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1NDI6XHRcbiA1NDM6XHRcdHJldHVybiBobGVuO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW5saW5lIGludCBpcF90dW5uZWxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1NDc6XHRcdFx0XHRcdCAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbiA1NDg6XHRcdFx0XHRcdCAgdTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4gNTQ5Olx0e1xuIDU1MDpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcztcbiA1NTE6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuIDU1MjpcdFxuIDU1MzpcdFx0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiA1NTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTU1Olx0XG4gNTU2Olx0XHRpZiAoZS1cdTAwM2V0eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiA1NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU4Olx0XG4gNTU5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzc1CgkJCQkJCQlvdXRwdXQ6IDI4MgoJCQkJCQkJdGhvdWdodHM6IDk4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBUdW5uZWwgRW5jYXBzdWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB3b3VsZC4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBgaXBfdHVubmVsX3htaXRgLiBUaGUgYWRkaXRpb24gb2YgYGVuY2FwX2hsZW5gIGFzIGFuIGFyZ3VtZW50IHRvIGB0bmxfdXBkYXRlX3BtdHVgIGlzIGtleS4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgbGVuZ3RoIGlzIGhhbmRsZWQsIGRpcmVjdGx5IGltcGFjdGluZyBwYWNrZXQgc2l6ZSBjYWxjdWxhdGlvbnMsIGFuZCB0aGVyZWZvcmUsIFBNVFUgZGV0ZXJtaW5hdGlvbi4gVGhlIGNoYW5nZSB0byBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIChgc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYCkgaXMgb2J2aW91c2x5IHdoZXJlIHRoaXMgaW1wYWN0IGxpZXMsIGFuZCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGlwX3R1bm5lbF94bWl0YCBub3cgKnNuYXBzaG90cyogdGhlIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgYGRhdGFfcmFjZSh0dW5uZWwtJmd0O2VuY2FwKWAuIFRoaXMgKm11c3QqIGJlIGFib3V0IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBlbmNhcHN1bGF0aW9uIHNldHRpbmdzIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgZW5jYXBzdWxhdGlvbiBvY2N1cnMgcmlnaHQgYmVmb3JlIGBpcHR1bm5lbF94bWl0YCwgYWZ0ZXIgYSBjaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRyb29tLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlICptdXN0KiB2ZXJpZnkgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrIGV4aXN0cyBoZXJlLiBgaXBlbmNhcGAgaXMgcG9wdWxhdGVkIHZpYSBhIHN0cnVjdCBhc3NpZ25tZW50IGZyb20gYHR1bm5lbC0mZ3Q7ZW5jYXBgLCB0aGlzIGlzIGEgZ29vZCBzaWduLiBgZW5jYXBfaGxlbmAgaXMgZGVyaXZlZCBmcm9tIGBpcGVuY2FwYCB2aWEgYSBkZWRpY2F0ZWQgZnVuY3Rpb24sIGBpcF9lbmNhcF9obGVuKClgLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgc2FmZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhbHNvIG5vdCByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGl0IHNob3VsZG4mIzM5O3QsIHNpbmNlIGl0JiMzOTtzIG9ubHkgcmVjZWl2aW5nIHRoZSBgZW5jYXBfaGxlbmAgaW50LiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIGlzIHNvbGVseSB1c2VkIGZvciBQTVRVL0lDTVAgY2FsY3VsYXRpb25zIGFuZCBmcmFnbWVudHMsIHNvIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IGlzc3VlcyB0aGVyZS4KCldlIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIElzIHRoZXJlIGFueSBzdHJ1Y3QgcGFkZGluZyBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE/IGBpcGVuY2FwYCBpcyBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKmJlZm9yZSogYmVpbmcgdXNlZCBpbiBgaXBfZW5jYXBfaGxlbigpYCBhbmQgYGlwX3R1bm5lbF9lbmNhcCgpYC4gYGVuY2FwX2hsZW5gIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFsbCBicmFuY2hlcyByZWx5IG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8gZGF0YSBnb2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBzZWVtcyByb2J1c3QuCgpXaGF0IGJ1Z3MgYXJlIGZpeGVkIG9yIHBvdGVudGlhbGx5IGludHJvZHVjZWQ/IFRoaXMgbG9va3MgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGZpeCBieSBzbmFwc2hvdHRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy4gSXQmIzM5O3MgbW92aW5nIHRoZSBlbmNhcHN1bGF0aW9uICphZnRlciogaGVhZHJvb20gZXhwYW5zaW9uLCB3aGljaCBpcyBzbWFydCwgdG8gcHJldmVudCB3cml0aW5nIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgUE1UVSBjYWxjdWxhdGlvbiBpcyBjb3JyZWN0ZWQgYnkgYWNjb3VudGluZyBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aC4gVGhlc2UgYXJlIGdvb2QgY2hhbmdlcy4KCkZpbmFsbHksIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IEtNU0FOPyBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIEJlY2F1c2UgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2sgdG8gY29uZmlybSB0aGF0IGNvbmNsdXNpb246CgoxLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgoyLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCjMuICBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBCb3VuZHMgY2hlY2tzIGFuZCBsZW5ndGhzIGFyZSBkb25lIHNhZmVseS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgc29saWQgcGF0Y2gsIGFkZHJlc3NpbmcgcmVhbCBjb25jdXJyZW5jeSwgYnVmZmVyLWhhbmRsaW5nLCBhbmQgbG9naWMgY29uY2VybnMgd2l0aG91dCBpbnRyb2R1Y2luZyBLTVNBTi1yZWxldmFudCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIGFuZCBQTVRVL2hlYWRyb29tIGNhbGN1bGF0aW9ucyBpbiBJUHY0IHR1bm5lbCB0cmFuc21pc3Npb24gKGlwX3R1bm5lbF94bWl0IGFuZCB0bmxfdXBkYXRlX3BtdHUpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXG4yLiBJdCBhY2NvdW50cyBmb3IgYGVuY2FwX2hsZW5gIGluIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBkZWZlcnMgY2FsbGluZyBgaXBfdHVubmVsX2VuY2FwKClgIHVudGlsIGFmdGVyIHNrYiBoZWFkcm9vbSBpcyBleHBhbmRlZCB3aXRoIGBza2JfY293X2hlYWQoKWAuXG5cblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxuLSBNZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20sIHNrYiBib3VuZHMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBLQVNBTi5cbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgc25hcHNob3RzIGB0dW5uZWwtXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxuXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXG4tIENvbmN1cnJlbmN5IGlzc3VlcyBhbmQgZGF0YSByYWNlcyBhcmUgdGFyZ2V0ZWQgYnkgS0NTQU4vTE9DS0RFUC5cbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTowOS4xNDc2MjAwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA3MDA3ODk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBfVFVOTkVMXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBfbWRfdHVubmVsX3htaXRcIixcbiAgICBcInRubF91cGRhdGVfcG10dVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgYW5kIFBNVFUvaGVhZHJvb20gY2FsY3VsYXRpb25zIGluIElQdjQgdHVubmVsIHRyYW5zbWlzc2lvbiAoaXBfdHVubmVsX3htaXQgYW5kIHRubF91cGRhdGVfcG10dSkuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxcbjIuIEl0IGFjY291bnRzIGZvciBgZW5jYXBfaGxlbmAgaW4gYHRubF91cGRhdGVfcG10dWAgYW5kIGRlZmVycyBjYWxsaW5nIGBpcF90dW5uZWxfZW5jYXAoKWAgdW50aWwgYWZ0ZXIgc2tiIGhlYWRyb29tIGlzIGV4cGFuZGVkIHdpdGggYHNrYl9jb3dfaGVhZCgpYC5cXG5cXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcXG4tIE1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSwgc2tiIGJvdW5kcywgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MDkuMTQ3NjI0MjEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3MTY1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MDE5M2E1MTdmYWY3MjAxNDllZTkyNGViNWRhYjdlMWVjY2FmNzA2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC01MTIsMTQgKzUxMiwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xcbiBzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxcbi1cXHRcXHRcXHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kKVxcbitcXHRcXHRcXHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxcbitcXHRcXHRcXHQgICAgaW50IGVuY2FwX2hsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0aW50IHBrdF9zaXplO1xcbiBcXHRpbnQgbXR1O1xcbiBcXG4gXFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVxcdTAwM2VobGVuO1xcbi1cXHRwa3Rfc2l6ZSA9IHNrYi1cXHUwMDNlbGVuIC0gdHVubmVsX2hsZW47XFxuK1xcdHBrdF9zaXplID0gc2tiLVxcdTAwM2VsZW4gKyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW47XFxuIFxcdHBrdF9zaXplIC09IGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIFxcbiBcXHRpZiAoZGYpIHtcXG5AQCAtNjI5LDcgKzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9ET05UX0ZSQUdNRU5UX0JJVCwga2V5LVxcdTAwM2V0dW5fZmxhZ3MpKVxcbiBcXHRcXHRkZiA9IGh0b25zKElQX0RGKTtcXG4gXFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLFxcbi1cXHRcXHRcXHQgICAga2V5LVxcdTAwM2V1LmlwdjQuZHN0LCB0cnVlKSkge1xcbitcXHRcXHRcXHQgICAga2V5LVxcdTAwM2V1LmlwdjQuZHN0LCB0cnVlLCAwKSkge1xcbiBcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuQEAgLTY3MSw2ICs2NzIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XFxuIFxcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XFx0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cXG4gXFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMO1xcdFxcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuQEAgLTY4MCw2ICs2ODIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGJvb2wgbWQgPSBmYWxzZTtcXG4gXFx0Ym9vbCBjb25uZWN0ZWQ7XFxuIFxcdGludCBlcnJfY291bnQ7XFxuK1xcdGludCBlbmNhcF9obGVuO1xcbiBcXHR1OCB0b3MsIHR0bDtcXG4gXFx0X19iZTMyIGRzdDtcXG4gXFx0X19iZTE2IGRmO1xcbkBAIC03NjUsNyArNzY4LDEwIEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VwYXJtcy5saW5rKSxcXG4gXFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XFxuIFxcbi1cXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXFx1MDAyNnR1bm5lbC1cXHUwMDNlZW5jYXAsIFxcdTAwMjZwcm90b2NvbCwgXFx1MDAyNmZsNCkgXFx1MDAzYyAwKVxcbitcXHQvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqL1xcbitcXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cXHUwMDNlZW5jYXApO1xcbitcXHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcXHUwMDI2aXBlbmNhcCk7XFxuK1xcdGlmIChlbmNhcF9obGVuIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChjb25uZWN0ZWQgXFx1MDAyNlxcdTAwMjYgbWQpIHtcXG5AQCAtODAzLDcgKzgwOSw4IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2ICF0dW5uZWwtXFx1MDAzZWlnbm9yZV9kZilcXG4gXFx0XFx0ZGYgfD0gKGlubmVyX2lwaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9ERikpO1xcbiBcXG4tXFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlKSkge1xcbitcXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgICBlbmNhcF9obGVuKSkge1xcbiBcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuQEAgLTgzNCw3ICs4NDEsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdG1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpXFxuLVxcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgaXBfZW5jYXBfaGxlbihcXHUwMDI2dHVubmVsLVxcdTAwM2VlbmNhcCk7XFxuK1xcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcXG4gXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7XFxuIFxcdFxcdGlwX3J0X3B1dChydCk7XFxuQEAgLTg0NSw2ICs4NTIsMTEgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxuIFxcbitcXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90b2NvbCwgXFx1MDAyNmZsNCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlwX3J0X3B1dChydCk7XFxuK1xcdFxcdGdvdG8gdHhfZXJyb3I7XFxuK1xcdH1cXG4rXFxuIFxcdGlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCxcXG4gXFx0XFx0ICAgICAgZGYsICFuZXRfZXEodHVubmVsLVxcdTAwM2VuZXQsIGRldl9uZXQoZGV2KSksIDApO1xcbiBcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjA5LjU5MzA2Nzg4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUyMDAxODEwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3htaXRcIixcbiAgICBcImlwX21kX3R1bm5lbF94bWl0XCIsXG4gICAgXCJ0bmxfdXBkYXRlX3BtdHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBQTVRVIGNhbGN1bGF0aW9uIGFuZCB0dW5uZWwgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgSVAgdHVubmVsaW5nIHN1YnN5c3RlbSAobmV0L2lwdjQvaXBfdHVubmVsLmMpLiBJdCBzbmFwc2hvdHMgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyBjb25jdXJyZW50IGNoYW5nZWxpbmsgb3BlcmF0aW9ucywgZGVmZXJzIGVuY2Fwc3VsYXRpb24gaW4gaXBfdHVubmVsX3htaXQsIGFuZCBhY2NvdW50cyBmb3IgZW5jYXAgaGVhZGVyIGxlbmd0aCBpbiBQTVRVIHVwZGF0ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCB0dW5uZWwgZGV2aWNlcyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMTkzYTUxN2ZhZjcyMDE0OWVlOTI0ZWI1ZGFiN2UxZWNjYWY3MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjAxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNDQ3YjQzNWIxMGNjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTUxMiwxNCArNTEyLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG4gc3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGgsXG4tXHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZClcbitcdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxuK1x0XHRcdCAgICBpbnQgZW5jYXBfaGxlbilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHBrdF9zaXplO1xuIFx0aW50IG10dTtcbiBcbiBcdHR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC1cdTAwM2VobGVuO1xuLVx0cGt0X3NpemUgPSBza2ItXHUwMDNlbGVuIC0gdHVubmVsX2hsZW47XG4rXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gKyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW47XG4gXHRwa3Rfc2l6ZSAtPSBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcbiBcbiBcdGlmIChkZikge1xuQEAgLTYyOSw3ICs2MzAsNyBAQCB2b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXHUwMDNldHVuX2ZsYWdzKSlcbiBcdFx0ZGYgPSBodG9ucyhJUF9ERik7XG4gXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgdHVubmVsX2hsZW4sXG4tXHRcdFx0ICAgIGtleS1cdTAwM2V1LmlwdjQuZHN0LCB0cnVlKSkge1xuK1x0XHRcdCAgICBrZXktXHUwMDNldS5pcHY0LmRzdCwgdHJ1ZSwgMCkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC02NzEsNiArNjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gTlVMTDtcbitcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbiBcdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xuIFx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTtcdC8qIFRoZSBleHRyYSBoZWFkZXIgc3BhY2UgbmVlZGVkICovXG4gXHRzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7XHRcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG5AQCAtNjgwLDYgKzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJvb2wgbWQgPSBmYWxzZTtcbiBcdGJvb2wgY29ubmVjdGVkO1xuIFx0aW50IGVycl9jb3VudDtcbitcdGludCBlbmNhcF9obGVuO1xuIFx0dTggdG9zLCB0dGw7XG4gXHRfX2JlMzIgZHN0O1xuIFx0X19iZTE2IGRmO1xuQEAgLTc2NSw3ICs3NjgsMTAgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVx1MDAzZXBhcm1zLmxpbmspLFxuIFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XG4gXG4tXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2dHVubmVsLVx1MDAzZWVuY2FwLCBcdTAwMjZwcm90b2NvbCwgXHUwMDI2Zmw0KSBcdTAwM2MgMClcbitcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4rXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cdTAwM2VlbmNhcCk7XG4rXHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbitcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbkBAIC04MDMsNyArODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWlnbm9yZV9kZilcbiBcdFx0ZGYgfD0gKGlubmVyX2lwaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfREYpKTtcbiBcbi1cdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHtcbitcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSxcbitcdFx0XHQgICAgZW5jYXBfaGxlbikpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC04MzQsNyArODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKVxuLVx0XHRcdCsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gKyBpcF9lbmNhcF9obGVuKFx1MDAyNnR1bm5lbC1cdTAwM2VlbmNhcCk7XG4rXHRcdFx0KyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiArIGVuY2FwX2hsZW47XG4gXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuQEAgLTg0NSw2ICs4NTIsMTEgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gXG4rXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbitcdFx0aXBfcnRfcHV0KHJ0KTtcbitcdFx0Z290byB0eF9lcnJvcjtcbitcdH1cbitcbiBcdGlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCxcbiBcdFx0ICAgICAgZGYsICFuZXRfZXEodHVubmVsLVx1MDAzZW5ldCwgZGV2X25ldChkZXYpKSwgMCk7XG4gXHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTowOS41OTMwNjk3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTY0NTkzODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgVHVubmVsIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCdzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIGBpcF90dW5uZWxfeG1pdGAsIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gUmlnaHQsIHRoZSBtYWluIHRoaW5nIGlzIHRoaXMgbmV3IGBlbmNhcF9obGVuYCBhcmd1bWVudCBiZWluZyBpbnRyb2R1Y2VkIGludG8gYHRubF91cGRhdGVfcG10dWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwYWNrZXQgc2l6ZSBmb3IgUGF0aCBNVFUgZGlzY292ZXJ5LiBJbiBgdG5sX3VwZGF0ZV9wbXR1YCwgdGhlIGNhbGN1bGF0aW9uIGlzIG5vdyBgcGt0X3NpemUgPSBza2ItXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlbiwgbG9va2luZyBhdCBgaXBfdHVubmVsX3htaXRgLCBJIHNlZSB0aGV5J3JlIGdyYWJiaW5nIGBlbmNhcF9obGVuYCBmcm9tIGB0dW5uZWwtXHUwMDNlZW5jYXBgLiBTbWFydCB0byB1c2UgYGRhdGFfcmFjZWAgdGhlcmUsIG1pbmltaXplcyBsb2NraW5nIG92ZXJoZWFkLiBUaGUgZXJyb3IgY2hlY2sgYGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKSBnb3RvIHR4X2Vycm9yO2AgaXMgY3J1Y2lhbC4gVGhleSBhcmUgYWxzbyBkZWZlcnJpbmcgYGlwX3R1bm5lbF9lbmNhcGAgdW50aWwgYWZ0ZXIgYHNrYl9jb3dfaGVhZGAgYW5kIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYC4gVGhpcyBzaG91bGQgaW1wcm92ZSBlZmZpY2llbmN5LiBNb3N0IGltcG9ydGFudGx5LCBgZW5jYXBfaGxlbmAgaXMgcGFzc2VkIG9uIHRvIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgaXMgYWxzbyB1c2VkIGluIGBtYXhfaGVhZHJvb21gLiBUaGlzIGlzIGFsbCBsb2dpY2FsbHkgY29ubmVjdGVkLCB0aGUgaGVhZGVyIHNpemUgaXMgdXNlZCBpbiBzZXZlcmFsIHBsYWNlcy5cblxuSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyBvdGhlciBmdW5jdGlvbnMgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIEFuZCBvZiBjb3Vyc2UsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGJ1aWxkIGlzc3VlcyBvciB1bmV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjE3LjE1NzY2NTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDgyNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBfVFVOTkVMfG9iai1cXFxcJFxcXFwoQ09ORklHX05FVF9JUF9UVU5ORUxcXFxcKXxpcF90dW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTY6XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxcbm5ldC9pcHY0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbm5ldC9pcHY0L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2NC5vXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTEyLSNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfdHVubmVscy5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTQtI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAyLVxcbm5ldC9pcHY0L2FmX2luZXQuYzoyMDAzOlxcdGlwX3R1bm5lbF9jb3JlX2luaXQoKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMjAwNC1cXG4tLVxcbm5ldC9pcHY0L2FycC5jLTExMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbm5ldC9pcHY0L2FycC5jOjExMzojaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2NC9hcnAuYy0xMTQtXFxuLS1cXG5uZXQvaXB2NC9mb3VfYnBmLmM9NDQ9X19icGZfa2Z1bmMgaW50IGJwZl9za2Jfc2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jLTQ3LVxcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xcbm5ldC9pcHY0L2ZvdV9icGYuYzo0ODpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9mb3VfYnBmLmMtNDktXFxuLS1cXG5uZXQvaXB2NC9mb3VfYnBmLmM9ODY9X19icGZfa2Z1bmMgaW50IGJwZl9za2JfZ2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jLTg5LVxcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xcbm5ldC9pcHY0L2ZvdV9icGYuYzo5MDpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9mb3VfYnBmLmMtOTEtXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkwMz1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGZvdV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MTY6c2l6ZV90IGZvdV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05MjA9RVhQT1JUX1NZTUJPTChmb3VfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MjI6c2l6ZV90IGd1ZV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjMte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05Mzg9RVhQT1JUX1NZTUJPTChndWVfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MzktXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTQxLVxcdFxcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05NTQ9RVhQT1JUX1NZTUJPTChfX2ZvdV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTU2OmludCBfX2d1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTk1Ny1cXHRcXHQgICAgICAgdTggKnByb3RvY29sLCBfX2JlMTYgKnNwb3J0LCBpbnQgdHlwZSlcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzItXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIHU4ICpwcm90b2NvbCwgX19iZTE2IHNwb3J0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGZvdV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNTEtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDY2LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA2NzpzdGF0aWMgaW50IGd1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz0xMDk2PXN0YXRpYyBpbnQgZ3VlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2MS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGZvdV9pcHR1bl9vcHMgPSB7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBndWVfaXB0dW5fb3BzID0ge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2OS1cXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTczLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3NS17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTc4OlxcdHJldCA9IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4My1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cXHRcXHRwcl9lcnIoXFxcImNhbid0IGFkZCBndWUgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XFx0XFx0aXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4OC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTkzLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTUte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NjpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwdHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTk3OlxcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTgtfVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjAxLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTIwMjpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDYtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwOC17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1Ni1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9mb3Vfb3BzKCk7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjU4LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTI2OT1zdGF0aWMgdm9pZCBfX2V4aXQgZm91X2Zpbmkodm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTI3MTpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2Zm91X25sX2ZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L2lwdjQvaXBfZ3JlLmM6MzY6I2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzctI2luY2x1ZGUgXFx1MDAzY25ldC9hcnAuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyMj1zdGF0aWMgaW50IGlwZ3JlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbyxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDA6XFx0c3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bjtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDEtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDMtXFx0Y29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLVxcdTAwM2Vjb2RlO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0O1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NC1cXHRpcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGljbXBfaGRyKHNrYikgKyAxKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTU6XFx0dCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgdHBpLVxcdTAwM2VmbGFncyxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYtXFx0XFx0XFx0ICAgICBpcGgtXFx1MDAzZWRhZGRyLCBpcGgtXFx1MDAzZXNhZGRyLCB0cGktXFx1MDAzZWtleSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTI3My1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjc0OlxcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjc1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0yNzYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yODAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MjgxOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0yODItXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yODctXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9OT19LRVlfQklULCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjg4OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMjg5LVxcdFxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yOTgtXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjk5OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzAwLVxcdFxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgdHBpLVxcdTAwM2VrZXkpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzE5LVxcdFxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKnBrdF9tZCwgKm1kO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjMyMDpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XFxubmV0L2lwdjQvaXBfZ3JlLmMtMzIxLVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmdoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzI0LVxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHBpLVxcdTAwM2VmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzI1OlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zMjYtXFx0XFx0XFx0dHVuX2lkID0ga2V5MzJfdG9fdHVubmVsX2lkKHRwaS1cXHUwMDNla2V5KTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNTUtXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNTY6XFx0XFx0aXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNTctXFx0XFx0cmV0dXJuIFBBQ0tFVF9SQ1ZEO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MzY2PXN0YXRpYyBpbnQgX19pcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjM2NzpcXHRcXHQgICAgICAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwgaW50IGhkcl9sZW4sIGJvb2wgcmF3X3Byb3RvKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM2OC17XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzAtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzcxOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzItXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzczLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjM3NDpcXHR0dW5uZWwgPSBpcF90dW5uZWxfbG9va3VwKGl0biwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHRwaS1cXHUwMDNlZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzc1LVxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgdHBpLVxcdTAwM2VrZXkpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzk4LVxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjM5OTpcXHRcXHRcXHRpcF90dW5uZWxfZmxhZ3NfYW5kKGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzLCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDAwLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDA2LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjQwNzpcXHRcXHRpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQwOC1cXHRcXHRyZXR1cm4gUEFDS0VUX1JDVkQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz00MTc9c3RhdGljIGludCBpcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDIwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjQyMTpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQyMi1cXHRpbnQgcmVzO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ3OS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgwOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDgxLVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy00ODItXFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgzOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4NC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ5MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0OTE6XFx0aXBfdHVubmVsX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHRubF9wYXJhbXMtXFx1MDAzZXByb3RvY29sKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy00OTItfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDk5PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MDEte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjUwMjpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUwMy1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTA0OlxcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTA1OlxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTA2LVxcdGludCB0dW5uZWxfaGxlbjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUwOS1cXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkgfHxcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MTA6XFx0XFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTExLVxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTI2LVxcdF9fc2V0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjUyNzpcXHRpcF90dW5uZWxfZmxhZ3NfYW5kKGZsYWdzLCB0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncywgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUyOC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTU0Mz1zdGF0aWMgdm9pZCBlcnNwYW5fZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU0NC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTQ1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTQ2LVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NDc6XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NDg6XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NDktXFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NTctXFx0aWYgKHVubGlrZWx5KCF0dW5faW5mbyB8fCAhKHR1bl9pbmZvLVxcdTAwM2Vtb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTU4OlxcdFxcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU1OS1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU2NS1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NjY6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NjctXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02Mjg9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9ncmUuYy02Mjkte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjYzMDpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo2MzE6XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYy02MzItXFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy02MzQtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NjM1OlxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSAhPSBBRl9JTkVUKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzNi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzOC1cXHRrZXkgPSBcXHUwMDI2aW5mby1cXHUwMDNla2V5O1xcbm5ldC9pcHY0L2lwX2dyZS5jOjYzOTpcXHRpcF90dW5uZWxfaW5pdF9mbG93KFxcdTAwMjZmbDQsIElQUFJPVE9fR1JFLCBrZXktXFx1MDAzZXUuaXB2NC5kc3QsIGtleS1cXHUwMDNldS5pcHY0LnNyYyxcXG5uZXQvaXB2NC9pcF9ncmUuYy02NDAtXFx0XFx0XFx0ICAgIHR1bm5lbF9pZF90b19rZXkzMihrZXktXFx1MDAzZXR1bl9pZCksXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02NTI9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY1NC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NjU1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNjU2LVxcdGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY3Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzo2Nzc6XFx0XFx0LyogaXBfdHVubmVsX3htaXQoKSBuZWVkcyBza2ItXFx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gZ3JlIGhlYWRlci4gKi9cXG5uZXQvaXB2NC9pcF9ncmUuYy02NzgtXFx0XFx0c2tiX3B1bGwoc2tiLCBwdWxsX2xlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03MDQ9c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03MDYte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjcwNzpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTcwOC1cXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03NTk9c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzYxLXtcXG5uZXQvaXB2NC9pcF9ncmUuYzo3NjI6XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy03NjMtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03ODg9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc4OS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkwOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNzkxLVxcdGludCBsZW47XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04MTc9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODE4OlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG5uZXQvaXB2NC9pcF9ncmUuYy04MTktXFx0XFx0XFx0ICAgIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MjMtXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI0OlxcdGlmICghaXBfdHVubmVsX2ZsYWdzX2lzX2JlMTZfY29tcGF0KHAtXFx1MDAzZWlfZmxhZ3MpIHx8XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI1OlxcdCAgICAhaXBfdHVubmVsX2ZsYWdzX2lzX2JlMTZfY29tcGF0KHAtXFx1MDAzZW9fZmxhZ3MpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgyNi1cXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI4OlxcdGlfZmxhZ3MgPSBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNihwLVxcdTAwM2VpX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4Mjk6XFx0b19mbGFncyA9IGlwX3R1bm5lbF9mbGFnc190b19iZTE2KHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTgzMC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg0MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDE6XFx0ZXJyID0gaXBfdHVubmVsX2N0bChkZXYsIHAsIGNtZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODQyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04NDUtXFx0aWYgKGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODQ2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg0Ny1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDg6XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODQ5OlxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLm9fZmxhZ3MsIHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg1MC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg1NS1cXHRpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODU2OlxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODU3LVxcdG9fZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VvX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4NTg6XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihwLVxcdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy04NTktXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04OTA9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg5My17XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODk0OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg5NS1cXHRzdHJ1Y3QgZ3JlX2Jhc2VfaGRyICpncmVoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTM3PXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzOC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM5OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTk0MC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk2Nj1zdGF0aWMgaW50IGlwZ3JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTY3LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzo5Njg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtOTY5LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy05ODEtXFx0Lm5kb19pbml0XFx0XFx0PSBpcGdyZV90dW5uZWxfaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODI6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTgzLSNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTg3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXBncmVfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODg6XFx0Lm5kb19zaW9jZGV2cHJpdmF0ZVxcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4OTpcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5MC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjk5MTpcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cXHQubmRvX3R1bm5lbF9jdGxcXHRcXHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDAwPXN0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwMy1cXHRkZXYtXFx1MDAzZXR5cGVcXHRcXHQ9IEFSUEhSRF9JUEdSRTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDA0OlxcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGlwZ3JlX25ldF9pZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwNS19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDA3PXN0YXRpYyB2b2lkIF9fZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwOC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAwOTpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAxMC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwMzY9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMzcte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMzg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDM5LVxcdHN0cnVjdCBpcGhkciAqaXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA2Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDY3OlxcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjgtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTA3NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzYte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNzc6XFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBOVUxMKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDc4LX1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwODA9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGdyZV9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4Mi17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTA4MzpcXHRpcF90dW5uZWxfZGVsZXRlX25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4NC19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDg2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBncmVfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwODktXFx0LmlkICAgPSBcXHUwMDI2aXBncmVfbmV0X2lkLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEwOTA6XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwOTEtfTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTExODI9c3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMTg0LVxcdFxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTE4NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4Ni1cXHRcXHRcXHRcXHRfX3UzMiAqZndtYXJrKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTExODcte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjExODg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4OS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyNTE9c3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEyNTQ6XFx0XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTUtXFx0XFx0XFx0XFx0X191MzIgKmZ3bWFyaylcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjU2LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjU3OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTgtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTI5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTMyOT1zdGF0aWMgaW50IGdyZV90YXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNC1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzM1OlxcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzYtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM5LVxcdC5uZG9faW5pdFxcdFxcdD0gZ3JlX3RhcF9pbml0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDA6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0MS1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGdyZV90YXBfeG1pdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDMtXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzQ0OlxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NS1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDY6XFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ3LVxcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcXHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzNTA9c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzUxLXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzUyOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM1My1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM2ODpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXQoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzY5LX1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcnNwYW5fbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzcyLVxcdC5uZG9faW5pdFxcdFxcdD0gZXJzcGFuX3R1bm5lbF9pbml0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzM6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3NC1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGVyc3Bhbl94bWl0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ni1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzc6XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3OTpcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODAtXFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODktXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzXFx0fD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MDpcXHRpcF90dW5uZWxfc2V0dXAoZGV2LCBncmVfdGFwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5MS19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzk0PWlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTUte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5OC1cXHRpZiAoaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk5OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDA6XFx0XFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQwMS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDE0LVxcdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cXHUwMDNldGI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQxNTpcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MTYtXFx0X191MzIgZndtYXJrID0gMDtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjUtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDI2OlxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFxcdTAwMjZwLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjctXFx0XFx0XFx0XFx0IGZ3bWFyayk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDMwPXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MzUtXFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDM2OlxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNy1cXHRfX3UzMiBmd21hcmsgPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0Ni1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDc6XFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0OC1cXHRcXHRcXHRcXHQgZndtYXJrKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTE9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU0LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDU1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTY6XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU3LVxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ2ODpcXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcXHUwMDI2cCwgZndtYXJrKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ3MS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDcyOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ3MzpcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzQtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDgwPXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODMte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0ODQ6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ4NTpcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODYtXFx0X191MzIgZndtYXJrID0gdC1cXHUwMDNlZndtYXJrO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk3OlxcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFxcdTAwMjZwLCBmd21hcmspO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToxNy4yMTExNTI2MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE1MzM0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBlbmFibGluZyBgaXBfdHVubmVsLmNgLiBNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUgZm9yIElQdjQuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgSVAgdHVubmVsaW5nIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCdzIHNlZSB3aGF0IEkgY2FuIGZpbmQuLi4gSSBleHBlY3QgdG8gc2VlIHNvbWUgb3B0aW9ucyByZWxhdGVkIHRvIHR1bm5lbGluZywgR1JFLCBJUElQLCBvciBzaW1pbGFyIHRlY2hub2xvZ2llcy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBzZXQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgdHVubmVsIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODcxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MTkuMzI2NDg4NzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9JUF9UVU5ORUx8TkVUX0lQR1JFfE5FVF9JUElQfE5FVF9GT1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTYxLVxcbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxcbm5ldC9pcHY0L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUDogdHVubmVsaW5nXFxcIlxcbm5ldC9pcHY0L0tjb25maWctMTY0LVxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWc6MTY1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4NS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4Njpjb25maWcgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMTg3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MTk0OlxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxubmV0L2lwdjQvS2NvbmZpZzoxOTU6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTE5Ni1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMDk6XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTAtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cXHRzZWxlY3QgWEZSTVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXFx0dHJpc3RhdGVcXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE5LVxcdGRlZmF1bHQgblxcbm5ldC9pcHY0L0tjb25maWctMzIwLVxcbm5ldC9pcHY0L0tjb25maWc6MzIxOmNvbmZpZyBORVRfRk9VXFxubmV0L2lwdjQvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozMzI6XFx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcXG5uZXQvaXB2NC9LY29uZmlnOjMzMzpcXHRzZWxlY3QgTkVUX0ZPVVxcbm5ldC9pcHY0L0tjb25maWctMzM0LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MTkuMzcyNDUxOTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MDIwMDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBUdW5uZWwgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBJUHY0IHR1bm5lbGluZyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgd29ya3MsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBsb2FkaW5nIHVwIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSByZWxldmFudCBjb2RlLlxuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBJIHJlbWVtYmVyLCBJIHRoaW5rIHRoZSBzZWN0aW9uIGJldHdlZW4gbGluZXMgNTAwIGFuZCA4NjAgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvci4uLiB3ZWxsLCBwcm9iYWJseSB0aGUgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHByb2Nlc3MsIG9yIG1heWJlIHRoZSBoYW5kbGluZyBvZiB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIGFuZCBkZWxldGlvbi4gVGhhdCByYW5nZSBmZWVscyBhYm91dCByaWdodCBmb3IgdGhlIG1lYXQgb2YgdGhlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB0aGUgYml0IEkgd2FudCB0byB1bmRlcnN0YW5kIGJldHRlci4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSB0dW5uZWwgcHJvdG9jb2wgYWN0dWFsbHkgbWFuaXB1bGF0ZXMgdGhlIElQIHBhY2tldHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGFudGljaXBhdGUgYSBnb29kIGNodW5rIG9mIHN3aXRjaCBzdGF0ZW1lbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb24gY2FsbHMgaW4gdGhlcmUuIFNob3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToyNC40MzI2NTQ1NDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XFxuIDUxMTpcXHRcXG4gNTEyOlxcdHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDUxMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcXG4gNTE0OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcXG4gNTE1OlxcdFxcdFxcdFxcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXFxuIDUxNjpcXHRcXHRcXHRcXHQgICAgaW50IGVuY2FwX2hsZW4pXFxuIDUxNzpcXHR7XFxuIDUxODpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA1MTk6XFx0XFx0aW50IHBrdF9zaXplO1xcbiA1MjA6XFx0XFx0aW50IG10dTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVxcdTAwM2VobGVuO1xcbiA1MjM6XFx0XFx0cGt0X3NpemUgPSBza2ItXFx1MDAzZWxlbiArIGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcXG4gNTI0OlxcdFxcdHBrdF9zaXplIC09IGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGlmIChkZikge1xcbiA1Mjc6XFx0XFx0XFx0bXR1ID0gZHN0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgLSAoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB0dW5uZWxfaGxlbik7XFxuIDUyODpcXHRcXHRcXHRtdHUgLT0gZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcXG4gNTI5OlxcdFxcdH0gZWxzZSB7XFxuIDUzMDpcXHRcXHRcXHRtdHUgPSBza2JfdmFsaWRfZHN0KHNrYikgPyBkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgOiBkZXYtXFx1MDAzZW10dTtcXG4gNTMxOlxcdFxcdH1cXG4gNTMyOlxcdFxcbiA1MzM6XFx0XFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcXG4gNTM0OlxcdFxcdFxcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xcbiA1Mzc6XFx0XFx0XFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXFx1MDAyNlxcdTAwMjZcXG4gNTM4OlxcdFxcdFxcdCAgICAoaW5uZXJfaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSkgXFx1MDAyNlxcdTAwMjZcXG4gNTM5OlxcdFxcdFxcdCAgICBtdHUgXFx1MDAzYyBwa3Rfc2l6ZSkge1xcbiA1NDA6XFx0XFx0XFx0XFx0aWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTtcXG4gNTQxOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDU0MjpcXHRcXHRcXHR9XFxuIDU0MzpcXHRcXHR9XFxuIDU0NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gNTQ1OlxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gNTQ2OlxcdFxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xcbiA1NDc6XFx0XFx0XFx0X19iZTMyIGRhZGRyO1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRcXHRydDYgPSBza2JfdmFsaWRfZHN0KHNrYikgPyBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKSA6XFxuIDU1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBOVUxMO1xcbiA1NTE6XFx0XFx0XFx0ZGFkZHIgPSBtZCA/IGRzdCA6IHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLmRhZGRyO1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRcXHRpZiAocnQ2IFxcdTAwMjZcXHUwMDI2IG10dSBcXHUwMDNjIGRzdF9tdHUoc2tiX2RzdChza2IpKSBcXHUwMDI2XFx1MDAyNlxcbiA1NTQ6XFx0XFx0XFx0XFx0ICAgbXR1IFxcdTAwM2U9IElQVjZfTUlOX01UVSkge1xcbiA1NTU6XFx0XFx0XFx0XFx0aWYgKChkYWRkciBcXHUwMDI2XFx1MDAyNiAhaXB2NF9pc19tdWx0aWNhc3QoZGFkZHIpKSB8fFxcbiA1NTY6XFx0XFx0XFx0XFx0ICAgIHJ0Ni1cXHUwMDNlcnQ2aV9kc3QucGxlbiA9PSAxMjgpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdHJ0Ni1cXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XFxuIDU1ODpcXHRcXHRcXHRcXHRcXHRkc3RfbWV0cmljX3NldChza2JfZHN0KHNrYiksIFJUQVhfTVRVLCBtdHUpO1xcbiA1NTk6XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0fVxcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSBcXHUwMDI2XFx1MDAyNiBtdHUgXFx1MDAzZT0gSVBWNl9NSU5fTVRVIFxcdTAwMjZcXHUwMDI2XFxuIDU2MzpcXHRcXHRcXHRcXHRcXHRcXHRtdHUgXFx1MDAzYyBwa3Rfc2l6ZSkge1xcbiA1NjQ6XFx0XFx0XFx0XFx0aWNtcHY2X25kb19zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0I2VuZGlmXFxuIDU2OTpcXHRcXHRyZXR1cm4gMDtcXG4gNTcwOlxcdH1cXG4gNTcxOlxcdFxcbiA1NzI6XFx0dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA1NzM6XFx0XFx0XFx0ICAgICAgIHU4IHByb3RvLCBpbnQgdHVubmVsX2hsZW4pXFxuIDU3NDpcXHR7XFxuIDU3NTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA1NzY6XFx0XFx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuIDU3NzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xcbiA1Nzg6XFx0XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG4gNTc5OlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xcbiA1ODA6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMO1xcbiA1ODE6XFx0XFx0c3RydWN0IGZsb3dpNCBmbDQ7XFxuIDU4MjpcXHRcXHRfX2JlMTYgZGYgPSAwO1xcbiA1ODM6XFx0XFx0dTggdG9zLCB0dGw7XFxuIDU4NDpcXHRcXHRib29sIHVzZV9jYWNoZTtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dHVuX2luZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG4gNTg3OlxcdFxcdGlmICh1bmxpa2VseSghdHVuX2luZm8gfHwgISh0dW5faW5mby1cXHUwMDNlbW9kZSBcXHUwMDI2IElQX1RVTk5FTF9JTkZPX1RYKSB8fFxcbiA1ODg6XFx0XFx0XFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXFxuIDU4OTpcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToyNC40MzI4MTU1OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjExNTUwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZW1haW5pbmcgY29kZSB3aXRoaW4gYGlwX3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIHNlY3Rpb24gb2YgdGhlIGNvZGUgdG8gcHJvcGVybHkgYXNzZXNzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MjUuNjQ0MzcwMzQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdH0gZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbiA3NjE6XFx0XFx0XFx0XFx0dG9zID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilpbm5lcl9pcGgpO1xcbiA3NjI6XFx0XFx0XFx0XFx0Y29ubmVjdGVkID0gZmFsc2U7XFxuIDc2MzpcXHRcXHRcXHR9XFxuIDc2NDpcXHRcXHR9XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdGlwX3R1bm5lbF9pbml0X2Zsb3coXFx1MDAyNmZsNCwgcHJvdG9jb2wsIGRzdCwgdG5sX3BhcmFtcy1cXHUwMDNlc2FkZHIsXFxuIDc2NzpcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSwgdG9zIFxcdTAwMjYgSU5FVF9EU0NQX01BU0ssXFxuIDc2ODpcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXFx1MDAzZXBhcm1zLmxpbmspLFxcbiA3Njk6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXFxuIDc3MjpcXHRcXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cXHUwMDNlZW5jYXApO1xcbiA3NzM6XFx0XFx0ZW5jYXBfaGxlbiA9IGlwX2VuY2FwX2hsZW4oXFx1MDAyNmlwZW5jYXApO1xcbiA3NzQ6XFx0XFx0aWYgKGVuY2FwX2hsZW4gXFx1MDAzYyAwKVxcbiA3NzU6XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0aWYgKGNvbm5lY3RlZCBcXHUwMDI2XFx1MDAyNiBtZCkge1xcbiA3Nzg6XFx0XFx0XFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCB0dW5faW5mbyk7XFxuIDc3OTpcXHRcXHRcXHRpZiAodXNlX2NhY2hlKVxcbiA3ODA6XFx0XFx0XFx0XFx0cnQgPSBkc3RfY2FjaGVfZ2V0X2lwNChcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWRzdF9jYWNoZSxcXG4gNzgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zmw0LnNhZGRyKTtcXG4gNzgyOlxcdFxcdH0gZWxzZSB7XFxuIDc4MzpcXHRcXHRcXHRydCA9IGNvbm5lY3RlZCA/IGRzdF9jYWNoZV9nZXRfaXA0KFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWRzdF9jYWNoZSxcXG4gNzg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmbDQuc2FkZHIpIDogTlVMTDtcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0aWYgKCFydCkge1xcbiA3ODg6XFx0XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4gNzkxOlxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9jYXJyaWVyX2Vycm9ycyk7XFxuIDc5MjpcXHRcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiA3OTM6XFx0XFx0XFx0fVxcbiA3OTQ6XFx0XFx0XFx0aWYgKHVzZV9jYWNoZSlcXG4gNzk1OlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA0KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCxcXG4gNzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgZmw0LnNhZGRyKTtcXG4gNzk3OlxcdFxcdFxcdGVsc2UgaWYgKCFtZCBcXHUwMDI2XFx1MDAyNiBjb25uZWN0ZWQpXFxuIDc5ODpcXHRcXHRcXHRcXHRkc3RfY2FjaGVfc2V0X2lwNChcXHUwMDI2dHVubmVsLVxcdTAwM2Vkc3RfY2FjaGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0LFxcbiA3OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBmbDQuc2FkZHIpO1xcbiA4MDA6XFx0XFx0fVxcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5kZXYgPT0gZGV2KSB7XFxuIDgwMzpcXHRcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiA4MDQ6XFx0XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIGNvbGxpc2lvbnMpO1xcbiA4MDU6XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcbiA4MDg6XFx0XFx0ZGYgPSB0bmxfcGFyYW1zLVxcdTAwM2VmcmFnX29mZjtcXG4gODA5OlxcdFxcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNiAhdHVubmVsLVxcdTAwM2VpZ25vcmVfZGYpXFxuIDgxMDpcXHRcXHRcXHRkZiB8PSAoaW5uZXJfaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSxcXG4gODEzOlxcdFxcdFxcdFxcdCAgICBlbmNhcF9obGVuKSkge1xcbiA4MTQ6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODE1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDgxNjpcXHRcXHR9XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdGVycl9jb3VudCA9IFJFQURfT05DRSh0dW5uZWwtXFx1MDAzZWVycl9jb3VudCk7XFxuIDgxOTpcXHRcXHRpZiAoZXJyX2NvdW50IFxcdTAwM2UgMCkge1xcbiA4MjA6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfdGltZSkgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7XFxuIDgyMjpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX2NvdW50LCBlcnJfY291bnQgLSAxKTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0XFx0XFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xcbiA4MjU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODI2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfY291bnQsIDApO1xcbiA4Mjc6XFx0XFx0XFx0fVxcbiA4Mjg6XFx0XFx0fVxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHR0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaW5uZXJfaXBoLCBza2IpO1xcbiA4MzE6XFx0XFx0dHRsID0gdG5sX3BhcmFtcy1cXHUwMDNldHRsO1xcbiA4MzI6XFx0XFx0aWYgKHR0bCA9PSAwKSB7XFxuIDgzMzpcXHRcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxuIDgzNDpcXHRcXHRcXHRcXHR0dGwgPSBpbm5lcl9pcGgtXFx1MDAzZXR0bDtcXG4gODM1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA4MzY6XFx0XFx0XFx0ZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcXG4gODM3OlxcdFxcdFxcdFxcdHR0bCA9ICgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilpbm5lcl9pcGgpLVxcdTAwM2Vob3BfbGltaXQ7XFxuIDgzODpcXHQjZW5kaWZcXG4gODM5OlxcdFxcdFxcdGVsc2VcXG4gODQwOlxcdFxcdFxcdFxcdHR0bCA9IGlwNF9kc3RfaG9wbGltaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiA4NDE6XFx0XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKVxcbiA4NDQ6XFx0XFx0XFx0XFx0KyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gKyBlbmNhcF9obGVuO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xcbiA4NDc6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODQ4OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9kcm9wcGVkKTtcXG4gODQ5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA4NTA6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NTE6XFx0XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKGlwX3R1bm5lbF9lbmNhcChza2IsIFxcdTAwMjZpcGVuY2FwLCBcXHUwMDI2cHJvdG9jb2wsIFxcdTAwMjZmbDQpIFxcdTAwM2MgMCkge1xcbiA4NTY6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODU3OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDg1ODpcXHRcXHR9XFxuIDg1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MjUuNjQ0NTgxMDU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzcwNTAzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJUCBUdW5uZWxpbmcgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyAqY29yZSogdG8gdGhlIGtlcm5lbCdzIElQIHR1bm5lbGluZyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgR1JFLCBJUElQLCBhbmQgc28gb24g4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgYGlwZ3JlYCBhbmQgYGlwaXBgLiAgSW1wb3J0YW50bHksIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIFRoZSBmYWN0IHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIFRSVUUgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGF0IGNvbmZpcm1zIG91ciBodW5jaDogd2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIHRob3JvdWdobHkuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGFyZWFzIG9mIGdyZWF0ZXN0IGludGVyZXN0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3ltYm9scywgYW5kIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkLiAgYGlwX3R1bm5lbF94bWl0YCwgYHRubF91cGRhdGVfcG10dWAsIGFuZCBgaXBfbWRfdHVubmVsX3htaXRgIGFyZSB0aGUgaW1tZWRpYXRlIHRhcmdldHMuIGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgYXJlICpleHBvcnRlZCosIG1lYW5pbmcgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGBFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdClgIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoaXBfbWRfdHVubmVsX3htaXQpYCBjb25maXJtIHRoaXMuICBgdG5sX3VwZGF0ZV9wbXR1YCwgYWx0aG91Z2ggc3RhdGljLCBpcyBhbHNvIGludGVyZXN0aW5nIHNpbmNlIGl0IGdldHMgY2FsbGVkIGJ5IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAuIFRoZSBmYWN0IHRoYXQgYHRubF91cGRhdGVfcG10dWAgaXMgKm1vZGlmaWVkKiBpcyBkZWZpbml0ZWx5IGEgcmVkIGZsYWcuICBUaGlzIHN1Z2dlc3RzIHRoYXQgd2hhdGV2ZXIgaXMgaGFwcGVuaW5nIGR1cmluZyBQTVRVIHVwZGF0ZXMsIHNwZWNpZmljYWxseSB3aGVuIGNhbGxlZCB3aXRoaW4gdGhlIHhtaXQgcGF0aHMsIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS5cblxuRmluYWxseSwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuICBMb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgYENPTkZJR19ORVRfSVBfVFVOTkVMYCBpcyB0cmlzdGF0ZSBhbmQgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19ORVRfSVBJUGAsIGV0Yy4gIE9mIGNvdXJzZSwgYENPTkZJR19JTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGVudGlyZSBgbmV0L2lwdjRgIHN1YnRyZWUuICBJdCdzIHVzZWZ1bCB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHNlbGVjdCBgTkVUX0lQX1RVTk5FTGAgYXJlIGtub3duLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBmdXp6aW5nIGNhbXBhaWducyBhbmQgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIGltcGFjdC4gV2Ugbm93IGhhdmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozMC43MjE2MzQzNTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODMyNjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQX1RVTk5FTHxzZWxlY3QgTkVUX0lQX1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjQtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTE2Ni1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4MD1jb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4NS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4Njpjb25maWcgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMTg3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE5Mj1jb25maWcgTkVUX0lQR1JFXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5NC1cXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWc6MTk1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0xOTYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cXHRzZWxlY3QgWEZSTVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXFx0dHJpc3RhdGVcXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE5LVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnOjE1MzpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTU0LVxcdHNlbGVjdCBYRlJNXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE2Mj1jb25maWcgSVBWNl9TSVRcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTY0LVxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTY1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNjYtXFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjEwPWNvbmZpZyBJUFY2X0dSRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMTItXFx0c2VsZWN0IElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIxNC1cXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozMC44Mjk5NjY0ODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4MzAyMDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgSVAgdHVubmVscyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IEtjb25maWcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGVpdGhlciBgTkVUX0lQX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBvciBgTkVUX0lQSVBgIGlzIGNydWNpYWwuIFRoZSBgTkVUX0lQX1RVTk5FTGAgc3ltYm9sIGRpcmVjdGx5IGxpbmtzIHRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgd2hlcmUgYGlwX3R1bm5lbC5vYCBpcyBidWlsdC4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHdoaWNoIGxldmVyYWdlcyBlbmNhcHN1bGF0aW9uLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayBgTkVUX0ZPVWAgdG8gZW5zdXJlIGl0LCBhbG9uZyB3aXRoIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBpcyBhY2NvdW50ZWQgZm9yLlxuXG5JJ3ZlIGdvdCB0aGUgcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBhbmQgdGhlIGtleSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRfSVBfVFVOTkVMYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBJUGAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC5cblxuVGhlIGZvY3VzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmUgb24gYEZvY3VzU3ltYm9sc2A6IGBpcF90dW5uZWxfeG1pdGAsIGBpcF9tZF90dW5uZWxfeG1pdGAsIGFuZCBgdG5sX3VwZGF0ZV9wbXR1YC5cblxuSSdtIG1ha2luZyBzdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1ha2Ugc2Vuc2UgaW4gcmVsYXRpb24gdG8gb25lIGFub3RoZXIuIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgY2hlY2ssIHRvIGVuc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhY3R1YWxseSBhIHN5bWJvbCBpbiBgaXBfdHVubmVsLm9gLCB1bmxlc3MsIG9mIGNvdXJzZSwgaXQncyBpbmxpbmVkLiBFdmVuIGlmIGl0J3MgaW5saW5lZCwgSSdtIGNvbmZpZGVudCB0aGF0IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgd2lsbCBiZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LlxuXG5Pa2F5LCB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5MiwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MzQuNzEyOTg5NzAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTYyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF94bWl0XCIsXG4gICAgXCJpcF9tZF90dW5uZWxfeG1pdFwiLFxuICAgIFwidG5sX3VwZGF0ZV9wbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBfVFVOTkVMXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBfbWRfdHVubmVsX3htaXRcIixcbiAgICBcInRubF91cGRhdGVfcG10dVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjM0Ljc5MzI1MzI5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MjQ0Mjg5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozNC43OTM3MzU0MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTQyMzk0MTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgYW5kIFBNVFUvaGVhZHJvb20gY2FsY3VsYXRpb25zIGluIElQdjQgdHVubmVsIHRyYW5zbWlzc2lvbiAoaXBfdHVubmVsX3htaXQgYW5kIHRubF91cGRhdGVfcG10dSkuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxcbjIuIEl0IGFjY291bnRzIGZvciBgZW5jYXBfaGxlbmAgaW4gYHRubF91cGRhdGVfcG10dWAgYW5kIGRlZmVycyBjYWxsaW5nIGBpcF90dW5uZWxfZW5jYXAoKWAgdW50aWwgYWZ0ZXIgc2tiIGhlYWRyb29tIGlzIGV4cGFuZGVkIHdpdGggYHNrYl9jb3dfaGVhZCgpYC5cXG5cXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcXG4tIE1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSwgc2tiIGJvdW5kcywgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi40NDdiNDM1YjEwY2NhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtNTEyLDE0ICs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcbiBzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcbi1cdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kKVxuK1x0XHRcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXG4rXHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgcGt0X3NpemU7XG4gXHRpbnQgbXR1O1xuIFxuIFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4tXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gLSB0dW5uZWxfaGxlbjtcbitcdHBrdF9zaXplID0gc2tiLVx1MDAzZWxlbiArIGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcbiBcdHBrdF9zaXplIC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIFxuIFx0aWYgKGRmKSB7XG5AQCAtNjI5LDcgKzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpKVxuIFx0XHRkZiA9IGh0b25zKElQX0RGKTtcbiBcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCB0dW5uZWxfaGxlbixcbi1cdFx0XHQgICAga2V5LVx1MDAzZXUuaXB2NC5kc3QsIHRydWUpKSB7XG4rXHRcdFx0ICAgIGtleS1cdTAwM2V1LmlwdjQuZHN0LCB0cnVlLCAwKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuQEAgLTY3MSw2ICs2NzIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBOVUxMO1xuK1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1x0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cbiBcdHN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDtcdFx0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbkBAIC02ODAsNiArNjgyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Ym9vbCBtZCA9IGZhbHNlO1xuIFx0Ym9vbCBjb25uZWN0ZWQ7XG4gXHRpbnQgZXJyX2NvdW50O1xuK1x0aW50IGVuY2FwX2hsZW47XG4gXHR1OCB0b3MsIHR0bDtcbiBcdF9fYmUzMiBkc3Q7XG4gXHRfX2JlMTYgZGY7XG5AQCAtNzY1LDcgKzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiBcbi1cdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKVxuK1x0LyogU25hcHNob3QgZW5jYXA7IGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gdXBkYXRlIGl0IGNvbmN1cnJlbnRseS4gKi9cbitcdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbitcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuK1x0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoY29ubmVjdGVkIFx1MDAyNlx1MDAyNiBtZCkge1xuQEAgLTgwMyw3ICs4MDksOCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlaWdub3JlX2RmKVxuIFx0XHRkZiB8PSAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpO1xuIFxuLVx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlKSkge1xuK1x0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuK1x0XHRcdCAgICBlbmNhcF9obGVuKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuQEAgLTgzNCw3ICs4NDEsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpXG4tXHRcdFx0KyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiArIGlwX2VuY2FwX2hsZW4oXHUwMDI2dHVubmVsLVx1MDAzZWVuY2FwKTtcbitcdFx0XHQrIHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7XG4gXHRcdGlwX3J0X3B1dChydCk7XG5AQCAtODQ1LDYgKzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcbiBcbitcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90b2NvbCwgXHUwMDI2Zmw0KSBcdTAwM2MgMCkge1xuK1x0XHRpcF9ydF9wdXQocnQpO1xuK1x0XHRnb3RvIHR4X2Vycm9yO1xuK1x0fVxuK1xuIFx0aXB0dW5uZWxfeG1pdChOVUxMLCBydCwgc2tiLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgcHJvdG9jb2wsIHRvcywgdHRsLFxuIFx0XHQgICAgICBkZiwgIW5ldF9lcSh0dW5uZWwtXHUwMDNlbmV0LCBkZXZfbmV0KGRldikpLCAwKTtcbiBcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjM0Ljc5MzczNjc4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkyMzk0Mzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBGdXp6aW5nIENvbnNpZGVyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBqdXN0aWZpZXMgZmlyaW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTGV0J3MgZGlnIGluLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHBhdGNoIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsICp3aHkqLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBzYWZldHkuXG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGFuZCBtb3N0IGVmZmljaWVudCDigJMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gS25vd2luZyB0aGF0IGNvZGUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIGZ1enppbmcgaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBhbG9uZSBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDUuNzE3NjgzNjE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcdFxcdGlmICghbWQpXFxuIDc1MTpcXHRcXHRcXHRcXHRjb25uZWN0ZWQgPSBmYWxzZTtcXG4gNzUyOlxcdFxcdH1cXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0dG9zID0gdG5sX3BhcmFtcy1cXHUwMDNldG9zO1xcbiA3NTU6XFx0XFx0aWYgKHRvcyBcXHUwMDI2IDB4MSkge1xcbiA3NTY6XFx0XFx0XFx0dG9zIFxcdTAwMjY9IH4weDE7XFxuIDc1NzpcXHRcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHtcXG4gNzU4OlxcdFxcdFxcdFxcdHRvcyA9IGlubmVyX2lwaC1cXHUwMDNldG9zO1xcbiA3NTk6XFx0XFx0XFx0XFx0Y29ubmVjdGVkID0gZmFsc2U7XFxuIDc2MDpcXHRcXHRcXHR9IGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gNzYxOlxcdFxcdFxcdFxcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKTtcXG4gNzYyOlxcdFxcdFxcdFxcdGNvbm5lY3RlZCA9IGZhbHNlO1xcbiA3NjM6XFx0XFx0XFx0fVxcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpcF90dW5uZWxfaW5pdF9mbG93KFxcdTAwMjZmbDQsIHByb3RvY29sLCBkc3QsIHRubF9wYXJhbXMtXFx1MDAzZXNhZGRyLFxcbiA3Njc6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMub19rZXksIHRvcyBcXHUwMDI2IElORVRfRFNDUF9NQVNLLFxcbiA3Njg6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VwYXJtcy5saW5rKSxcXG4gNzY5OlxcdFxcdFxcdFxcdCAgICB0dW5uZWwtXFx1MDAzZWZ3bWFyaywgc2tiX2dldF9oYXNoKHNrYiksIDApO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHQvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqL1xcbiA3NzI6XFx0XFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXFx1MDAzZWVuY2FwKTtcXG4gNzczOlxcdFxcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFxcdTAwMjZpcGVuY2FwKTtcXG4gNzc0OlxcdFxcdGlmIChlbmNhcF9obGVuIFxcdTAwM2MgMClcXG4gNzc1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcdGlmIChjb25uZWN0ZWQgXFx1MDAyNlxcdTAwMjYgbWQpIHtcXG4gNzc4OlxcdFxcdFxcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgdHVuX2luZm8pO1xcbiA3Nzk6XFx0XFx0XFx0aWYgKHVzZV9jYWNoZSlcXG4gNzgwOlxcdFxcdFxcdFxcdHJ0ID0gZHN0X2NhY2hlX2dldF9pcDQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsXFxuIDc4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZsNC5zYWRkcik7XFxuIDc4MjpcXHRcXHR9IGVsc2Uge1xcbiA3ODM6XFx0XFx0XFx0cnQgPSBjb25uZWN0ZWQgPyBkc3RfY2FjaGVfZ2V0X2lwNChcXHUwMDI2dHVubmVsLVxcdTAwM2Vkc3RfY2FjaGUsXFxuIDc4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zmw0LnNhZGRyKSA6IE5VTEw7XFxuIDc4NTpcXHRcXHR9XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdGlmICghcnQpIHtcXG4gNzg4OlxcdFxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuIDc5MTpcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfY2Fycmllcl9lcnJvcnMpO1xcbiA3OTI6XFx0XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gNzkzOlxcdFxcdFxcdH1cXG4gNzk0OlxcdFxcdFxcdGlmICh1c2VfY2FjaGUpXFxuIDc5NTpcXHRcXHRcXHRcXHRkc3RfY2FjaGVfc2V0X2lwNChcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWRzdF9jYWNoZSwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIGZsNC5zYWRkcik7XFxuIDc5NzpcXHRcXHRcXHRlbHNlIGlmICghbWQgXFx1MDAyNlxcdTAwMjYgY29ubmVjdGVkKVxcbiA3OTg6XFx0XFx0XFx0XFx0ZHN0X2NhY2hlX3NldF9pcDQoXFx1MDAyNnR1bm5lbC1cXHUwMDNlZHN0X2NhY2hlLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCxcXG4gNzk5OlxcdFxcdFxcdFxcdFxcdFxcdCAgZmw0LnNhZGRyKTtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2ID09IGRldikge1xcbiA4MDM6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODA0OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCBjb2xsaXNpb25zKTtcXG4gODA1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDgwNjpcXHRcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdGRmID0gdG5sX3BhcmFtcy1cXHUwMDNlZnJhZ19vZmY7XFxuIDgwOTpcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlaWdub3JlX2RmKVxcbiA4MTA6XFx0XFx0XFx0ZGYgfD0gKGlubmVyX2lwaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9ERikpO1xcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXFxuIDgxMzpcXHRcXHRcXHRcXHQgICAgZW5jYXBfaGxlbikpIHtcXG4gODE0OlxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDgxNTpcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiA4MTY6XFx0XFx0fVxcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRlcnJfY291bnQgPSBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfY291bnQpO1xcbiA4MTk6XFx0XFx0aWYgKGVycl9jb3VudCBcXHUwMDNlIDApIHtcXG4gODIwOlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX3RpbWUpICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkge1xcbiA4MjI6XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0dW5uZWwtXFx1MDAzZWVycl9jb3VudCwgZXJyX2NvdW50IC0gMSk7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdFxcdFxcdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcXG4gODI1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDgyNjpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX2NvdW50LCAwKTtcXG4gODI3OlxcdFxcdFxcdH1cXG4gODI4OlxcdFxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0dG9zID0gaXBfdHVubmVsX2Vjbl9lbmNhcCh0b3MsIGlubmVyX2lwaCwgc2tiKTtcXG4gODMxOlxcdFxcdHR0bCA9IHRubF9wYXJhbXMtXFx1MDAzZXR0bDtcXG4gODMyOlxcdFxcdGlmICh0dGwgPT0gMCkge1xcbiA4MzM6XFx0XFx0XFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA4MzQ6XFx0XFx0XFx0XFx0dHRsID0gaW5uZXJfaXBoLVxcdTAwM2V0dGw7XFxuIDgzNTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gODM2OlxcdFxcdFxcdGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuIDgzNzpcXHRcXHRcXHRcXHR0dGwgPSAoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKS1cXHUwMDNlaG9wX2xpbWl0O1xcbiA4Mzg6XFx0I2VuZGlmXFxuIDgzOTpcXHRcXHRcXHRlbHNlXFxuIDg0MDpcXHRcXHRcXHRcXHR0dGwgPSBpcDRfZHN0X2hvcGxpbWl0KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4gODQxOlxcdFxcdH1cXG4gODQyOlxcdFxcbiA4NDM6XFx0XFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXFx1MDAzZWRzdC5kZXYpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcilcXG4gODQ0OlxcdFxcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcXG4gODQ3OlxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDg0ODpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZHJvcHBlZCk7XFxuIDg0OTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDUuNzE3ODMxNDU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDcyOTgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHRubF91cGRhdGVfcG10dWAgaW4gQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHplcm8gaW4gb24gbGluZXMgNTEwLTU1MCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBgdG5sX3VwZGF0ZV9wbXR1YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBhZGp1c3RpbmcgUE1UVSB2YWx1ZXMgaW4gYSB0dW5uZWwgY29udGV4dCwgc28gdW5kZXJzdGFuZGluZyBpdHMgbG9naWMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFueSBNVFUtcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0dW5uZWwgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgaG93IGl0IGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgYW5kLCBlc3BlY2lhbGx5IGdpdmVuIG15IGJhY2tncm91bmQsIGhvdyBpdCBkZWFscyB3aXRoIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgYW55IHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSBhbGwgdGhlIFBNVFUgXCJtYWdpY1wiIGhhcHBlbnMuIEdpdmVuIHRoZSBjb2RlJ3MgY29tcGxleGl0eSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UgaGF2ZSBtdWx0aXBsZSB0dW5uZWwgaW5zdGFuY2VzLiBNeSBleHBlcnQgZXllIHdpbGwgYmUgbGFzZXItZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDcuOTY1MTMxMzU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0c3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTEzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxcbiA1MTQ6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxcbiA1MTU6XFx0XFx0XFx0XFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCxcXG4gNTE2OlxcdFxcdFxcdFxcdCAgICBpbnQgZW5jYXBfaGxlbilcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDUxOTpcXHRcXHRpbnQgcGt0X3NpemU7XFxuIDUyMDpcXHRcXHRpbnQgbXR1O1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHR0dW5uZWxfaGxlbiA9IG1kID8gdHVubmVsX2hsZW4gOiB0dW5uZWwtXFx1MDAzZWhsZW47XFxuIDUyMzpcXHRcXHRwa3Rfc2l6ZSA9IHNrYi1cXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xcbiA1MjQ6XFx0XFx0cGt0X3NpemUgLT0gZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcXG4gNTI1OlxcdFxcbiA1MjY6XFx0XFx0aWYgKGRmKSB7XFxuIDUyNzpcXHRcXHRcXHRtdHUgPSBkc3RfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAtIChzaXplb2Yoc3RydWN0IGlwaGRyKSArIHR1bm5lbF9obGVuKTtcXG4gNTI4OlxcdFxcdFxcdG10dSAtPSBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xcbiA1Mjk6XFx0XFx0fSBlbHNlIHtcXG4gNTMwOlxcdFxcdFxcdG10dSA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9tdHUoc2tiX2RzdChza2IpKSA6IGRldi1cXHUwMDNlbXR1O1xcbiA1MzE6XFx0XFx0fVxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxcbiA1MzQ6XFx0XFx0XFx0c2tiX2RzdF91cGRhdGVfcG10dV9ub19jb25maXJtKHNrYiwgbXR1KTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7XFxuIDUzNzpcXHRcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSBcXHUwMDI2XFx1MDAyNlxcbiA1Mzg6XFx0XFx0XFx0ICAgIChpbm5lcl9pcGgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfREYpKSBcXHUwMDI2XFx1MDAyNlxcbiA1Mzk6XFx0XFx0XFx0ICAgIG10dSBcXHUwMDNjIHBrdF9zaXplKSB7XFxuIDU0MDpcXHRcXHRcXHRcXHRpY21wX25kb19zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsIGh0b25sKG10dSkpO1xcbiA1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gNTQyOlxcdFxcdFxcdH1cXG4gNTQzOlxcdFxcdH1cXG4gNTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA1NDU6XFx0XFx0ZWxzZSBpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbiA1NDY6XFx0XFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XFxuIDU0NzpcXHRcXHRcXHRfX2JlMzIgZGFkZHI7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdFxcdHJ0NiA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpIDpcXG4gNTUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTEw7XFxuIDU1MTpcXHRcXHRcXHRkYWRkciA9IG1kID8gZHN0IDogdHVubmVsLVxcdTAwM2VwYXJtcy5pcGguZGFkZHI7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdFxcdGlmIChydDYgXFx1MDAyNlxcdTAwMjYgbXR1IFxcdTAwM2MgZHN0X210dShza2JfZHN0KHNrYikpIFxcdTAwMjZcXHUwMDI2XFxuIDU1NDpcXHRcXHRcXHRcXHQgICBtdHUgXFx1MDAzZT0gSVBWNl9NSU5fTVRVKSB7XFxuIDU1NTpcXHRcXHRcXHRcXHRpZiAoKGRhZGRyIFxcdTAwMjZcXHUwMDI2ICFpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHx8XFxuIDU1NjpcXHRcXHRcXHRcXHQgICAgcnQ2LVxcdTAwM2VydDZpX2RzdC5wbGVuID09IDEyOCkge1xcbiA1NTc6XFx0XFx0XFx0XFx0XFx0cnQ2LVxcdTAwM2VydDZpX2ZsYWdzIHw9IFJURl9NT0RJRklFRDtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdGRzdF9tZXRyaWNfc2V0KHNrYl9kc3Qoc2tiKSwgUlRBWF9NVFUsIG10dSk7XFxuIDU1OTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjQ3Ljk2NTI2ODQyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY4Njc2MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tbWl0IERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBjb21taXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgKndoYXQqLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHByb2JsZW0gdGhpcyBhZGRyZXNzZXMuIEknbSBsb29raW5nIGJleW9uZCB0aGUgY29kZTsgd2hhdCB3YXMgdGhlIHRyaWdnZXI/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBzeXN0ZW0/IFBlcmZvcm1hbmNlLCBzZWN1cml0eSwgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGlwX3R1bm5lbF9lbmNhcGAgYW5kIGBpcF9lbmNhcF9obGVuYCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIChvciB3aGF0ZXZlciB0aGlzIHNwZWNpZmljIHN5c3RlbSB1c2VzKS4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMsIGdpdmVuIHRoZWlyIG1lbnRpb24uIFRoZXkgYWxtb3N0IGNlcnRhaW5seSByZWxhdGUgdG8gc29tZSBmb3JtIG9mIElQIGVuY2Fwc3VsYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdHVubmVsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaGVyZSBhcmUgYWZmZWN0aW5nIHRob3NlIGZ1bmN0aW9ucy92YXJpYWJsZXMuIEFueSBtb2RpZmljYXRpb25zIHRvIHRob3NlIGFyZWFzIGFyZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBjaGFuZ2VzLiBBcmUgd2UgZGVhbGluZyB3aXRoIGhlYWRlciBzaXplIGlzc3Vlcz8gQW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGNoYW5nZXM/IEVuY3J5cHRpb24gY29uY2VybnM/IFdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBhcmUgdXNlZCwgYW5kIGhvdyBkb2VzIHRoaXMgdXBkYXRlIGludGVyYWN0PyBJdCBhbGwgYm9pbHMgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTo1MC4zMzM5NDY2MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjM2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2VuY2FwX2hsZW58aXBfdHVubmVsX2VuY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9mb3VfY29yZS5jPTkwMz1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGZvdV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MTY6c2l6ZV90IGZvdV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05MjA9RVhQT1JUX1NZTUJPTChmb3VfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MjI6c2l6ZV90IGd1ZV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjMte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05Mzg9RVhQT1JUX1NZTUJPTChndWVfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MzktXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTQxLVxcdFxcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05NTQ9RVhQT1JUX1NZTUJPTChfX2ZvdV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTU2OmludCBfX2d1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTk1Ny1cXHRcXHQgICAgICAgdTggKnByb3RvY29sLCBfX2JlMTYgKnNwb3J0LCBpbnQgdHlwZSlcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzItXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIHU4ICpwcm90b2NvbCwgX19iZTE2IHNwb3J0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGZvdV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNTEtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDY2LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA2NzpzdGF0aWMgaW50IGd1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz0xMDk2PXN0YXRpYyBpbnQgZ3VlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2MS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGZvdV9pcHR1bl9vcHMgPSB7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBndWVfaXB0dW5fb3BzID0ge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2OS1cXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTczLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3NS17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTc4OlxcdHJldCA9IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4My1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cXHRcXHRwcl9lcnIoXFxcImNhbid0IGFkZCBndWUgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XFx0XFx0aXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4OC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTkzLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTUte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NjpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwdHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTk3OlxcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTgtfVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjAxLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTIwMjpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDYtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwOC17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1Ni1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9mb3Vfb3BzKCk7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjU4LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTI2OT1zdGF0aWMgdm9pZCBfX2V4aXQgZm91X2Zpbmkodm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTI3MTpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2Zm91X25sX2ZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMjk2PXN0YXRpYyBib29sIGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEyOTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjk4LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5NjpcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktXFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMDpcXHRcXHRpbnQgZXJyID0gaXBfdHVubmVsX2VuY2FwX3NldHVwKHQsIFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0NTk6aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDYwLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnVtKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2NTpcXHRyZXR1cm4gIWNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ2Ni1cXHRcXHRcXHRcXHUwMDI2aXB0dW5fZW5jYXBzW251bV0sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzAtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDcxOmludCBpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3Mi1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG51bSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0Nzk6XFx0cmV0ID0gKGNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ4MC1cXHRcXHQgICAgICAgXFx1MDAyNmlwdHVuX2VuY2Fwc1tudW1dLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0ODc6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ4OTppbnQgaXBfdHVubmVsX2VuY2FwX3NldHVwKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDkwOlxcdFxcdFxcdCAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTEte1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDk1LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5NjpcXHRobGVuID0gaXBfZW5jYXBfaGxlbihpcGVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTctXFx0aWYgKGhsZW4gXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNTA5LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo1MTA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MTEtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz01NzI9dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjA1LVxcdGlmICghdHVubmVsX2hsZW4pXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjA2OlxcdFxcdHR1bm5lbF9obGVuID0gaXBfZW5jYXBfaGxlbihcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDctXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjA4OlxcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWVuY2FwLCBcXHUwMDI2cHJvdG8sIFxcdTAwMjZmbDQpIFxcdTAwM2MgMClcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDktXFx0XFx0Z290byB0eF9lcnJvcjtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY3MD12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzQtXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6Njc1OlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03NzItXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXFx1MDAzZWVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3NzM6XFx0ZW5jYXBfaGxlbiA9IGlwX2VuY2FwX2hsZW4oXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTc3NC1cXHRpZiAoZW5jYXBfaGxlbiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTQtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODU1OlxcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcXHUwMDI2aXBlbmNhcCwgXFx1MDAyNnByb3RvY29sLCBcXHUwMDI2Zmw0KSBcXHUwMDNjIDApIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTYtXFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNDEtXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo0Mjpjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBfX3JjdSAqXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00My1cXHRcXHRpcHR1bl9lbmNhcHNbTUFYX0lQVFVOX0VOQ0FQX09QU10gX19yZWFkX21vc3RseTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTEyOT1ib29sIGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjExMzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMTMxLXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00NzAtXFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG5uZXQvaXB2NC9pcGlwLmM6NDcxOlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG5uZXQvaXB2NC9pcGlwLmMtNDcyLVxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDc1LVxcdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2NC9pcGlwLmM6NDc2OlxcdFxcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY0L2lwaXAuYy00NzctXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDg3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDkxLVxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwaXAuYzo0OTI6XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xcbm5ldC9pcHY0L2lwaXAuYy00OTMtXFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00OTctXFx0aWYgKGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY0L2lwaXAuYzo0OTg6XFx0XFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjQvaXBpcC5jLTQ5OS1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTgxNz1zdGF0aWMgaW50IF9fdWRwNF9saWJfZXJyX2VuY2FwX25vX3NrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtODIyLVxcdFxcdGludCAoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKTtcXG5uZXQvaXB2NC91ZHAuYzo4MjM6XFx0XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKmVuY2FwO1xcbm5ldC9pcHY0L3VkcC5jLTgyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NTAuMzg3NTg3NDMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzMwODUyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRlZmluaXRpb25zLCBwdWxsaW5nIGZyb20gbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBuZXR3b3JrIGVuY2Fwc3VsYXRpb246XG5cbioqRGVjaXBoZXJpbmcgYGlwX2VuY2FwX2hsZW5gIGFuZCBgaXBfdHVubmVsX2VuY2FwYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAuICBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIG9mIElQIGVuY2Fwc3VsYXRpb24sIGFuZCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyAtIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIGFkZGluZyBoZWFkZXJzIGFuZCBmcmFtaW5nIGRhdGEgZm9yIHR1bm5lbGluZyBhbmQgb3RoZXIgZW5jYXBzdWxhdGlvbiBzY2VuYXJpb3MuIGBpcF9lbmNhcF9obGVuYCBpbW1lZGlhdGVseSBzaWduYWxzIFwiaGVhZGVyIGxlbmd0aFwiLiBJJ20gYmV0dGluZyB0aGlzIGlzIGEgdmFsdWUsIHByb2JhYmx5IGFuIGludGVnZXIsIHRoYXQgdGVsbHMgdGhlIElQIHN0YWNrICpleGFjdGx5KiBob3cgbWFueSBieXRlcyBuZWVkIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgb3JpZ2luYWwgcGFja2V0IHdoZW4gaXQncyBiZWluZyBlbmNhcHN1bGF0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSB1cHBlciBsYXllcnMgdG8gY2FsY3VsYXRlIGNoZWNrc3VtcyBhbmQgcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBpbmNvbWluZyBkYXRhLiBJJ20gdGhpbmtpbmcgaXTigJlsbCBiZSB1c2VkIGF0IGJvdGggdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBzaWRlcy5cblxuVGhlbiB0aGVyZSdzIGBpcF90dW5uZWxfZW5jYXBgLiBUaGlzIHNjcmVhbXMgXCJ0dW5uZWwgZW5jYXBzdWxhdGlvbixcIiBvZiBjb3Vyc2UhIEl0J3MgcHJvYmFibHkgYSBzdHJ1Y3R1cmUgb3IgYSBmdW5jdGlvbiBwb2ludGVyLCBpZiBJIHdlcmUgdG8gZ3Vlc3MsIHRoYXQgaGFuZGxlcyB0aGUgYWN0dWFsIHByb2Nlc3Mgb2YgY29uc3RydWN0aW5nIHRoZSB0dW5uZWwgaGVhZGVycy4gIEl0IG1pZ2h0IGluY2x1ZGUgdGhpbmdzIGxpa2UgYWRkaW5nIHRoZSBvdXRlciBJUCBoZWFkZXIgKGlmIGl0J3MgYW4gSVAtaW4tSVAgdHVubmVsKSwgR1JFIGhlYWRlcnMsIG9yIG90aGVyIGVuY2Fwc3VsYXRpb24tc3BlY2lmaWMgZmllbGRzLiBJ4oCZZCBleHBlY3QgdGhpcyB0byBiZSB0aGUgd29ya2hvcnNlIHRoYXQgd3JhcHMgdGhlIGlubmVyIHBhY2tldCBpbiB0aGUgbmVjZXNzYXJ5IHR1bm5lbCBmcmFtaW5nLCBlZmZlY3RpdmVseSBoaWRpbmcgdGhlIG9yaWdpbmFsIElQIHBheWxvYWQgYW5kIHByb3ZpZGluZyBhIHNhZmUgcGFzc2FnZSB0aHJvdWdoIHNvbWUgbmV0d29yay4gSSdkIGltYWdpbmUgdGhhdCB0aGlzIGVuY2Fwc3VsYXRlcyB0aGUgZW50aXJlIHByb2NlZHVyZSBvZiBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBJUCBwYWNrZXQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHVzZXMgdGhlc2UgdHdvIGluIGNvbmp1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0d28sIHN1Y2ggYXMsIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBtYWtlcyB1c2Ugb2YgYGlwX2VuY2FwX2hsZW5gIHRvIGNvbnN0cnVjdCB0aGUgZW5jYXBzdWxhdGlvbiBmcmFtZS4gIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU1LjA2MDY3NDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0MjU4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2VuY2FwXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTUyNj1zdGF0aWMgaW5saW5lIGludCBpcF9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTQ1LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo1NDY6c3RhdGljIGlubGluZSBpbnQgaXBfdHVubmVsX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTU0Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU1LjIzMTEwNTMxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwMDA4MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBfdHVubmVscy5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgSVAgdHVubmVscywgYW5kIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBkZWZpbml0aW9ucyBpcyB0aGUga2VybmVsIGhlYWRlciBmaWxlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDUyMDsgdGhhdCdzIG9mdGVuIGEgZ29vZCBzcG90IHRvIGZpbmQga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIG5ldHdvcmtpbmcgY29kZS4gSXQncyBhIHRhcmdldGVkIGFwcHJvYWNoIHJhdGhlciB0aGFuIGEgZnVsbCBjb2RlIHJldmlldyBhdCB0aGlzIHBvaW50LCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gbXkgdGltZS4gTm93LCBsZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NTcuMTExMTE2NDgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFx0ICogYSBiYXNlIG5ldHdvcmsgaGVhZGVyIGluIHNrYi1cXHUwMDNlaGVhZC5cXG4gNTE2OlxcdFxcdCAqL1xcbiA1MTc6XFx0XFx0cmVhc29uID0gcHNrYl9tYXlfcHVsbF9yZWFzb24oc2tiLCBtYWNsZW4gKyBuaGxlbik7XFxuIDUxODpcXHRcXHRpZiAocmVhc29uKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIHJlYXNvbjtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY2xlbik7XFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbiA1MjQ6XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzdGF0aWMgaW5saW5lIGludCBpcF9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxuIDUyNzpcXHR7XFxuIDUyODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzO1xcbiA1Mjk6XFx0XFx0aW50IGhsZW4gPSAtRUlOVkFMO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4gNTMyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSBcXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxcbiA1MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTM4OlxcdFxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcHR1bl9lbmNhcHNbZS1cXHUwMDNldHlwZV0pO1xcbiA1Mzk6XFx0XFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VlbmNhcF9obGVuKSlcXG4gNTQwOlxcdFxcdFxcdGhsZW4gPSBvcHMtXFx1MDAzZWVuY2FwX2hsZW4oZSk7XFxuIDU0MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0cmV0dXJuIGhsZW47XFxuIDU0NDpcXHR9XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdHN0YXRpYyBpbmxpbmUgaW50IGlwX3R1bm5lbF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA1NDc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbiA1NDg6XFx0XFx0XFx0XFx0XFx0ICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcXG4gNTQ5OlxcdHtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHM7XFxuIDU1MTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0aWYgKGUtXFx1MDAzZXR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuIDU1NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTU1OlxcdFxcbiA1NTY6XFx0XFx0aWYgKGUtXFx1MDAzZXR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4gNTU3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU3LjExMTIxNTc4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA2NDM4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFR1bm5lbCBFbmNhcHN1bGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB3b3VsZC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYHRubF91cGRhdGVfcG10dWAgYW5kIGBpcF90dW5uZWxfeG1pdGAuIFRoZSBhZGRpdGlvbiBvZiBgZW5jYXBfaGxlbmAgYXMgYW4gYXJndW1lbnQgdG8gYHRubF91cGRhdGVfcG10dWAgaXMga2V5LiBJdCBzaWduYWxzIGEgc2hpZnQgaW4gaG93IHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlciBsZW5ndGggaXMgaGFuZGxlZCwgZGlyZWN0bHkgaW1wYWN0aW5nIHBhY2tldCBzaXplIGNhbGN1bGF0aW9ucywgYW5kIHRoZXJlZm9yZSwgUE1UVSBkZXRlcm1pbmF0aW9uLiBUaGUgY2hhbmdlIHRvIGBwa3Rfc2l6ZWAgY2FsY3VsYXRpb24gKGBza2ItXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYCkgaXMgb2J2aW91c2x5IHdoZXJlIHRoaXMgaW1wYWN0IGxpZXMsIGFuZCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGlwX3R1bm5lbF94bWl0YCBub3cgKnNuYXBzaG90cyogdGhlIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgYGRhdGFfcmFjZSh0dW5uZWwtXHUwMDNlZW5jYXApYC4gVGhpcyAqbXVzdCogYmUgYWJvdXQgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZW5zdXJpbmcgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGVuY2Fwc3VsYXRpb24gc2V0dGluZ3MgZHVyaW5nIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gVGhpcyBlbmNhcHN1bGF0aW9uIG9jY3VycyByaWdodCBiZWZvcmUgYGlwdHVubmVsX3htaXRgLCBhZnRlciBhIGNoZWNrIGZvciBhdmFpbGFibGUgaGVhZHJvb20uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlICptdXN0KiB2ZXJpZnkgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrIGV4aXN0cyBoZXJlLiBgaXBlbmNhcGAgaXMgcG9wdWxhdGVkIHZpYSBhIHN0cnVjdCBhc3NpZ25tZW50IGZyb20gYHR1bm5lbC1cdTAwM2VlbmNhcGAsIHRoaXMgaXMgYSBnb29kIHNpZ24uIGBlbmNhcF9obGVuYCBpcyBkZXJpdmVkIGZyb20gYGlwZW5jYXBgIHZpYSBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYGlwX2VuY2FwX2hsZW4oKWAsIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBzYWZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGB0bmxfdXBkYXRlX3BtdHVgIGlzIGFsc28gbm90IHJlYWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgd2hpY2ggaXQgc2hvdWxkbid0LCBzaW5jZSBpdCdzIG9ubHkgcmVjZWl2aW5nIHRoZSBgZW5jYXBfaGxlbmAgaW50LiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIGlzIHNvbGVseSB1c2VkIGZvciBQTVRVL0lDTVAgY2FsY3VsYXRpb25zIGFuZCBmcmFnbWVudHMsIHNvIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgaXNzdWVzIHRoZXJlLlxuXG5XZSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJcyB0aGVyZSBhbnkgc3RydWN0IHBhZGRpbmcgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyBgaXBlbmNhcGAgaXMgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50ICpiZWZvcmUqIGJlaW5nIHVzZWQgaW4gYGlwX2VuY2FwX2hsZW4oKWAgYW5kIGBpcF90dW5uZWxfZW5jYXAoKWAuIGBlbmNhcF9obGVuYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbGwgYnJhbmNoZXMgcmVseSBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vIGRhdGEgZ29lcyB0byB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgcm9idXN0LlxuXG5XaGF0IGJ1Z3MgYXJlIGZpeGVkIG9yIHBvdGVudGlhbGx5IGludHJvZHVjZWQ/IFRoaXMgbG9va3MgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGZpeCBieSBzbmFwc2hvdHRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy4gSXQncyBtb3ZpbmcgdGhlIGVuY2Fwc3VsYXRpb24gKmFmdGVyKiBoZWFkcm9vbSBleHBhbnNpb24sIHdoaWNoIGlzIHNtYXJ0LCB0byBwcmV2ZW50IHdyaXRpbmcgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSBQTVRVIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3RlZCBieSBhY2NvdW50aW5nIGZvciB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgbGVuZ3RoLiBUaGVzZSBhcmUgZ29vZCBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBLTVNBTj8gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi5cblxuTGV0J3MgZG8gYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgY29uY2x1c2lvbjpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC5cbjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuICBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgQm91bmRzIGNoZWNrcyBhbmQgbGVuZ3RocyBhcmUgZG9uZSBzYWZlbHkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBzb2xpZCBwYXRjaCwgYWRkcmVzc2luZyByZWFsIGNvbmN1cnJlbmN5LCBidWZmZXItaGFuZGxpbmcsIGFuZCBsb2dpYyBjb25jZXJucyB3aXRob3V0IGludHJvZHVjaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzUsIk91dHB1dFRva2VucyI6MjgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDI6MDYuMjE3NjU3MDU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IHNuYXBzaG90cyBgdHVubmVsLVxcdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXFxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxcblxcblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRhdGEgcmFjZXMgYXJlIHRhcmdldGVkIGJ5IEtDU0FOL0xPQ0tERVAuXFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IHNuYXBzaG90cyBgdHVubmVsLVxcdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXFxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxcblxcblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRhdGEgcmFjZXMgYXJlIHRhcmdldGVkIGJ5IEtDU0FOL0xPQ0tERVAuXFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 04:44:36 +0000 UTC FinishedAt: 2026-09-06 05:02:07 +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": "3f4b7d1a49c5c826f3be9b684313eea5b83ac232", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "NET_IPGRE", "NET_IPIP", "NET_FOU_IP_TUNNELS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f4b7d1a49c5c826f3be9b684313eea5b83ac232", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IP_TUNNEL", "NET_IPGRE", "NET_IPIP", "NET_FOU_IP_TUNNELS" ], "series_id": "d09a84b9-80e1-440c-9987-e9982aee12f2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_xmit", "ip_md_tunnel_xmit", "tnl_update_pmtu" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwX21kX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O3RubF91cGRhdGVfcG10dSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIGFuZCBQTVRVL2hlYWRyb29tIGNhbGN1bGF0aW9ucyBpbiBJUHY0IHR1bm5lbCB0cmFuc21pc3Npb24gKGlwX3R1bm5lbF94bWl0IGFuZCB0bmxfdXBkYXRlX3BtdHUpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXG4yLiBJdCBhY2NvdW50cyBmb3IgYGVuY2FwX2hsZW5gIGluIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBkZWZlcnMgY2FsbGluZyBgaXBfdHVubmVsX2VuY2FwKClgIHVudGlsIGFmdGVyIHNrYiBoZWFkcm9vbSBpcyBleHBhbmRlZCB3aXRoIGBza2JfY293X2hlYWQoKWAuXG5cblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxuLSBNZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20sIHNrYiBib3VuZHMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBLQVNBTi5cbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MDE5M2E1MTdmYWY3MjAxNDllZTkyNGViNWRhYjdlMWVjY2FmNzA2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAwNTowMTowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi40NDdiNDM1YjEwY2NhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtNTEyLDE0ICYjNDM7NTEyLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG4gc3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGgsXG4tXHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZClcbiYjNDM7XHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCxcbiYjNDM7XHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgcGt0X3NpemU7XG4gXHRpbnQgbXR1O1xuIFxuIFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4tXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gLSB0dW5uZWxfaGxlbjtcbiYjNDM7XHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xuIFx0cGt0X3NpemUgLT0gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gXG4gXHRpZiAoZGYpIHtcbkBAIC02MjksNyAmIzQzOzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpKVxuIFx0XHRkZiA9IGh0b25zKElQX0RGKTtcbiBcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCB0dW5uZWxfaGxlbixcbi1cdFx0XHQgICAga2V5LVx1MDAzZXUuaXB2NC5kc3QsIHRydWUpKSB7XG4mIzQzO1x0XHRcdCAgICBrZXktXHUwMDNldS5pcHY0LmRzdCwgdHJ1ZSwgMCkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC02NzEsNiAmIzQzOzY3Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1x0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cbiBcdHN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDtcdFx0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJvb2wgbWQgPSBmYWxzZTtcbiBcdGJvb2wgY29ubmVjdGVkO1xuIFx0aW50IGVycl9jb3VudDtcbiYjNDM7XHRpbnQgZW5jYXBfaGxlbjtcbiBcdHU4IHRvcywgdHRsO1xuIFx0X19iZTMyIGRzdDtcbiBcdF9fYmUxNiBkZjtcbkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiBcbi1cdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKVxuJiM0MztcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4mIzQzO1x0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXHUwMDNlZW5jYXApO1xuJiM0MztcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuJiM0MztcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbkBAIC04MDMsNyAmIzQzOzgwOSw4IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2VpZ25vcmVfZGYpXG4gXHRcdGRmIHw9IChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSk7XG4gXG4tXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UpKSB7XG4mIzQzO1x0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuJiM0MztcdFx0XHQgICAgZW5jYXBfaGxlbikpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC04MzQsNyAmIzQzOzg0MSw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdG1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVx1MDAzZWRzdC5kZXYpICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpXG4tXHRcdFx0JiM0MzsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gJiM0MzsgaXBfZW5jYXBfaGxlbihcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXApO1xuJiM0MztcdFx0XHQmIzQzOyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiAmIzQzOyBlbmNhcF9obGVuO1xuIFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcbiBcbiYjNDM7XHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGlwX3J0X3B1dChydCk7XG4mIzQzO1x0XHRnb3RvIHR4X2Vycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpcHR1bm5lbF94bWl0KE5VTEwsIHJ0LCBza2IsIGZsNC5zYWRkciwgZmw0LmRhZGRyLCBwcm90b2NvbCwgdG9zLCB0dGwsXG4gXHRcdCAgICAgIGRmLCAhbmV0X2VxKHR1bm5lbC1cdTAwM2VuZXQsIGRldl9uZXQoZGV2KSksIDApO1xuIFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O05FVF9GT1VfSVBfVFVOTkVMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwX21kX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O3RubF91cGRhdGVfcG10dSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBQTVRVIGNhbGN1bGF0aW9uIGFuZCB0dW5uZWwgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgSVAgdHVubmVsaW5nIHN1YnN5c3RlbSAobmV0L2lwdjQvaXBfdHVubmVsLmMpLiBJdCBzbmFwc2hvdHMgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyBjb25jdXJyZW50IGNoYW5nZWxpbmsgb3BlcmF0aW9ucywgZGVmZXJzIGVuY2Fwc3VsYXRpb24gaW4gaXBfdHVubmVsX3htaXQsIGFuZCBhY2NvdW50cyBmb3IgZW5jYXAgaGVhZGVyIGxlbmd0aCBpbiBQTVRVIHVwZGF0ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCB0dW5uZWwgZGV2aWNlcyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC01MTIsMTQgJiM0Mzs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTsKIHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCwKLQkJCSAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQpCiYjNDM7CQkJICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCwKJiM0MzsJCQkgICAgaW50IGVuY2FwX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcGt0X3NpemU7CiAJaW50IG10dTsKIAogCXR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC0mZ3Q7aGxlbjsKLQlwa3Rfc2l6ZSA9IHNrYi0mZ3Q7bGVuIC0gdHVubmVsX2hsZW47CiYjNDM7CXBrdF9zaXplID0gc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuOwogCXBrdF9zaXplIC09IGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAlpZiAoZGYpIHsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgdm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS0mZ3Q7dHVuX2ZsYWdzKSkKIAkJZGYgPSBodG9ucyhJUF9ERik7CiAJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLAotCQkJICAgIGtleS0mZ3Q7dS5pcHY0LmRzdCwgdHJ1ZSkpIHsKJiM0MzsJCQkgICAga2V5LSZndDt1LmlwdjQuZHN0LCB0cnVlLCAwKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTY3MSw2ICYjNDM7NjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaDsKIAl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlib29sIG1kID0gZmFsc2U7CiAJYm9vbCBjb25uZWN0ZWQ7CiAJaW50IGVycl9jb3VudDsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggdG9zLCB0dGw7CiAJX19iZTMyIGRzdDsKIAlfX2JlMTYgZGY7CkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgdHVubmVsLSZndDtuZXQsIFJFQURfT05DRSh0dW5uZWwtJmd0O3Bhcm1zLmxpbmspLAogCQkJICAgIHR1bm5lbC0mZ3Q7ZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7CiAKLQlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDt0dW5uZWwtJmd0O2VuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKQomIzQzOwkvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC0mZ3Q7ZW5jYXApOwomIzQzOwllbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAoZW5jYXBfaGxlbiAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAKIAlpZiAoY29ubmVjdGVkICZhbXA7JmFtcDsgbWQpIHsKQEAgLTgwMyw3ICYjNDM7ODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7ICF0dW5uZWwtJmd0O2lnbm9yZV9kZikKIAkJZGYgfD0gKGlubmVyX2lwaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKTsKIAotCWlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHsKJiM0MzsJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLAomIzQzOwkJCSAgICBlbmNhcF9obGVuKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTgzNCw3ICYjNDM7ODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCW1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKQotCQkJJiM0MzsgcnQtJmd0O2RzdC5oZWFkZXJfbGVuICYjNDM7IGlwX2VuY2FwX2hsZW4oJmFtcDt0dW5uZWwtJmd0O2VuY2FwKTsKJiM0MzsJCQkmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW4gJiM0MzsgZW5jYXBfaGxlbjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTsKIAomIzQzOwlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDtpcGVuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKSB7CiYjNDM7CQlpcF9ydF9wdXQocnQpOwomIzQzOwkJZ290byB0eF9lcnJvcjsKJiM0MzsJfQomIzQzOwogCWlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCwKIAkJICAgICAgZGYsICFuZXRfZXEodHVubmVsLSZndDtuZXQsIGRldl9uZXQoZGV2KSksIDApOwogCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElQIFR1bm5lbCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyBhcmUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gTGV0JiMzOTtzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIGBpcF90dW5uZWxfeG1pdGAsIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gUmlnaHQsIHRoZSBtYWluIHRoaW5nIGlzIHRoaXMgbmV3IGBlbmNhcF9obGVuYCBhcmd1bWVudCBiZWluZyBpbnRyb2R1Y2VkIGludG8gYHRubF91cGRhdGVfcG10dWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwYWNrZXQgc2l6ZSBmb3IgUGF0aCBNVFUgZGlzY292ZXJ5LiBJbiBgdG5sX3VwZGF0ZV9wbXR1YCwgdGhlIGNhbGN1bGF0aW9uIGlzIG5vdyBgcGt0X3NpemUgPSBza2ItJmd0O2xlbiAmIzQzOyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW5gLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKVGhlbiwgbG9va2luZyBhdCBgaXBfdHVubmVsX3htaXRgLCBJIHNlZSB0aGV5JiMzOTtyZSBncmFiYmluZyBgZW5jYXBfaGxlbmAgZnJvbSBgdHVubmVsLSZndDtlbmNhcGAuIFNtYXJ0IHRvIHVzZSBgZGF0YV9yYWNlYCB0aGVyZSwgbWluaW1pemVzIGxvY2tpbmcgb3ZlcmhlYWQuIFRoZSBlcnJvciBjaGVjayBgaWYgKGVuY2FwX2hsZW4gJmx0OyAwKSBnb3RvIHR4X2Vycm9yO2AgaXMgY3J1Y2lhbC4gVGhleSBhcmUgYWxzbyBkZWZlcnJpbmcgYGlwX3R1bm5lbF9lbmNhcGAgdW50aWwgYWZ0ZXIgYHNrYl9jb3dfaGVhZGAgYW5kIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYC4gVGhpcyBzaG91bGQgaW1wcm92ZSBlZmZpY2llbmN5LiBNb3N0IGltcG9ydGFudGx5LCBgZW5jYXBfaGxlbmAgaXMgcGFzc2VkIG9uIHRvIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgaXMgYWxzbyB1c2VkIGluIGBtYXhfaGVhZHJvb21gLiBUaGlzIGlzIGFsbCBsb2dpY2FsbHkgY29ubmVjdGVkLCB0aGUgaGVhZGVyIHNpemUgaXMgdXNlZCBpbiBzZXZlcmFsIHBsYWNlcy4KCkkgc2hvdWxkIHByb2JhYmx5IHRha2UgYSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgdG8gc2VlIGhvdyB0aGlzIGFmZmVjdHMgb3RoZXIgZnVuY3Rpb25zIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBBbmQgb2YgY291cnNlLCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgYnVpbGQgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19ORVRfSVBfVFVOTkVMfG9iai1cXCRcXChDT05GSUdfTkVUX0lQX1RVTk5FTFxcKXxpcF90dW5uZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE3NDQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcdCAgICAgaW5ldF9mcmFnbWVudC5vIHBpbmcubyBpcF90dW5uZWxfY29yZS5vIGdyZV9vZmZsb2FkLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE3LVx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xubmV0L2lwdjQvTWFrZWZpbGUtMTgtXG5uZXQvaXB2NC9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yMC1vYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbi0tXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTEyLSNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2NvbW1vbi5oXHUwMDNlXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTEzOiNpbmNsdWRlIFx1MDAzY25ldC9pcF90dW5uZWxzLmhcdTAwM2Vcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTQtI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYz0xODgyPXN0YXRpYyBpbnQgX19pbml0IGluZXRfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAyLVxubmV0L2lwdjQvYWZfaW5ldC5jOjIwMDM6XHRpcF90dW5uZWxfY29yZV9pbml0KCk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMjAwNC1cbi0tXG5uZXQvaXB2NC9hcnAuYy0xMTItI2luY2x1ZGUgXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXHUwMDNlXG5uZXQvaXB2NC9hcnAuYzoxMTM6I2luY2x1ZGUgXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFx1MDAzZVxubmV0L2lwdjQvYXJwLmMtMTE0LVxuLS1cbm5ldC9pcHY0L2ZvdV9icGYuYz00ND1fX2JwZl9rZnVuYyBpbnQgYnBmX3NrYl9zZXRfZm91X2VuY2FwKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsXG4tLVxubmV0L2lwdjQvZm91X2JwZi5jLTQ3LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYl9jdHg7XG5uZXQvaXB2NC9mb3VfYnBmLmM6NDg6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbm5ldC9pcHY0L2ZvdV9icGYuYy00OS1cbi0tXG5uZXQvaXB2NC9mb3VfYnBmLmM9ODY9X19icGZfa2Z1bmMgaW50IGJwZl9za2JfZ2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxuLS1cbm5ldC9pcHY0L2ZvdV9icGYuYy04OS1cdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xubmV0L2lwdjQvZm91X2JwZi5jOjkwOlx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XG5uZXQvaXB2NC9mb3VfYnBmLmMtOTEtXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYz05MDM9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBmb3VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTkxNS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTE2OnNpemVfdCBmb3VfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTIwPUVYUE9SVF9TWU1CT0woZm91X2VuY2FwX2hsZW4pO1xubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjkyMjpzaXplX3QgZ3VlX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTIzLXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkzOD1FWFBPUlRfU1lNQk9MKGd1ZV9lbmNhcF9obGVuKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTM5LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NDEtXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTU0PUVYUE9SVF9TWU1CT0woX19mb3VfYnVpbGRfaGVhZGVyKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NTY6aW50IF9fZ3VlX2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NTctXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDMwLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMi1cdFx0XHQgIHN0cnVjdCBmbG93aTQgKmZsNCwgdTggKnByb3RvY29sLCBfX2JlMTYgc3BvcnQpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDUxLVx0XHRcdCAgICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwNjc6c3RhdGljIGludCBndWVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXHRcdFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTA5Nj1zdGF0aWMgaW50IGd1ZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYxLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBmb3VfaXB0dW5fb3BzID0ge1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVx0LmVuY2FwX2hsZW4gPSBmb3VfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGd1ZV9pcHR1bl9vcHMgPSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjktXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTc1LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNzg6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExODMtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBhZGQgZ3VlIG9wc1xcblwmIzM0Oyk7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XHRcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTg4LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5NS17XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOTY6XHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NzpcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTk4LX1cbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyMDI6c3RhdGljIGludCBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA2LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA4LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNTYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1OC1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNjk9c3RhdGljIHZvaWQgX19leGl0IGZvdV9maW5pKHZvaWQpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xubmV0L2lwdjQvZm91X2NvcmUuYzoxMjcxOlx0aXBfdHVubmVsX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmZvdV9ubF9mYW1pbHkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTM1LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvaXB2NC9pcF9ncmUuYzozNjojaW5jbHVkZSBcdTAwM2NuZXQvaXBfdHVubmVscy5oXHUwMDNlXG5uZXQvaXB2NC9pcF9ncmUuYy0zNy0jaW5jbHVkZSBcdTAwM2NuZXQvYXJwLmhcdTAwM2Vcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMjI9c3RhdGljIGludCBpcGdyZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDEtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDMtXHRjb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktXHUwMDNlY29kZTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDpcdHN0cnVjdCBpcF90dW5uZWwgKnQ7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDUtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTU0LVx0aXBoID0gKGNvbnN0IHN0cnVjdCBpcGhkciAqKShpY21wX2hkcihza2IpICYjNDM7IDEpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTU1Olx0dCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIHRwaS1cdTAwM2VmbGFncyxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1Ni1cdFx0XHQgICAgIGlwaC1cdTAwM2VkYWRkciwgaXBoLVx1MDAzZXNhZGRyLCB0cGktXHUwMDNla2V5KTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0yNzMtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoyNzQ6XHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mjc1Olx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsO1xubmV0L2lwdjQvaXBfZ3JlLmMtMjc2LVx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMjgwLVxubmV0L2lwdjQvaXBfZ3JlLmM6MjgxOlx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0yODItXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMjg3LVx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX05PX0tFWV9CSVQsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjI4ODpcdFx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgZmxhZ3MsXG5uZXQvaXB2NC9pcF9ncmUuYy0yODktXHRcdFx0XHRcdCAgaXBoLVx1MDAzZXNhZGRyLCBpcGgtXHUwMDNlZGFkZHIsIDApO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTI5OC1cdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzoyOTk6XHRcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXgsIGZsYWdzLFxubmV0L2lwdjQvaXBfZ3JlLmMtMzAwLVx0XHRcdFx0XHQgIGlwaC1cdTAwM2VzYWRkciwgaXBoLVx1MDAzZWRhZGRyLCB0cGktXHUwMDNla2V5KTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zMTktXHRcdFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqcGt0X21kLCAqbWQ7XG5uZXQvaXB2NC9pcF9ncmUuYzozMjA6XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzIxLVx0XHRcdHVuc2lnbmVkIGNoYXIgKmdoO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTMyNC1cdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzozMjU6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0zMjYtXHRcdFx0dHVuX2lkID0ga2V5MzJfdG9fdHVubmVsX2lkKHRwaS1cdTAwM2VrZXkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cdFx0XHRcdFx0XHRcdCAgICBzaXplb2YoKmVyc2hkcikpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MzQ1Olx0XHRcdG1kID0gaXBfdHVubmVsX2luZm9fb3B0cyhcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8pO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzQ2LVx0XHRcdG1kLVx1MDAzZXZlcnNpb24gPSB2ZXI7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzU1LVx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MzU2Olx0XHRpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMzU3LVx0XHRyZXR1cm4gUEFDS0VUX1JDVkQ7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MzY2PXN0YXRpYyBpbnQgX19pcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxubmV0L2lwdjQvaXBfZ3JlLmM6MzY3Olx0XHQgICAgICAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwgaW50IGhkcl9sZW4sIGJvb2wgcmF3X3Byb3RvKVxubmV0L2lwdjQvaXBfZ3JlLmMtMzY4LXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzAtXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbm5ldC9pcHY0L2lwX2dyZS5jOjM3MTpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbm5ldC9pcHY0L2lwX2dyZS5jLTM3Mi1cbm5ldC9pcHY0L2lwX2dyZS5jLTM3My1cdGlwaCA9IGlwX2hkcihza2IpO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mzc0Olx0dHVubmVsID0gaXBfdHVubmVsX2xvb2t1cChpdG4sIHNrYi1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCwgdHBpLVx1MDAzZWZsYWdzLFxubmV0L2lwdjQvaXBfZ3JlLmMtMzc1LVx0XHRcdFx0ICBpcGgtXHUwMDNlc2FkZHIsIGlwaC1cdTAwM2VkYWRkciwgdHBpLVx1MDAzZWtleSk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMzk4LVx0XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6Mzk5Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19hbmQoZmxhZ3MsIHRwaS1cdTAwM2VmbGFncywgZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNDAwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQwNi1cbm5ldC9pcHY0L2lwX2dyZS5jOjQwNzpcdFx0aXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQwOC1cdFx0cmV0dXJuIFBBQ0tFVF9SQ1ZEO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQxNz1zdGF0aWMgaW50IGlwZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDIwLVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjQyMTpcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XG5uZXQvaXB2NC9pcF9ncmUuYy00MjItXHRpbnQgcmVzO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDc5LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjQ4MDpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy00ODEtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy00ODItXG5uZXQvaXB2NC9pcF9ncmUuYzo0ODM6XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNDg0LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ5MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjQ5MTpcdGlwX3R1bm5lbF94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCB0bmxfcGFyYW1zLVx1MDAzZXByb3RvY29sKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTQ5Mi19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NDk5PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTAxLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjUwMjpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy01MDMtXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XG5uZXQvaXB2NC9pcF9ncmUuYzo1MDQ6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTA1Olx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcbm5ldC9pcHY0L2lwX2dyZS5jLTUwNi1cdGludCB0dW5uZWxfaGxlbjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01MDktXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYzo1MTA6XHRcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtNTExLVx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01MjYtXHRfX3NldF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjUyNzpcdGlwX3R1bm5lbF9mbGFnc19hbmQoZmxhZ3MsIHR1bl9pbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MsIGZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTUyOC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz01NDM9c3RhdGljIHZvaWQgZXJzcGFuX2ZiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTU0NC17XG5uZXQvaXB2NC9pcF9ncmUuYzo1NDU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTQ2LVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpID0geyB9O1xubmV0L2lwdjQvaXBfZ3JlLmM6NTQ3Olx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcbm5ldC9pcHY0L2lwX2dyZS5jOjU0ODpcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYy01NDktXHRzdHJ1Y3QgZXJzcGFuX21ldGFkYXRhICptZDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NTctXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYzo1NTg6XHRcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxubmV0L2lwdjQvaXBfZ3JlLmMtNTU5LVx0XHRnb3RvIGVycl9mcmVlX3NrYjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy01NjUtXHRcdGdvdG8gZXJyX2ZyZWVfc2tiO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTY2Olx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTU2Ny1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz02Mjg9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L2lwX2dyZS5jLTYyOS17XG5uZXQvaXB2NC9pcF9ncmUuYzo2MzA6XHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjYzMTpcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYy02MzItXHRzdHJ1Y3QgcnRhYmxlICpydDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy02MzQtXG5uZXQvaXB2NC9pcF9ncmUuYzo2MzU6XHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgIT0gQUZfSU5FVClcbm5ldC9pcHY0L2lwX2dyZS5jLTYzNi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjM4LVx0a2V5ID0gXHUwMDI2aW5mby1cdTAwM2VrZXk7XG5uZXQvaXB2NC9pcF9ncmUuYzo2Mzk6XHRpcF90dW5uZWxfaW5pdF9mbG93KFx1MDAyNmZsNCwgSVBQUk9UT19HUkUsIGtleS1cdTAwM2V1LmlwdjQuZHN0LCBrZXktXHUwMDNldS5pcHY0LnNyYyxcbm5ldC9pcHY0L2lwX2dyZS5jLTY0MC1cdFx0XHQgICAgdHVubmVsX2lkX3RvX2tleTMyKGtleS1cdTAwM2V0dW5faWQpLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTY1Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTY1NC17XG5uZXQvaXB2NC9pcF9ncmUuYzo2NTU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNjU2LVx0Y29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTY3Ni1cbm5ldC9pcHY0L2lwX2dyZS5jOjY3NzpcdFx0LyogaXBfdHVubmVsX3htaXQoKSBuZWVkcyBza2ItXHUwMDNlZGF0YSBwb2ludGluZyB0byBncmUgaGVhZGVyLiAqL1xubmV0L2lwdjQvaXBfZ3JlLmMtNjc4LVx0XHRza2JfcHVsbChza2IsIHB1bGxfbGVuKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz03MDQ9c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzA2LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjcwNzpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy03MDgtXHRib29sIHRydW5jYXRlID0gZmFsc2U7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NzU5PXN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03NjEte1xubmV0L2lwdjQvaXBfZ3JlLmM6NzYyOlx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTc2My1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz03ODg9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxubmV0L2lwdjQvaXBfZ3JlLmMtNzg5LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjc5MDpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy03OTEtXHRpbnQgbGVuO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTgxNz1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY0L2lwX2dyZS5jOjgxODpcdFx0XHQgICAgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsXG5uZXQvaXB2NC9pcF9ncmUuYy04MTktXHRcdFx0ICAgIGludCBjbWQpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODIzLVxubmV0L2lwdjQvaXBfZ3JlLmM6ODI0Olx0aWYgKCFpcF90dW5uZWxfZmxhZ3NfaXNfYmUxNl9jb21wYXQocC1cdTAwM2VpX2ZsYWdzKSB8fFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI1Olx0ICAgICFpcF90dW5uZWxfZmxhZ3NfaXNfYmUxNl9jb21wYXQocC1cdTAwM2VvX2ZsYWdzKSlcbm5ldC9pcHY0L2lwX2dyZS5jLTgyNi1cdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXG5uZXQvaXB2NC9pcF9ncmUuYzo4Mjg6XHRpX2ZsYWdzID0gaXBfdHVubmVsX2ZsYWdzX3RvX2JlMTYocC1cdTAwM2VpX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjgyOTpcdG9fZmxhZ3MgPSBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNihwLVx1MDAzZW9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODMwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTg0MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjg0MTpcdGVyciA9IGlwX3R1bm5lbF9jdGwoZGV2LCBwLCBjbWQpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODQyLVx0aWYgKGVycilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04NDUtXHRpZiAoY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbm5ldC9pcHY0L2lwX2dyZS5jOjg0NjpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy04NDctXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDg6XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC1cdTAwM2VpX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjg0OTpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODUwLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTg1NS1cdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6ODU2Olx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihwLVx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODU3LVx0b19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlb19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzo4NTg6XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlb19mbGFncywgb19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy04NTktXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9ODkwPXN0YXRpYyBpbnQgaXBncmVfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODkzLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjg5NDpcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtODk1LVx0c3RydWN0IGdyZV9iYXNlX2hkciAqZ3JlaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05Mzc9c3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy05Mzgte1xubmV0L2lwdjQvaXBfZ3JlLmM6OTM5Olx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYy05NDAtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTY2PXN0YXRpYyBpbnQgaXBncmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTk2Ny17XG5uZXQvaXB2NC9pcF9ncmUuYzo5Njg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTk2OS1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05ODA9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcGdyZV9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjQvaXBfZ3JlLmMtOTgxLVx0Lm5kb19pbml0XHRcdD0gaXBncmVfdHVubmVsX2luaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODI6XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy05ODMtI2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTg3LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gaXBncmVfeG1pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4ODpcdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg5Olx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYy05OTAtXHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5OTE6XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cdC5uZG9fdHVubmVsX2N0bFx0XHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAwMD1zdGF0aWMgdm9pZCBpcGdyZV90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAzLVx0ZGV2LVx1MDAzZXR5cGVcdFx0PSBBUlBIUkRfSVBHUkU7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDA0Olx0aXBfdHVubmVsX3NldHVwKGRldiwgaXBncmVfbmV0X2lkKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDUtfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEwMDc9c3RhdGljIHZvaWQgX19ncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDgte1xubmV0L2lwdjQvaXBfZ3JlLmM6MTAwOTpcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMTAtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTAzNj1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDM3LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMzg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAzOS1cdHN0cnVjdCBpcGhkciAqaXBoID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDY2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTA2NzpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTA2OC19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTA3NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3Ni17XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDc3Olx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXHUwMDI2aXBncmVfbGlua19vcHMsIE5VTEwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTA3OC19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTA4MD1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwZ3JlX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4Mi17XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDgzOlx0aXBfdHVubmVsX2RlbGV0ZV9uZXQobmV0LCBpcGdyZV9uZXRfaWQsIFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMDg0LX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDg2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBncmVfbmV0X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDg5LVx0LmlkICAgPSBcdTAwMjZpcGdyZV9uZXRfaWQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDkwOlx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA5MS19O1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTExODI9c3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4NC1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMTg1Olx0XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4Ni1cdFx0XHRcdF9fdTMyICpmd21hcmspXG5uZXQvaXB2NC9pcF9ncmUuYy0xMTg3LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjExODg6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTExODktXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTI1MT1zdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1My1cdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjU0Olx0XHRcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1NS1cdFx0XHRcdF9fdTMyICpmd21hcmspXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjU2LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEyNTc6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTgtXHRpbnQgZXJyO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjk3Olx0XHRcdFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzMjk9c3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTMzNTpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNi19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzktXHQubmRvX2luaXRcdFx0PSBncmVfdGFwX2luaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzQwOlx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0MS1cdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGdyZV90YXBfeG1pdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQzLVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM0NDpcdC5uZG9fY2hhbmdlX210dVx0XHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NS1cdC5uZG9fZ2V0X3N0YXRzNjRcdD0gZGV2X2dldF90c3RhdHM2NCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDY6XHQubmRvX2dldF9pZmxpbmtcdFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDctXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzUwPXN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzUxLXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNTI6XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM1My1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzY3LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM2ODpcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM2OS19XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Mi1cdC5uZG9faW5pdFx0XHQ9IGVyc3Bhbl90dW5uZWxfaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzM6XHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc0LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gZXJzcGFuX3htaXQsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ni1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzc6XHQubmRvX2NoYW5nZV9tdHVcdFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzgtXHQubmRvX2dldF9zdGF0czY0XHQ9IGRldl9nZXRfdHN0YXRzNjQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc5Olx0Lm5kb19nZXRfaWZsaW5rXHRcdD0gaXBfdHVubmVsX2dldF9pZmxpbmssXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgwLVx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFx0PSBncmVfZmlsbF9tZXRhZGF0YV9kc3QsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg5LVx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MDpcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGdyZV90YXBfbmV0X2lkKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTEtfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk1LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5OC1cdGlmIChpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFx1MDAyNmlwZW5jYXApKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk5Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDA6XHRcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAxLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxNC1cdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0Yjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MTU6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQxNi1cdF9fdTMyIGZ3bWFyayA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyNS1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MjY6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDI3LVx0XHRcdFx0IGZ3bWFyayk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQzMD1zdGF0aWMgaW50IGVyc3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNS1cdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0Yjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MzY6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNy1cdF9fdTMyIGZ3bWFyayA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0Ni1cdFx0cmV0dXJuIGVycjtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDc6XHRyZXR1cm4gaXBfdHVubmVsX25ld2xpbmsocGFyYW1zLVx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFx1MDAyNnAsXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDQ4LVx0XHRcdFx0IGZ3bWFyayk7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ1MT1zdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU0LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTU6XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTY6XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQ1Ny1cdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjctXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDY4Olx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXHUwMDI2cCwgZndtYXJrKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjktXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzEtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDcyOlx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQ3MzpcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzQtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTQ4MD1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ4My17XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDg0Olx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDg1Olx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODYtXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NzpcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg3MQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZW5hYmxpbmcgYGlwX3R1bm5lbC5jYC4gTXkgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY0L0tjb25maWdgLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgbmV0d29yayBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZSBmb3IgSVB2NC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIElQIHR1bm5lbGluZyBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgSSBjYW4gZmluZC4uLiBJIGV4cGVjdCB0byBzZWUgc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gdHVubmVsaW5nLCBHUkUsIElQSVAsIG9yIHNpbWlsYXIgdGVjaG5vbG9naWVzLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY29uZmlnIHN5bWJvbCB0aGF0IG5lZWRzIHRvIGJlIHNldCB0byBidWlsZCBhbmQgZW5hYmxlIHRoZSB0dW5uZWwgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfSVBfVFVOTkVMfE5FVF9JUEdSRXxORVRfSVBJUHxORVRfRk9VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxubmV0L2lwdjQvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUDogdHVubmVsaW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnLTE2NC1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMTg1LVxubmV0L2lwdjQvS2NvbmZpZzoxODY6Y29uZmlnIE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTg3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MTk0Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWc6MTk1Olx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTk2LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjA2LVxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIwOTpcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFx1MDAyNlx1MDAyNiBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMjEwLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzA0PWNvbmZpZyBORVRfSVBWVElcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTMwNi1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMDgtXHRzZWxlY3QgWEZSTVxuLS1cbm5ldC9pcHY0L0tjb25maWc9MzE2PWNvbmZpZyBORVRfVURQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXHR0cmlzdGF0ZVxubmV0L2lwdjQvS2NvbmZpZzozMTg6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0zMTktXHRkZWZhdWx0IG5cbm5ldC9pcHY0L0tjb25maWctMzIwLVxubmV0L2lwdjQvS2NvbmZpZzozMjE6Y29uZmlnIE5FVF9GT1Vcbm5ldC9pcHY0L0tjb25maWctMzIyLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEZvbyAoSVAgcHJvdG9jb2xzKSBvdmVyIFVEUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctMzI5LVxubmV0L2lwdjQvS2NvbmZpZzozMzA6Y29uZmlnIE5FVF9GT1VfSVBfVFVOTkVMU1xubmV0L2lwdjQvS2NvbmZpZy0zMzEtXHRib29sIFwmIzM0O0lQOiBGT1UgZW5jYXBzdWxhdGlvbiBvZiBJUCB0dW5uZWxzXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjMzMjpcdGRlcGVuZHMgb24gTkVUX0lQSVAgfHwgTkVUX0lQR1JFIHx8IElQVjZfU0lUXG5uZXQvaXB2NC9LY29uZmlnOjMzMzpcdHNlbGVjdCBORVRfRk9VXG5uZXQvaXB2NC9LY29uZmlnLTMzNC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIElQdjQgVHVubmVsIENvZGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgaGVhcnQgb2YgdGhlIElQdjQgdHVubmVsaW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiBob3cgdGhpcyB3b3Jrcywgc28gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBsb2FkaW5nIHVwIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIEkmIzM5O20gZ29pbmcgdG8gdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29kZS4KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlIEkgcmVtZW1iZXIsIEkgdGhpbmsgdGhlIHNlY3Rpb24gYmV0d2VlbiBsaW5lcyA1MDAgYW5kIDg2MCBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvci4uLiB3ZWxsLCBwcm9iYWJseSB0aGUgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHByb2Nlc3MsIG9yIG1heWJlIHRoZSBoYW5kbGluZyBvZiB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIGFuZCBkZWxldGlvbi4gVGhhdCByYW5nZSBmZWVscyBhYm91dCByaWdodCBmb3IgdGhlIG1lYXQgb2YgdGhlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB0aGUgYml0IEkgd2FudCB0byB1bmRlcnN0YW5kIGJldHRlci4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSB0dW5uZWwgcHJvdG9jb2wgYWN0dWFsbHkgbWFuaXB1bGF0ZXMgdGhlIElQIHBhY2tldHMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4gSSBhbnRpY2lwYXRlIGEgZ29vZCBjaHVuayBvZiBzd2l0Y2ggc3RhdGVtZW50cyBhbmQgaGVscGVyIGZ1bmN0aW9uIGNhbGxzIGluIHRoZXJlLiBTaG91bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcbiA1MTE6XHRcbiA1MTI6XHRzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDUxMzpcdFx0XHRcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxuIDUxNDpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcbiA1MTU6XHRcdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxuIDUxNjpcdFx0XHRcdCAgICBpbnQgZW5jYXBfaGxlbilcbiA1MTc6XHR7XG4gNTE4Olx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDUxOTpcdFx0aW50IHBrdF9zaXplO1xuIDUyMDpcdFx0aW50IG10dTtcbiA1MjE6XHRcbiA1MjI6XHRcdHR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC1cdTAwM2VobGVuO1xuIDUyMzpcdFx0cGt0X3NpemUgPSBza2ItXHUwMDNlbGVuICYjNDM7IGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcbiA1MjQ6XHRcdHBrdF9zaXplIC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIDUyNTpcdFxuIDUyNjpcdFx0aWYgKGRmKSB7XG4gNTI3Olx0XHRcdG10dSA9IGRzdF9tdHUoXHUwMDI2cnQtXHUwMDNlZHN0KSAtIChzaXplb2Yoc3RydWN0IGlwaGRyKSAmIzQzOyB0dW5uZWxfaGxlbik7XG4gNTI4Olx0XHRcdG10dSAtPSBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcbiA1Mjk6XHRcdH0gZWxzZSB7XG4gNTMwOlx0XHRcdG10dSA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9tdHUoc2tiX2RzdChza2IpKSA6IGRldi1cdTAwM2VtdHU7XG4gNTMxOlx0XHR9XG4gNTMyOlx0XG4gNTMzOlx0XHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxuIDUzNDpcdFx0XHRza2JfZHN0X3VwZGF0ZV9wbXR1X25vX2NvbmZpcm0oc2tiLCBtdHUpO1xuIDUzNTpcdFxuIDUzNjpcdFx0aWYgKHNrYi1cdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHtcbiA1Mzc6XHRcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXHUwMDI2XHUwMDI2XG4gNTM4Olx0XHRcdCAgICAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpIFx1MDAyNlx1MDAyNlxuIDUzOTpcdFx0XHQgICAgbXR1IFx1MDAzYyBwa3Rfc2l6ZSkge1xuIDU0MDpcdFx0XHRcdGljbXBfbmRvX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7XG4gNTQxOlx0XHRcdFx0cmV0dXJuIC1FMkJJRztcbiA1NDI6XHRcdFx0fVxuIDU0MzpcdFx0fVxuIDU0NDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIDU0NTpcdFx0ZWxzZSBpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7XG4gNTQ2Olx0XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xuIDU0NzpcdFx0XHRfX2JlMzIgZGFkZHI7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRcdHJ0NiA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpIDpcbiA1NTA6XHRcdFx0XHRcdFx0ICAgTlVMTDtcbiA1NTE6XHRcdFx0ZGFkZHIgPSBtZCA/IGRzdCA6IHR1bm5lbC1cdTAwM2VwYXJtcy5pcGguZGFkZHI7XG4gNTUyOlx0XG4gNTUzOlx0XHRcdGlmIChydDYgXHUwMDI2XHUwMDI2IG10dSBcdTAwM2MgZHN0X210dShza2JfZHN0KHNrYikpIFx1MDAyNlx1MDAyNlxuIDU1NDpcdFx0XHRcdCAgIG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSkge1xuIDU1NTpcdFx0XHRcdGlmICgoZGFkZHIgXHUwMDI2XHUwMDI2ICFpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHx8XG4gNTU2Olx0XHRcdFx0ICAgIHJ0Ni1cdTAwM2VydDZpX2RzdC5wbGVuID09IDEyOCkge1xuIDU1NzpcdFx0XHRcdFx0cnQ2LVx1MDAzZXJ0NmlfZmxhZ3MgfD0gUlRGX01PRElGSUVEO1xuIDU1ODpcdFx0XHRcdFx0ZHN0X21ldHJpY19zZXQoc2tiX2RzdChza2IpLCBSVEFYX01UVSwgbXR1KTtcbiA1NTk6XHRcdFx0XHR9XG4gNTYwOlx0XHRcdH1cbiA1NjE6XHRcbiA1NjI6XHRcdFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXHUwMDI2XHUwMDI2IG10dSBcdTAwM2U9IElQVjZfTUlOX01UVSBcdTAwMjZcdTAwMjZcbiA1NjM6XHRcdFx0XHRcdFx0bXR1IFx1MDAzYyBwa3Rfc2l6ZSkge1xuIDU2NDpcdFx0XHRcdGljbXB2Nl9uZG9fc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpO1xuIDU2NTpcdFx0XHRcdHJldHVybiAtRTJCSUc7XG4gNTY2Olx0XHRcdH1cbiA1Njc6XHRcdH1cbiA1Njg6XHQjZW5kaWZcbiA1Njk6XHRcdHJldHVybiAwO1xuIDU3MDpcdH1cbiA1NzE6XHRcbiA1NzI6XHR2b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNTczOlx0XHRcdCAgICAgICB1OCBwcm90bywgaW50IHR1bm5lbF9obGVuKVxuIDU3NDpcdHtcbiA1NzU6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gNTc2Olx0XHR1MzIgaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IGlwaGRyKTtcbiA1Nzc6XHRcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XG4gNTc4Olx0XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2tleSAqa2V5O1xuIDU3OTpcdFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gNTgwOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7XG4gNTgxOlx0XHRzdHJ1Y3QgZmxvd2k0IGZsNDtcbiA1ODI6XHRcdF9fYmUxNiBkZiA9IDA7XG4gNTgzOlx0XHR1OCB0b3MsIHR0bDtcbiA1ODQ6XHRcdGJvb2wgdXNlX2NhY2hlO1xuIDU4NTpcdFxuIDU4NjpcdFx0dHVuX2luZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiA1ODc6XHRcdGlmICh1bmxpa2VseSghdHVuX2luZm8gfHwgISh0dW5faW5mby1cdTAwM2Vtb2RlIFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkgfHxcbiA1ODg6XHRcdFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXG4gNTg5Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZW1haW5pbmcgY29kZSB3aXRoaW4gYGlwX3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgdGhlIHB1cnBvc2Ugb2YgZWFjaCBzZWN0aW9uIG9mIHRoZSBjb2RlIHRvIHByb3Blcmx5IGFzc2VzcyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2MDpcdFx0XHR9IGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA3NjE6XHRcdFx0XHR0b3MgPSBpcHY2X2dldF9kc2ZpZWxkKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKWlubmVyX2lwaCk7XG4gNzYyOlx0XHRcdFx0Y29ubmVjdGVkID0gZmFsc2U7XG4gNzYzOlx0XHRcdH1cbiA3NjQ6XHRcdH1cbiA3NjU6XHRcbiA3NjY6XHRcdGlwX3R1bm5lbF9pbml0X2Zsb3coXHUwMDI2Zmw0LCBwcm90b2NvbCwgZHN0LCB0bmxfcGFyYW1zLVx1MDAzZXNhZGRyLFxuIDc2NzpcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlcGFybXMub19rZXksIHRvcyBcdTAwMjYgSU5FVF9EU0NQX01BU0ssXG4gNzY4Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gNzY5Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiA3NzA6XHRcbiA3NzE6XHRcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4gNzcyOlx0XHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cdTAwM2VlbmNhcCk7XG4gNzczOlx0XHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbiA3NzQ6XHRcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIDc3NTpcdFx0XHRnb3RvIHR4X2Vycm9yO1xuIDc3NjpcdFxuIDc3NzpcdFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbiA3Nzg6XHRcdFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCB0dW5faW5mbyk7XG4gNzc5Olx0XHRcdGlmICh1c2VfY2FjaGUpXG4gNzgwOlx0XHRcdFx0cnQgPSBkc3RfY2FjaGVfZ2V0X2lwNChcdTAwMjZ0dW5faW5mby1cdTAwM2Vkc3RfY2FjaGUsXG4gNzgxOlx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZmbDQuc2FkZHIpO1xuIDc4MjpcdFx0fSBlbHNlIHtcbiA3ODM6XHRcdFx0cnQgPSBjb25uZWN0ZWQgPyBkc3RfY2FjaGVfZ2V0X2lwNChcdTAwMjZ0dW5uZWwtXHUwMDNlZHN0X2NhY2hlLFxuIDc4NDpcdFx0XHRcdFx0XHRcdFx1MDAyNmZsNC5zYWRkcikgOiBOVUxMO1xuIDc4NTpcdFx0fVxuIDc4NjpcdFxuIDc4NzpcdFx0aWYgKCFydCkge1xuIDc4ODpcdFx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVx1MDAzZW5ldCwgXHUwMDI2Zmw0KTtcbiA3ODk6XHRcbiA3OTA6XHRcdFx0aWYgKElTX0VSUihydCkpIHtcbiA3OTE6XHRcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfY2Fycmllcl9lcnJvcnMpO1xuIDc5MjpcdFx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gNzkzOlx0XHRcdH1cbiA3OTQ6XHRcdFx0aWYgKHVzZV9jYWNoZSlcbiA3OTU6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNChcdTAwMjZ0dW5faW5mby1cdTAwM2Vkc3RfY2FjaGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiA3OTY6XHRcdFx0XHRcdFx0ICBmbDQuc2FkZHIpO1xuIDc5NzpcdFx0XHRlbHNlIGlmICghbWQgXHUwMDI2XHUwMDI2IGNvbm5lY3RlZClcbiA3OTg6XHRcdFx0XHRkc3RfY2FjaGVfc2V0X2lwNChcdTAwMjZ0dW5uZWwtXHUwMDNlZHN0X2NhY2hlLCBcdTAwMjZydC1cdTAwM2Vkc3QsXG4gNzk5Olx0XHRcdFx0XHRcdCAgZmw0LnNhZGRyKTtcbiA4MDA6XHRcdH1cbiA4MDE6XHRcbiA4MDI6XHRcdGlmIChydC1cdTAwM2Vkc3QuZGV2ID09IGRldikge1xuIDgwMzpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDgwNDpcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgY29sbGlzaW9ucyk7XG4gODA1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gODA2Olx0XHR9XG4gODA3Olx0XG4gODA4Olx0XHRkZiA9IHRubF9wYXJhbXMtXHUwMDNlZnJhZ19vZmY7XG4gODA5Olx0XHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlaWdub3JlX2RmKVxuIDgxMDpcdFx0XHRkZiB8PSAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpO1xuIDgxMTpcdFxuIDgxMjpcdFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuIDgxMzpcdFx0XHRcdCAgICBlbmNhcF9obGVuKSkge1xuIDgxNDpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDgxNTpcdFx0XHRnb3RvIHR4X2Vycm9yO1xuIDgxNjpcdFx0fVxuIDgxNzpcdFxuIDgxODpcdFx0ZXJyX2NvdW50ID0gUkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQpO1xuIDgxOTpcdFx0aWYgKGVycl9jb3VudCBcdTAwM2UgMCkge1xuIDgyMDpcdFx0XHRpZiAodGltZV9iZWZvcmUoamlmZmllcyxcbiA4MjE6XHRcdFx0XHRcdFJFQURfT05DRSh0dW5uZWwtXHUwMDNlZXJyX3RpbWUpICYjNDM7IElQVFVOTkVMX0VSUl9USU1FTykpIHtcbiA4MjI6XHRcdFx0XHRXUklURV9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQsIGVycl9jb3VudCAtIDEpO1xuIDgyMzpcdFxuIDgyNDpcdFx0XHRcdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcbiA4MjU6XHRcdFx0fSBlbHNlIHtcbiA4MjY6XHRcdFx0XHRXUklURV9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfY291bnQsIDApO1xuIDgyNzpcdFx0XHR9XG4gODI4Olx0XHR9XG4gODI5Olx0XG4gODMwOlx0XHR0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaW5uZXJfaXBoLCBza2IpO1xuIDgzMTpcdFx0dHRsID0gdG5sX3BhcmFtcy1cdTAwM2V0dGw7XG4gODMyOlx0XHRpZiAodHRsID09IDApIHtcbiA4MzM6XHRcdFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxuIDgzNDpcdFx0XHRcdHR0bCA9IGlubmVyX2lwaC1cdTAwM2V0dGw7XG4gODM1Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gODM2Olx0XHRcdGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXG4gODM3Olx0XHRcdFx0dHRsID0gKChjb25zdCBzdHJ1Y3QgaXB2NmhkciAqKWlubmVyX2lwaCktXHUwMDNlaG9wX2xpbWl0O1xuIDgzODpcdCNlbmRpZlxuIDgzOTpcdFx0XHRlbHNlXG4gODQwOlx0XHRcdFx0dHRsID0gaXA0X2RzdF9ob3BsaW1pdChcdTAwMjZydC1cdTAwM2Vkc3QpO1xuIDg0MTpcdFx0fVxuIDg0MjpcdFxuIDg0MzpcdFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcilcbiA4NDQ6XHRcdFx0XHQmIzQzOyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiAmIzQzOyBlbmNhcF9obGVuO1xuIDg0NTpcdFxuIDg0NjpcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcbiA4NDc6XHRcdFx0aXBfcnRfcHV0KHJ0KTtcbiA4NDg6XHRcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xuIDg0OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA4NTA6XHRcdFx0cmV0dXJuO1xuIDg1MTpcdFx0fVxuIDg1MjpcdFxuIDg1MzpcdFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gODU0Olx0XG4gODU1Olx0XHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbiA4NTY6XHRcdFx0aXBfcnRfcHV0KHJ0KTtcbiA4NTc6XHRcdFx0Z290byB0eF9lcnJvcjtcbiA4NTg6XHRcdH1cbiA4NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJUCBUdW5uZWxpbmcgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyAqY29yZSogdG8gdGhlIGtlcm5lbCYjMzk7cyBJUCB0dW5uZWxpbmcgaW1wbGVtZW50YXRpb24uIFRoaXMgY292ZXJzIHRoaW5ncyBsaWtlIEdSRSwgSVBJUCwgYW5kIHNvIG9uIOKAkyB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcyBsaWtlIGBpcGdyZWAgYW5kIGBpcGlwYC4gIEltcG9ydGFudGx5LCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUgYW5kIGV4ZWN1dGFibGUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29ya2luZyBzdGFjay4gVGhlIGZhY3QgdGhhdCBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gVFJVRSBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFRoYXQgY29uZmlybXMgb3VyIGh1bmNoOiB3ZSBuZWVkIHRvIGludmVzdGlnYXRlIHRoaXMgdGhvcm91Z2hseS4KCk5vdywgbGV0JiMzOTtzIHBpbnBvaW50IHRoZSBhcmVhcyBvZiBncmVhdGVzdCBpbnRlcmVzdC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3NlZCBzeW1ib2xzLCBhbmQgdGhlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuICBgaXBfdHVubmVsX3htaXRgLCBgdG5sX3VwZGF0ZV9wbXR1YCwgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgYXJlIHRoZSBpbW1lZGlhdGUgdGFyZ2V0cy4gYGlwX3R1bm5lbF94bWl0YCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YCBhcmUgKmV4cG9ydGVkKiwgbWVhbmluZyB0aGV5IGNhbiBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIFNwZWNpZmljYWxseSwgYEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF94bWl0KWAgYW5kIGBFWFBPUlRfU1lNQk9MX0dQTChpcF9tZF90dW5uZWxfeG1pdClgIGNvbmZpcm0gdGhpcy4gIGB0bmxfdXBkYXRlX3BtdHVgLCBhbHRob3VnaCBzdGF0aWMsIGlzIGFsc28gaW50ZXJlc3Rpbmcgc2luY2UgaXQgZ2V0cyBjYWxsZWQgYnkgYGlwX3R1bm5lbF94bWl0YCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gVGhlIGZhY3QgdGhhdCBgdG5sX3VwZGF0ZV9wbXR1YCBpcyAqbW9kaWZpZWQqIGlzIGRlZmluaXRlbHkgYSByZWQgZmxhZy4gIFRoaXMgc3VnZ2VzdHMgdGhhdCB3aGF0ZXZlciBpcyBoYXBwZW5pbmcgZHVyaW5nIFBNVFUgdXBkYXRlcywgc3BlY2lmaWNhbGx5IHdoZW4gY2FsbGVkIHdpdGhpbiB0aGUgeG1pdCBwYXRocywgd2FycmFudHMgY2xvc2VyIHNjcnV0aW55LgoKRmluYWxseSwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuICBMb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgYENPTkZJR19ORVRfSVBfVFVOTkVMYCBpcyB0cmlzdGF0ZSBhbmQgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19ORVRfSVBJUGAsIGV0Yy4gIE9mIGNvdXJzZSwgYENPTkZJR19JTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGVudGlyZSBgbmV0L2lwdjRgIHN1YnRyZWUuICBJdCYjMzk7cyB1c2VmdWwgdGhhdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBzZWxlY3QgYE5FVF9JUF9UVU5ORUxgIGFyZSBrbm93bi4gVGhpcyBpcyBjcml0aWNhbCBmb3IgZnV6emluZyBjYW1wYWlnbnMgYW5kIGRldGVybWluaW5nIHBvdGVudGlhbCBpbXBhY3QuIFdlIG5vdyBoYXZlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfSVBfVFVOTkVMfHNlbGVjdCBORVRfSVBfVFVOTkVMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE2NC1cdHNlbGVjdCBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODA9Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTg1LVxubmV0L2lwdjQvS2NvbmZpZzoxODY6Y29uZmlnIE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctMTg3LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTE5Mj1jb25maWcgTkVUX0lQR1JFXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTQtXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxubmV0L2lwdjQvS2NvbmZpZzoxOTU6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy0xOTYtXHRoZWxwXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxuLS1cbm5ldC9pcHY0L0tjb25maWctMzA2LVx0c2VsZWN0IElORVRfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnOjMwNzpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cdHNlbGVjdCBYRlJNXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMxNy1cdHRyaXN0YXRlXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2NC9LY29uZmlnLTMxOS1cdGRlZmF1bHQgblxuLS1cbm5ldC9pcHY2L0tjb25maWc9MTUwPWNvbmZpZyBJUFY2X1ZUSVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTUyLVx0c2VsZWN0IElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnOjE1MzpcdHNlbGVjdCBORVRfSVBfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTE1NC1cdHNlbGVjdCBYRlJNXG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNjI9Y29uZmlnIElQVjZfU0lUXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjQtXHRzZWxlY3QgSU5FVF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWc6MTY1Olx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMTY2LVx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTIxMD1jb25maWcgSVBWNl9HUkVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIxMi1cdHNlbGVjdCBJUFY2X1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZzoyMTM6XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMTQtXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk5MgoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEtlcm5lbCBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgSVAgdHVubmVscyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IEtjb25maWcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGVpdGhlciBgTkVUX0lQX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBvciBgTkVUX0lQSVBgIGlzIGNydWNpYWwuIFRoZSBgTkVUX0lQX1RVTk5FTGAgc3ltYm9sIGRpcmVjdGx5IGxpbmtzIHRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgd2hlcmUgYGlwX3R1bm5lbC5vYCBpcyBidWlsdC4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHdoaWNoIGxldmVyYWdlcyBlbmNhcHN1bGF0aW9uLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyBkb3VibGUtY2hlY2sgYE5FVF9GT1VgIHRvIGVuc3VyZSBpdCwgYWxvbmcgd2l0aCBgTkVUX0ZPVV9JUF9UVU5ORUxTYCwgaXMgYWNjb3VudGVkIGZvci4KCkkmIzM5O3ZlIGdvdCB0aGUgcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBhbmQgdGhlIGtleSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRfSVBfVFVOTkVMYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBJUGAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC4KClRoZSBmb2N1cyBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24gc2hvdWxkIGJlIG9uIGBGb2N1c1N5bWJvbHNgOiBgaXBfdHVubmVsX3htaXRgLCBgaXBfbWRfdHVubmVsX3htaXRgLCBhbmQgYHRubF91cGRhdGVfcG10dWAuCgpJJiMzOTttIG1ha2luZyBzdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1ha2Ugc2Vuc2UgaW4gcmVsYXRpb24gdG8gb25lIGFub3RoZXIuIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgY2hlY2ssIHRvIGVuc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhY3R1YWxseSBhIHN5bWJvbCBpbiBgaXBfdHVubmVsLm9gLCB1bmxlc3MsIG9mIGNvdXJzZSwgaXQmIzM5O3MgaW5saW5lZC4gRXZlbiBpZiBpdCYjMzk7cyBpbmxpbmVkLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgd2lsbCBiZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LgoKT2theSwgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgYW5hbHlzaXMuIFRpbWUgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtORVRfRk9VX0lQX1RVTk5FTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtpcF9tZF90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDt0bmxfdXBkYXRlX3BtdHUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7TkVUX0ZPVV9JUF9UVU5ORUxTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBfbWRfdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7dG5sX3VwZGF0ZV9wbXR1JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgc25hcHNob3RzIGB0dW5uZWwtXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxuXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXG4tIENvbmN1cnJlbmN5IGlzc3VlcyBhbmQgZGF0YSByYWNlcyBhcmUgdGFyZ2V0ZWQgYnkgS0NTQU4vTE9DS0RFUC5cbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC01MTIsMTQgJiM0Mzs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTsKIHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCwKLQkJCSAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQpCiYjNDM7CQkJICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCwKJiM0MzsJCQkgICAgaW50IGVuY2FwX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgcGt0X3NpemU7CiAJaW50IG10dTsKIAogCXR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC0mZ3Q7aGxlbjsKLQlwa3Rfc2l6ZSA9IHNrYi0mZ3Q7bGVuIC0gdHVubmVsX2hsZW47CiYjNDM7CXBrdF9zaXplID0gc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuOwogCXBrdF9zaXplIC09IGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA6IDA7CiAKIAlpZiAoZGYpIHsKQEAgLTYyOSw3ICYjNDM7NjMwLDcgQEAgdm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS0mZ3Q7dHVuX2ZsYWdzKSkKIAkJZGYgPSBodG9ucyhJUF9ERik7CiAJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLAotCQkJICAgIGtleS0mZ3Q7dS5pcHY0LmRzdCwgdHJ1ZSkpIHsKJiM0MzsJCQkgICAga2V5LSZndDt1LmlwdjQuZHN0LCB0cnVlLCAwKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTY3MSw2ICYjNDM7NjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaDsKIAl1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tOwkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCkBAIC02ODAsNiAmIzQzOzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlib29sIG1kID0gZmFsc2U7CiAJYm9vbCBjb25uZWN0ZWQ7CiAJaW50IGVycl9jb3VudDsKJiM0MzsJaW50IGVuY2FwX2hsZW47CiAJdTggdG9zLCB0dGw7CiAJX19iZTMyIGRzdDsKIAlfX2JlMTYgZGY7CkBAIC03NjUsNyAmIzQzOzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgdHVubmVsLSZndDtuZXQsIFJFQURfT05DRSh0dW5uZWwtJmd0O3Bhcm1zLmxpbmspLAogCQkJICAgIHR1bm5lbC0mZ3Q7ZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7CiAKLQlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDt0dW5uZWwtJmd0O2VuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKQomIzQzOwkvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqLwomIzQzOwlpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC0mZ3Q7ZW5jYXApOwomIzQzOwllbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbigmYW1wO2lwZW5jYXApOwomIzQzOwlpZiAoZW5jYXBfaGxlbiAmbHQ7IDApCiAJCWdvdG8gdHhfZXJyb3I7CiAKIAlpZiAoY29ubmVjdGVkICZhbXA7JmFtcDsgbWQpIHsKQEAgLTgwMyw3ICYjNDM7ODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSAmYW1wOyZhbXA7ICF0dW5uZWwtJmd0O2lnbm9yZV9kZikKIAkJZGYgfD0gKGlubmVyX2lwaC0mZ3Q7ZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKTsKIAotCWlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHsKJiM0MzsJaWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLAomIzQzOwkJCSAgICBlbmNhcF9obGVuKSkgewogCQlpcF9ydF9wdXQocnQpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KQEAgLTgzNCw3ICYjNDM7ODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCW1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LSZndDtkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKQotCQkJJiM0MzsgcnQtJmd0O2RzdC5oZWFkZXJfbGVuICYjNDM7IGlwX2VuY2FwX2hsZW4oJmFtcDt0dW5uZWwtJmd0O2VuY2FwKTsKJiM0MzsJCQkmIzQzOyBydC0mZ3Q7ZHN0LmhlYWRlcl9sZW4gJiM0MzsgZW5jYXBfaGxlbjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7CiAJCWlwX3J0X3B1dChydCk7CkBAIC04NDUsNiAmIzQzOzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTsKIAomIzQzOwlpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgJmFtcDtpcGVuY2FwLCAmYW1wO3Byb3RvY29sLCAmYW1wO2ZsNCkgJmx0OyAwKSB7CiYjNDM7CQlpcF9ydF9wdXQocnQpOwomIzQzOwkJZ290byB0eF9lcnJvcjsKJiM0MzsJfQomIzQzOwogCWlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCwKIAkJICAgICAgZGYsICFuZXRfZXEodHVubmVsLSZndDtuZXQsIGRldl9uZXQoZGV2KSksIDApOwogCXJldHVybjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMzQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKktNU0FOIEZ1enppbmcgQ29uc2lkZXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBqdXN0aWZpZXMgZmlyaW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTGV0JiMzOTtzIGRpZyBpbi4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBwYXRjaCBkaWZmLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQsICp3aHkqLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBzYWZldHkuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXImIzM5O3MgZmFzdGVzdCBhbmQgbW9zdCBlZmZpY2llbnQg4oCTIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AgaXRzZWxmLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoYXQgcGFydCBvZiB0aGUgbmV0d29ya2luZyBzdGFjayBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIEtub3dpbmcgdGhhdCBjb2RlIGxpa2UgdGhlIGJhY2sgb2YgbXkgaGFuZCB3aWxsIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSBpZiBLTVNBTiBmdXp6aW5nIGlzIHdhcnJhbnRlZCwgb3IgaWYgS0FTQU4gYWxvbmUgaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfdHVubmVsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NTA6XHRcdFx0aWYgKCFtZClcbiA3NTE6XHRcdFx0XHRjb25uZWN0ZWQgPSBmYWxzZTtcbiA3NTI6XHRcdH1cbiA3NTM6XHRcbiA3NTQ6XHRcdHRvcyA9IHRubF9wYXJhbXMtXHUwMDNldG9zO1xuIDc1NTpcdFx0aWYgKHRvcyBcdTAwMjYgMHgxKSB7XG4gNzU2Olx0XHRcdHRvcyBcdTAwMjY9IH4weDE7XG4gNzU3Olx0XHRcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xuIDc1ODpcdFx0XHRcdHRvcyA9IGlubmVyX2lwaC1cdTAwM2V0b3M7XG4gNzU5Olx0XHRcdFx0Y29ubmVjdGVkID0gZmFsc2U7XG4gNzYwOlx0XHRcdH0gZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xuIDc2MTpcdFx0XHRcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKTtcbiA3NjI6XHRcdFx0XHRjb25uZWN0ZWQgPSBmYWxzZTtcbiA3NjM6XHRcdFx0fVxuIDc2NDpcdFx0fVxuIDc2NTpcdFxuIDc2NjpcdFx0aXBfdHVubmVsX2luaXRfZmxvdyhcdTAwMjZmbDQsIHByb3RvY29sLCBkc3QsIHRubF9wYXJhbXMtXHUwMDNlc2FkZHIsXG4gNzY3Olx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSwgdG9zIFx1MDAyNiBJTkVUX0RTQ1BfTUFTSyxcbiA3Njg6XHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZW5ldCwgUkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKSxcbiA3Njk6XHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZWZ3bWFyaywgc2tiX2dldF9oYXNoKHNrYiksIDApO1xuIDc3MDpcdFxuIDc3MTpcdFx0LyogU25hcHNob3QgZW5jYXA7IGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gdXBkYXRlIGl0IGNvbmN1cnJlbnRseS4gKi9cbiA3NzI6XHRcdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbiA3NzM6XHRcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuIDc3NDpcdFx0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4gNzc1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gNzc2Olx0XG4gNzc3Olx0XHRpZiAoY29ubmVjdGVkIFx1MDAyNlx1MDAyNiBtZCkge1xuIDc3ODpcdFx0XHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIHR1bl9pbmZvKTtcbiA3Nzk6XHRcdFx0aWYgKHVzZV9jYWNoZSlcbiA3ODA6XHRcdFx0XHRydCA9IGRzdF9jYWNoZV9nZXRfaXA0KFx1MDAyNnR1bl9pbmZvLVx1MDAzZWRzdF9jYWNoZSxcbiA3ODE6XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmZsNC5zYWRkcik7XG4gNzgyOlx0XHR9IGVsc2Uge1xuIDc4MzpcdFx0XHRydCA9IGNvbm5lY3RlZCA/IGRzdF9jYWNoZV9nZXRfaXA0KFx1MDAyNnR1bm5lbC1cdTAwM2Vkc3RfY2FjaGUsXG4gNzg0Olx0XHRcdFx0XHRcdFx0XHUwMDI2Zmw0LnNhZGRyKSA6IE5VTEw7XG4gNzg1Olx0XHR9XG4gNzg2Olx0XG4gNzg3Olx0XHRpZiAoIXJ0KSB7XG4gNzg4Olx0XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xuIDc4OTpcdFxuIDc5MDpcdFx0XHRpZiAoSVNfRVJSKHJ0KSkge1xuIDc5MTpcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9jYXJyaWVyX2Vycm9ycyk7XG4gNzkyOlx0XHRcdFx0Z290byB0eF9lcnJvcjtcbiA3OTM6XHRcdFx0fVxuIDc5NDpcdFx0XHRpZiAodXNlX2NhY2hlKVxuIDc5NTpcdFx0XHRcdGRzdF9jYWNoZV9zZXRfaXA0KFx1MDAyNnR1bl9pbmZvLVx1MDAzZWRzdF9jYWNoZSwgXHUwMDI2cnQtXHUwMDNlZHN0LFxuIDc5NjpcdFx0XHRcdFx0XHQgIGZsNC5zYWRkcik7XG4gNzk3Olx0XHRcdGVsc2UgaWYgKCFtZCBcdTAwMjZcdTAwMjYgY29ubmVjdGVkKVxuIDc5ODpcdFx0XHRcdGRzdF9jYWNoZV9zZXRfaXA0KFx1MDAyNnR1bm5lbC1cdTAwM2Vkc3RfY2FjaGUsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiA3OTk6XHRcdFx0XHRcdFx0ICBmbDQuc2FkZHIpO1xuIDgwMDpcdFx0fVxuIDgwMTpcdFxuIDgwMjpcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgPT0gZGV2KSB7XG4gODAzOlx0XHRcdGlwX3J0X3B1dChydCk7XG4gODA0Olx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCBjb2xsaXNpb25zKTtcbiA4MDU6XHRcdFx0Z290byB0eF9lcnJvcjtcbiA4MDY6XHRcdH1cbiA4MDc6XHRcbiA4MDg6XHRcdGRmID0gdG5sX3BhcmFtcy1cdTAwM2VmcmFnX29mZjtcbiA4MDk6XHRcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcdTAwMjZcdTAwMjYgIXR1bm5lbC1cdTAwM2VpZ25vcmVfZGYpXG4gODEwOlx0XHRcdGRmIHw9IChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSk7XG4gODExOlx0XG4gODEyOlx0XHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXG4gODEzOlx0XHRcdFx0ICAgIGVuY2FwX2hsZW4pKSB7XG4gODE0Olx0XHRcdGlwX3J0X3B1dChydCk7XG4gODE1Olx0XHRcdGdvdG8gdHhfZXJyb3I7XG4gODE2Olx0XHR9XG4gODE3Olx0XG4gODE4Olx0XHRlcnJfY291bnQgPSBSRUFEX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCk7XG4gODE5Olx0XHRpZiAoZXJyX2NvdW50IFx1MDAzZSAwKSB7XG4gODIwOlx0XHRcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxuIDgyMTpcdFx0XHRcdFx0UkVBRF9PTkNFKHR1bm5lbC1cdTAwM2VlcnJfdGltZSkgJiM0MzsgSVBUVU5ORUxfRVJSX1RJTUVPKSkge1xuIDgyMjpcdFx0XHRcdFdSSVRFX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCwgZXJyX2NvdW50IC0gMSk7XG4gODIzOlx0XG4gODI0Olx0XHRcdFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xuIDgyNTpcdFx0XHR9IGVsc2Uge1xuIDgyNjpcdFx0XHRcdFdSSVRFX09OQ0UodHVubmVsLVx1MDAzZWVycl9jb3VudCwgMCk7XG4gODI3Olx0XHRcdH1cbiA4Mjg6XHRcdH1cbiA4Mjk6XHRcbiA4MzA6XHRcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpbm5lcl9pcGgsIHNrYik7XG4gODMxOlx0XHR0dGwgPSB0bmxfcGFyYW1zLVx1MDAzZXR0bDtcbiA4MzI6XHRcdGlmICh0dGwgPT0gMCkge1xuIDgzMzpcdFx0XHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXG4gODM0Olx0XHRcdFx0dHRsID0gaW5uZXJfaXBoLVx1MDAzZXR0bDtcbiA4MzU6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiA4MzY6XHRcdFx0ZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcbiA4Mzc6XHRcdFx0XHR0dGwgPSAoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKS1cdTAwM2Vob3BfbGltaXQ7XG4gODM4Olx0I2VuZGlmXG4gODM5Olx0XHRcdGVsc2VcbiA4NDA6XHRcdFx0XHR0dGwgPSBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gODQxOlx0XHR9XG4gODQyOlx0XG4gODQzOlx0XHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwaGRyKVxuIDg0NDpcdFx0XHRcdCYjNDM7IHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuICYjNDM7IGVuY2FwX2hsZW47XG4gODQ1Olx0XG4gODQ2Olx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xuIDg0NzpcdFx0XHRpcF9ydF9wdXQocnQpO1xuIDg0ODpcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZHJvcHBlZCk7XG4gODQ5Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzE2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHMsIGdlYXJlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBgdG5sX3VwZGF0ZV9wbXR1YCBpbiBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgemVybyBpbiBvbiBsaW5lcyA1MTAtNTUwIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGB0bmxfdXBkYXRlX3BtdHVgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgbGluY2hwaW4gZm9yIGFkanVzdGluZyBQTVRVIHZhbHVlcyBpbiBhIHR1bm5lbCBjb250ZXh0LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBsb2dpYyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IE1UVS1yZWxhdGVkIGlzc3VlcyBvciBvcHRpbWl6aW5nIHR1bm5lbCBwZXJmb3JtYW5jZS4gSSB3YW50IHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbnRlcmZhY2VzLCBob3cgaXQgaGFuZGxlcyBmcmFnbWVudGF0aW9uLCBhbmQsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZCwgaG93IGl0IGRlYWxzIHdpdGggcGF0aCBNVFUgZGlzY292ZXJ5IGFuZCBhbnkgcmVsYXRlZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSBhbGwgdGhlIFBNVFUgJiMzNDttYWdpYyYjMzQ7IGhhcHBlbnMuIEdpdmVuIHRoZSBjb2RlJiMzOTtzIGNvbXBsZXhpdHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHVzZSBvZiBhbnkgbG9ja2luZyBtZWNoYW5pc21zIGFuZCBjb25jdXJyZW5jeSBjb25zaWRlcmF0aW9ucywgZXNwZWNpYWxseSBpZiB3ZSBoYXZlIG11bHRpcGxlIHR1bm5lbCBpbnN0YW5jZXMuIE15IGV4cGVydCBleWUgd2lsbCBiZSBsYXNlci1mb2N1c2VkIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgd2l0aGluIHRoYXQgcGFydGljdWxhciBzZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTA6XHRFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xuIDUxMTpcdFxuIDUxMjpcdHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gNTEzOlx0XHRcdFx0ICAgIHN0cnVjdCBydGFibGUgKnJ0LCBfX2JlMTYgZGYsXG4gNTE0Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxuIDUxNTpcdFx0XHRcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXG4gNTE2Olx0XHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIDUxNzpcdHtcbiA1MTg6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gNTE5Olx0XHRpbnQgcGt0X3NpemU7XG4gNTIwOlx0XHRpbnQgbXR1O1xuIDUyMTpcdFxuIDUyMjpcdFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4gNTIzOlx0XHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xuIDUyNDpcdFx0cGt0X3NpemUgLT0gZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XG4gNTI1Olx0XG4gNTI2Olx0XHRpZiAoZGYpIHtcbiA1Mjc6XHRcdFx0bXR1ID0gZHN0X210dShcdTAwMjZydC1cdTAwM2Vkc3QpIC0gKHNpemVvZihzdHJ1Y3QgaXBoZHIpICYjNDM7IHR1bm5lbF9obGVuKTtcbiA1Mjg6XHRcdFx0bXR1IC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIDUyOTpcdFx0fSBlbHNlIHtcbiA1MzA6XHRcdFx0bXR1ID0gc2tiX3ZhbGlkX2RzdChza2IpID8gZHN0X210dShza2JfZHN0KHNrYikpIDogZGV2LVx1MDAzZW10dTtcbiA1MzE6XHRcdH1cbiA1MzI6XHRcbiA1MzM6XHRcdGlmIChza2JfdmFsaWRfZHN0KHNrYikpXG4gNTM0Olx0XHRcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XG4gNTM1Olx0XG4gNTM2Olx0XHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xuIDUzNzpcdFx0XHRpZiAoIXNrYl9pc19nc28oc2tiKSBcdTAwMjZcdTAwMjZcbiA1Mzg6XHRcdFx0ICAgIChpbm5lcl9pcGgtXHUwMDNlZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSkgXHUwMDI2XHUwMDI2XG4gNTM5Olx0XHRcdCAgICBtdHUgXHUwMDNjIHBrdF9zaXplKSB7XG4gNTQwOlx0XHRcdFx0aWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTtcbiA1NDE6XHRcdFx0XHRyZXR1cm4gLUUyQklHO1xuIDU0MjpcdFx0XHR9XG4gNTQzOlx0XHR9XG4gNTQ0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gNTQ1Olx0XHRlbHNlIGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcbiA1NDY6XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XG4gNTQ3Olx0XHRcdF9fYmUzMiBkYWRkcjtcbiA1NDg6XHRcbiA1NDk6XHRcdFx0cnQ2ID0gc2tiX3ZhbGlkX2RzdChza2IpID8gZHN0X3J0Nl9pbmZvKHNrYl9kc3Qoc2tiKSkgOlxuIDU1MDpcdFx0XHRcdFx0XHQgICBOVUxMO1xuIDU1MTpcdFx0XHRkYWRkciA9IG1kID8gZHN0IDogdHVubmVsLVx1MDAzZXBhcm1zLmlwaC5kYWRkcjtcbiA1NTI6XHRcbiA1NTM6XHRcdFx0aWYgKHJ0NiBcdTAwMjZcdTAwMjYgbXR1IFx1MDAzYyBkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgXHUwMDI2XHUwMDI2XG4gNTU0Olx0XHRcdFx0ICAgbXR1IFx1MDAzZT0gSVBWNl9NSU5fTVRVKSB7XG4gNTU1Olx0XHRcdFx0aWYgKChkYWRkciBcdTAwMjZcdTAwMjYgIWlwdjRfaXNfbXVsdGljYXN0KGRhZGRyKSkgfHxcbiA1NTY6XHRcdFx0XHQgICAgcnQ2LVx1MDAzZXJ0NmlfZHN0LnBsZW4gPT0gMTI4KSB7XG4gNTU3Olx0XHRcdFx0XHRydDYtXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XG4gNTU4Olx0XHRcdFx0XHRkc3RfbWV0cmljX3NldChza2JfZHN0KHNrYiksIFJUQVhfTVRVLCBtdHUpO1xuIDU1OTpcdFx0XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDb21taXQgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBjb21taXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgKndoYXQqLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHByb2JsZW0gdGhpcyBhZGRyZXNzZXMuIEkmIzM5O20gbG9va2luZyBiZXlvbmQgdGhlIGNvZGU7IHdoYXQgd2FzIHRoZSB0cmlnZ2VyPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbT8gUGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5PyBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBzcGVjaWZpY3MuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBhbmQgYGlwX2VuY2FwX2hsZW5gIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgKG9yIHdoYXRldmVyIHRoaXMgc3BlY2lmaWMgc3lzdGVtIHVzZXMpLiBUaGVzZSBhcmUgbGlrZWx5IGtleSBlbGVtZW50cywgZ2l2ZW4gdGhlaXIgbWVudGlvbi4gVGhleSBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZSB0byBzb21lIGZvcm0gb2YgSVAgZW5jYXBzdWxhdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0dW5uZWxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBoZXJlIGFyZSBhZmZlY3RpbmcgdGhvc2UgZnVuY3Rpb25zL3ZhcmlhYmxlcy4gQW55IG1vZGlmaWNhdGlvbnMgdG8gdGhvc2UgYXJlYXMgYXJlIGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGNoYW5nZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaGVhZGVyIHNpemUgaXNzdWVzPyBBbnkgcG90ZW50aWFsIGZyYWdtZW50YXRpb24gY2hhbmdlcz8gRW5jcnlwdGlvbiBjb25jZXJucz8gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBhcmUgdXNlZCwgYW5kIGhvdyBkb2VzIHRoaXMgdXBkYXRlIGludGVyYWN0PyBJdCBhbGwgYm9pbHMgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBfZW5jYXBfaGxlbnxpcF90dW5uZWxfZW5jYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZm91X2NvcmUuYz05MDM9c3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBmb3VfbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTkxNS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTE2OnNpemVfdCBmb3VfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTIwPUVYUE9SVF9TWU1CT0woZm91X2VuY2FwX2hsZW4pO1xubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjkyMjpzaXplX3QgZ3VlX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTIzLXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkzOD1FWFBPUlRfU1lNQk9MKGd1ZV9lbmNhcF9obGVuKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTM5LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NDEtXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9OTU0PUVYUE9SVF9TWU1CT0woX19mb3VfYnVpbGRfaGVhZGVyKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxubmV0L2lwdjQvZm91X2NvcmUuYzo5NTY6aW50IF9fZ3VlX2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy05NTctXHRcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDMwLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTAzMi1cdFx0XHQgIHN0cnVjdCBmbG93aTQgKmZsNCwgdTggKnByb3RvY29sLCBfX2JlMTYgc3BvcnQpXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDUwOnN0YXRpYyBpbnQgZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDUxLVx0XHRcdCAgICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEwNjc6c3RhdGljIGludCBndWVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXHRcdFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTA5Nj1zdGF0aWMgaW50IGd1ZV9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYxLVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTYyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBmb3VfaXB0dW5fb3BzID0ge1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVx0LmVuY2FwX2hsZW4gPSBmb3VfZW5jYXBfaGxlbixcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGd1ZV9pcHR1bl9vcHMgPSB7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjktXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTc1LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNzg6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3OS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExODMtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cdFx0cHJfZXJyKFwmIzM0O2NhbiYjMzk7dCBhZGQgZ3VlIG9wc1xcblwmIzM0Oyk7XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XHRcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTg4LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5My1cbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE5NS17XG5uZXQvaXB2NC9mb3VfY29yZS5jOjExOTY6XHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NzpcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xubmV0L2lwdjQvZm91X2NvcmUuYy0xMTk4LX1cbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDEtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyMDI6c3RhdGljIGludCBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHModm9pZClcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XG4tLVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA2LVxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjA4LXtcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNTYtXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XHRyZXQgPSBpcF90dW5uZWxfZW5jYXBfYWRkX2ZvdV9vcHMoKTtcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1OC1cdGlmIChyZXQgPT0gMClcbi0tXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNjk9c3RhdGljIHZvaWQgX19leGl0IGZvdV9maW5pKHZvaWQpXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xubmV0L2lwdjQvZm91X2NvcmUuYzoxMjcxOlx0aXBfdHVubmVsX2VuY2FwX2RlbF9mb3Vfb3BzKCk7XG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXHRnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmZvdV9ubF9mYW1pbHkpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjk3Olx0XHRcdFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk1LXtcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktXHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMDpcdFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDEtXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDU4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDU5OmludCBpcF90dW5uZWxfZW5jYXBfYWRkX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDYwLVx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbnVtKVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ2NC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2NTpcdHJldHVybiAhY21weGNoZygoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKiopXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjYtXHRcdFx0XHUwMDI2aXB0dW5fZW5jYXBzW251bV0sXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY4LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3MC1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ3MTppbnQgaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcyxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3Mi1cdFx0XHQgICAgdW5zaWduZWQgaW50IG51bSlcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzgtXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0Nzk6XHRyZXQgPSAoY21weGNoZygoY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKiopXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODAtXHRcdCAgICAgICBcdTAwMjZpcHR1bl9lbmNhcHNbbnVtXSxcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00ODYtfVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg3OkVYUE9SVF9TWU1CT0woaXBfdHVubmVsX2VuY2FwX2RlbF9vcHMpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDg5OmludCBpcF90dW5uZWxfZW5jYXBfc2V0dXAoc3RydWN0IGlwX3R1bm5lbCAqdCxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5MDpcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmlwZW5jYXApXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTEte1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ5NS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5NjpcdGhsZW4gPSBpcF9lbmNhcF9obGVuKGlwZW5jYXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNDk3LVx0aWYgKGhsZW4gXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNTA5LX1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjUxMDpFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNTExLVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTU3Mj12b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjA1LVx0aWYgKCF0dW5uZWxfaGxlbilcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYwNjpcdFx0dHVubmVsX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNnR1bl9pbmZvLVx1MDAzZWVuY2FwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYwNy1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYwODpcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5faW5mby1cdTAwM2VlbmNhcCwgXHUwMDI2cHJvdG8sIFx1MDAyNmZsNCkgXHUwMDNjIDApXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDktXHRcdGdvdG8gdHhfZXJyb3I7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjcwPXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzQtXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gTlVMTDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjY3NTpcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTY3Ni1cdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTc3Mi1cdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjc3MzpcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNzc0LVx0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtODU0LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODU1Olx0aWYgKGlwX3R1bm5lbF9lbmNhcChza2IsIFx1MDAyNmlwZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTYtXHRcdGlwX3J0X3B1dChydCk7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00MS1cbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM6NDI6Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgX19yY3UgKlxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00My1cdFx0aXB0dW5fZW5jYXBzW01BWF9JUFRVTl9FTkNBUF9PUFNdIF9fcmVhZF9tb3N0bHk7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYz0xMTI5PWJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzoxMTMwOlx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jLTExMzEte1xuLS1cbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDcwLVx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVx1MDAzZXRiO1xubmV0L2lwdjQvaXBpcC5jOjQ3MTpcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbm5ldC9pcHY0L2lwaXAuYy00NzItXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xuLS1cbm5ldC9pcHY0L2lwaXAuYy00NzUtXHRpZiAoaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoZGF0YSwgXHUwMDI2aXBlbmNhcCkpIHtcbm5ldC9pcHY0L2lwaXAuYzo0NzY6XHRcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXHUwMDI2aXBlbmNhcCk7XG5uZXQvaXB2NC9pcGlwLmMtNDc3LVxuLS1cbm5ldC9pcHY0L2lwaXAuYz00ODc9c3RhdGljIGludCBpcGlwX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcGlwLmMtNDkxLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcGlwLmM6NDkyOlx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xubmV0L2lwdjQvaXBpcC5jLTQ5My1cdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4tLVxubmV0L2lwdjQvaXBpcC5jLTQ5Ny1cdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcdTAwMjZpcGVuY2FwKSkge1xubmV0L2lwdjQvaXBpcC5jOjQ5ODpcdFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcdTAwMjZpcGVuY2FwKTtcbm5ldC9pcHY0L2lwaXAuYy00OTktXG4tLVxubmV0L2lwdjQvdWRwLmM9ODE3PXN0YXRpYyBpbnQgX191ZHA0X2xpYl9lcnJfZW5jYXBfbm9fc2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8pXG4tLVxubmV0L2lwdjQvdWRwLmMtODIyLVx0XHRpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbyk7XG5uZXQvaXB2NC91ZHAuYzo4MjM6XHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICplbmNhcDtcbm5ldC9pcHY0L3VkcC5jLTgyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGRlZmluaXRpb25zLCBwdWxsaW5nIGZyb20gbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBuZXR3b3JrIGVuY2Fwc3VsYXRpb246CgoqKkRlY2lwaGVyaW5nIGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAuICBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIG9mIElQIGVuY2Fwc3VsYXRpb24sIGFuZCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyAtIGl0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBhZGRpbmcgaGVhZGVycyBhbmQgZnJhbWluZyBkYXRhIGZvciB0dW5uZWxpbmcgYW5kIG90aGVyIGVuY2Fwc3VsYXRpb24gc2NlbmFyaW9zLiBgaXBfZW5jYXBfaGxlbmAgaW1tZWRpYXRlbHkgc2lnbmFscyAmIzM0O2hlYWRlciBsZW5ndGgmIzM0Oy4gSSYjMzk7bSBiZXR0aW5nIHRoaXMgaXMgYSB2YWx1ZSwgcHJvYmFibHkgYW4gaW50ZWdlciwgdGhhdCB0ZWxscyB0aGUgSVAgc3RhY2sgKmV4YWN0bHkqIGhvdyBtYW55IGJ5dGVzIG5lZWQgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBvcmlnaW5hbCBwYWNrZXQgd2hlbiBpdCYjMzk7cyBiZWluZyBlbmNhcHN1bGF0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSB1cHBlciBsYXllcnMgdG8gY2FsY3VsYXRlIGNoZWNrc3VtcyBhbmQgcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBpbmNvbWluZyBkYXRhLiBJJiMzOTttIHRoaW5raW5nIGl04oCZbGwgYmUgdXNlZCBhdCBib3RoIHRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgc2lkZXMuCgpUaGVuIHRoZXJlJiMzOTtzIGBpcF90dW5uZWxfZW5jYXBgLiBUaGlzIHNjcmVhbXMgJiMzNDt0dW5uZWwgZW5jYXBzdWxhdGlvbiwmIzM0OyBvZiBjb3Vyc2UhIEl0JiMzOTtzIHByb2JhYmx5IGEgc3RydWN0dXJlIG9yIGEgZnVuY3Rpb24gcG9pbnRlciwgaWYgSSB3ZXJlIHRvIGd1ZXNzLCB0aGF0IGhhbmRsZXMgdGhlIGFjdHVhbCBwcm9jZXNzIG9mIGNvbnN0cnVjdGluZyB0aGUgdHVubmVsIGhlYWRlcnMuICBJdCBtaWdodCBpbmNsdWRlIHRoaW5ncyBsaWtlIGFkZGluZyB0aGUgb3V0ZXIgSVAgaGVhZGVyIChpZiBpdCYjMzk7cyBhbiBJUC1pbi1JUCB0dW5uZWwpLCBHUkUgaGVhZGVycywgb3Igb3RoZXIgZW5jYXBzdWxhdGlvbi1zcGVjaWZpYyBmaWVsZHMuIEnigJlkIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSB3b3JraG9yc2UgdGhhdCB3cmFwcyB0aGUgaW5uZXIgcGFja2V0IGluIHRoZSBuZWNlc3NhcnkgdHVubmVsIGZyYW1pbmcsIGVmZmVjdGl2ZWx5IGhpZGluZyB0aGUgb3JpZ2luYWwgSVAgcGF5bG9hZCBhbmQgcHJvdmlkaW5nIGEgc2FmZSBwYXNzYWdlIHRocm91Z2ggc29tZSBuZXR3b3JrLiBJJiMzOTtkIGltYWdpbmUgdGhhdCB0aGlzIGVuY2Fwc3VsYXRlcyB0aGUgZW50aXJlIHByb2NlZHVyZSBvZiBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBJUCBwYWNrZXQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHVzZXMgdGhlc2UgdHdvIGluIGNvbmp1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0d28sIHN1Y2ggYXMsIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBtYWtlcyB1c2Ugb2YgYGlwX2VuY2FwX2hsZW5gIHRvIGNvbnN0cnVjdCB0aGUgZW5jYXBzdWxhdGlvbiBmcmFtZS4gIAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAwNTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF90dW5uZWxfZW5jYXBcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmg9NTI2PXN0YXRpYyBpbmxpbmUgaW50IGlwX2VuY2FwX2hsZW4oc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSlcbi0tXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTQ1LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjU0NjpzdGF0aWMgaW5saW5lIGludCBpcF90dW5uZWxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NDctXHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwX3R1bm5lbHMuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBJUCB0dW5uZWxzLCBhbmQgdGhlIGxpa2VseSBwbGFjZSB0byBmaW5kIHJlbGV2YW50IGRlZmluaXRpb25zIGlzIHRoZSBrZXJuZWwgaGVhZGVyIGZpbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBbmQgSSYjMzk7bSBnb2luZyB0byBzdGFydCBhcm91bmQgbGluZSA1MjA7IHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHNwb3QgdG8gZmluZCBrZXkgZGF0YSBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHNpbWlsYXIgbmV0d29ya2luZyBjb2RlLiBJdCYjMzk7cyBhIHRhcmdldGVkIGFwcHJvYWNoIHJhdGhlciB0aGFuIGEgZnVsbCBjb2RlIHJldmlldyBhdCB0aGlzIHBvaW50LCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gbXkgdGltZS4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMDU6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUxNTpcdFx0ICogYSBiYXNlIG5ldHdvcmsgaGVhZGVyIGluIHNrYi1cdTAwM2VoZWFkLlxuIDUxNjpcdFx0ICovXG4gNTE3Olx0XHRyZWFzb24gPSBwc2tiX21heV9wdWxsX3JlYXNvbihza2IsIG1hY2xlbiAmIzQzOyBuaGxlbik7XG4gNTE4Olx0XHRpZiAocmVhc29uKVxuIDUxOTpcdFx0XHRyZXR1cm4gcmVhc29uO1xuIDUyMDpcdFxuIDUyMTpcdFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY2xlbik7XG4gNTIyOlx0XG4gNTIzOlx0XHRyZXR1cm4gU0tCX05PVF9EUk9QUEVEX1lFVDtcbiA1MjQ6XHR9XG4gNTI1Olx0XG4gNTI2Olx0c3RhdGljIGlubGluZSBpbnQgaXBfZW5jYXBfaGxlbihzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplKVxuIDUyNzpcdHtcbiA1Mjg6XHRcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHM7XG4gNTI5Olx0XHRpbnQgaGxlbiA9IC1FSU5WQUw7XG4gNTMwOlx0XG4gNTMxOlx0XHRpZiAoZS1cdTAwM2V0eXBlID09IFRVTk5FTF9FTkNBUF9OT05FKVxuIDUzMjpcdFx0XHRyZXR1cm4gMDtcbiA1MzM6XHRcbiA1MzQ6XHRcdGlmIChlLVx1MDAzZXR5cGUgXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxuIDUzNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MzY6XHRcbiA1Mzc6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA1Mzg6XHRcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcHR1bl9lbmNhcHNbZS1cdTAwM2V0eXBlXSk7XG4gNTM5Olx0XHRpZiAobGlrZWx5KG9wcyBcdTAwMjZcdTAwMjYgb3BzLVx1MDAzZWVuY2FwX2hsZW4pKVxuIDU0MDpcdFx0XHRobGVuID0gb3BzLVx1MDAzZWVuY2FwX2hsZW4oZSk7XG4gNTQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA1NDI6XHRcbiA1NDM6XHRcdHJldHVybiBobGVuO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW5saW5lIGludCBpcF90dW5uZWxfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA1NDc6XHRcdFx0XHRcdCAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcbiA1NDg6XHRcdFx0XHRcdCAgdTggKnByb3RvY29sLCBzdHJ1Y3QgZmxvd2k0ICpmbDQpXG4gNTQ5Olx0e1xuIDU1MDpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKm9wcztcbiA1NTE6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuIDU1MjpcdFxuIDU1MzpcdFx0aWYgKGUtXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcbiA1NTQ6XHRcdFx0cmV0dXJuIDA7XG4gNTU1Olx0XG4gNTU2Olx0XHRpZiAoZS1cdTAwM2V0eXBlIFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcbiA1NTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTU4Olx0XG4gNTU5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzc1CgkJCQkJCQlvdXRwdXQ6IDI4MgoJCQkJCQkJdGhvdWdodHM6IDk4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBUdW5uZWwgRW5jYXBzdWxhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB3b3VsZC4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBgaXBfdHVubmVsX3htaXRgLiBUaGUgYWRkaXRpb24gb2YgYGVuY2FwX2hsZW5gIGFzIGFuIGFyZ3VtZW50IHRvIGB0bmxfdXBkYXRlX3BtdHVgIGlzIGtleS4gSXQgc2lnbmFscyBhIHNoaWZ0IGluIGhvdyB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgbGVuZ3RoIGlzIGhhbmRsZWQsIGRpcmVjdGx5IGltcGFjdGluZyBwYWNrZXQgc2l6ZSBjYWxjdWxhdGlvbnMsIGFuZCB0aGVyZWZvcmUsIFBNVFUgZGV0ZXJtaW5hdGlvbi4gVGhlIGNoYW5nZSB0byBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIChgc2tiLSZndDtsZW4gJiM0MzsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYCkgaXMgb2J2aW91c2x5IHdoZXJlIHRoaXMgaW1wYWN0IGxpZXMsIGFuZCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGlwX3R1bm5lbF94bWl0YCBub3cgKnNuYXBzaG90cyogdGhlIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgYGRhdGFfcmFjZSh0dW5uZWwtJmd0O2VuY2FwKWAuIFRoaXMgKm11c3QqIGJlIGFib3V0IGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGVuc3VyaW5nIGEgY29uc2lzdGVudCB2aWV3IG9mIHRoZSBlbmNhcHN1bGF0aW9uIHNldHRpbmdzIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIFRoaXMgZW5jYXBzdWxhdGlvbiBvY2N1cnMgcmlnaHQgYmVmb3JlIGBpcHR1bm5lbF94bWl0YCwgYWZ0ZXIgYSBjaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRyb29tLgoKTm93LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlICptdXN0KiB2ZXJpZnkgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrIGV4aXN0cyBoZXJlLiBgaXBlbmNhcGAgaXMgcG9wdWxhdGVkIHZpYSBhIHN0cnVjdCBhc3NpZ25tZW50IGZyb20gYHR1bm5lbC0mZ3Q7ZW5jYXBgLCB0aGlzIGlzIGEgZ29vZCBzaWduLiBgZW5jYXBfaGxlbmAgaXMgZGVyaXZlZCBmcm9tIGBpcGVuY2FwYCB2aWEgYSBkZWRpY2F0ZWQgZnVuY3Rpb24sIGBpcF9lbmNhcF9obGVuKClgLCB3aGljaCwgb24gaXRzIG93biwgc2VlbXMgc2FmZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhbHNvIG5vdCByZWFkaW5nIGFueSB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGl0IHNob3VsZG4mIzM5O3QsIHNpbmNlIGl0JiMzOTtzIG9ubHkgcmVjZWl2aW5nIHRoZSBgZW5jYXBfaGxlbmAgaW50LiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIGlzIHNvbGVseSB1c2VkIGZvciBQTVRVL0lDTVAgY2FsY3VsYXRpb25zIGFuZCBmcmFnbWVudHMsIHNvIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IGlzc3VlcyB0aGVyZS4KCldlIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIElzIHRoZXJlIGFueSBzdHJ1Y3QgcGFkZGluZyBpbmZvLWxlYWtzLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgcmVhZHMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGE/IGBpcGVuY2FwYCBpcyBpbml0aWFsaXplZCB2aWEgc3RydWN0IGFzc2lnbm1lbnQgKmJlZm9yZSogYmVpbmcgdXNlZCBpbiBgaXBfZW5jYXBfaGxlbigpYCBhbmQgYGlwX3R1bm5lbF9lbmNhcCgpYC4gYGVuY2FwX2hsZW5gIGlzIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEFsbCBicmFuY2hlcyByZWx5IG9uIGluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm8gZGF0YSBnb2VzIHRvIHVzZXJzcGFjZS4gVGhpcyBzZWVtcyByb2J1c3QuCgpXaGF0IGJ1Z3MgYXJlIGZpeGVkIG9yIHBvdGVudGlhbGx5IGludHJvZHVjZWQ/IFRoaXMgbG9va3MgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGZpeCBieSBzbmFwc2hvdHRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy4gSXQmIzM5O3MgbW92aW5nIHRoZSBlbmNhcHN1bGF0aW9uICphZnRlciogaGVhZHJvb20gZXhwYW5zaW9uLCB3aGljaCBpcyBzbWFydCwgdG8gcHJldmVudCB3cml0aW5nIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgUE1UVSBjYWxjdWxhdGlvbiBpcyBjb3JyZWN0ZWQgYnkgYWNjb3VudGluZyBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aC4gVGhlc2UgYXJlIGdvb2QgY2hhbmdlcy4KCkZpbmFsbHksIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IEtNU0FOPyBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mbyBsZWFrcyB0byB1c2Vyc3BhY2UuIEJlY2F1c2UgYWxsIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIEtNU0FOLgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2sgdG8gY29uZmlybSB0aGF0IGNvbmNsdXNpb246CgoxLiAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlcnNwYWNlIHdoZXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkLgoyLiAgTm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuCjMuICBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICBCb3VuZHMgY2hlY2tzIGFuZCBsZW5ndGhzIGFyZSBkb25lIHNhZmVseS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0JiMzOTtzIGEgc29saWQgcGF0Y2gsIGFkZHJlc3NpbmcgcmVhbCBjb25jdXJyZW5jeSwgYnVmZmVyLWhhbmRsaW5nLCBhbmQgbG9naWMgY29uY2VybnMgd2l0aG91dCBpbnRyb2R1Y2luZyBLTVNBTi1yZWxldmFudCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDA1OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBkYXRhIHJhY2VzIGFuZCBQTVRVL2hlYWRyb29tIGNhbGN1bGF0aW9ucyBpbiBJUHY0IHR1bm5lbCB0cmFuc21pc3Npb24gKGlwX3R1bm5lbF94bWl0IGFuZCB0bmxfdXBkYXRlX3BtdHUpLiBTcGVjaWZpY2FsbHk6XG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXG4yLiBJdCBhY2NvdW50cyBmb3IgYGVuY2FwX2hsZW5gIGluIGB0bmxfdXBkYXRlX3BtdHVgIGFuZCBkZWZlcnMgY2FsbGluZyBgaXBfdHVubmVsX2VuY2FwKClgIHVudGlsIGFmdGVyIHNrYiBoZWFkcm9vbSBpcyBleHBhbmRlZCB3aXRoIGBza2JfY293X2hlYWQoKWAuXG5cblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxuLSBNZW1vcnkgc2FmZXR5IGJ1Z3MgcmVsYXRlZCB0byBidWZmZXIgaGVhZHJvb20sIHNrYiBib3VuZHMsIGFuZCB1c2UtYWZ0ZXItZnJlZSBhcmUgY292ZXJlZCBieSBLQVNBTi5cbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXG5cblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxuMS4gSXQgc25hcHNob3RzIGB0dW5uZWwtXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxuXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXG4tIENvbmN1cnJlbmN5IGlzc3VlcyBhbmQgZGF0YSByYWNlcyBhcmUgdGFyZ2V0ZWQgYnkgS0NTQU4vTE9DS0RFUC5cbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTowOS4xNDc2MjAwMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzA3MDA3ODk4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBfVFVOTkVMXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBfbWRfdHVubmVsX3htaXRcIixcbiAgICBcInRubF91cGRhdGVfcG10dVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgYW5kIFBNVFUvaGVhZHJvb20gY2FsY3VsYXRpb25zIGluIElQdjQgdHVubmVsIHRyYW5zbWlzc2lvbiAoaXBfdHVubmVsX3htaXQgYW5kIHRubF91cGRhdGVfcG10dSkuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxcbjIuIEl0IGFjY291bnRzIGZvciBgZW5jYXBfaGxlbmAgaW4gYHRubF91cGRhdGVfcG10dWAgYW5kIGRlZmVycyBjYWxsaW5nIGBpcF90dW5uZWxfZW5jYXAoKWAgdW50aWwgYWZ0ZXIgc2tiIGhlYWRyb29tIGlzIGV4cGFuZGVkIHdpdGggYHNrYl9jb3dfaGVhZCgpYC5cXG5cXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcXG4tIE1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSwgc2tiIGJvdW5kcywgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MDkuMTQ3NjI0MjEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ3MTY1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MDE5M2E1MTdmYWY3MjAxNDllZTkyNGViNWRhYjdlMWVjY2FmNzA2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IDlkMTE0YmQ1NzVmOTIuLjQ0N2I0MzViMTBjY2EgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC01MTIsMTQgKzUxMiwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfZW5jYXBfc2V0dXApO1xcbiBzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxcbi1cXHRcXHRcXHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kKVxcbitcXHRcXHRcXHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxcbitcXHRcXHRcXHQgICAgaW50IGVuY2FwX2hsZW4pXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0aW50IHBrdF9zaXplO1xcbiBcXHRpbnQgbXR1O1xcbiBcXG4gXFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVxcdTAwM2VobGVuO1xcbi1cXHRwa3Rfc2l6ZSA9IHNrYi1cXHUwMDNlbGVuIC0gdHVubmVsX2hsZW47XFxuK1xcdHBrdF9zaXplID0gc2tiLVxcdTAwM2VsZW4gKyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW47XFxuIFxcdHBrdF9zaXplIC09IGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIFxcbiBcXHRpZiAoZGYpIHtcXG5AQCAtNjI5LDcgKzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9ET05UX0ZSQUdNRU5UX0JJVCwga2V5LVxcdTAwM2V0dW5fZmxhZ3MpKVxcbiBcXHRcXHRkZiA9IGh0b25zKElQX0RGKTtcXG4gXFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIHR1bm5lbF9obGVuLFxcbi1cXHRcXHRcXHQgICAga2V5LVxcdTAwM2V1LmlwdjQuZHN0LCB0cnVlKSkge1xcbitcXHRcXHRcXHQgICAga2V5LVxcdTAwM2V1LmlwdjQuZHN0LCB0cnVlLCAwKSkge1xcbiBcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuQEAgLTY3MSw2ICs2NzIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XFxuK1xcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XFxuIFxcdHVuc2lnbmVkIGludCBtYXhfaGVhZHJvb207XFx0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cXG4gXFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMO1xcdFxcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXFxuQEAgLTY4MCw2ICs2ODIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGJvb2wgbWQgPSBmYWxzZTtcXG4gXFx0Ym9vbCBjb25uZWN0ZWQ7XFxuIFxcdGludCBlcnJfY291bnQ7XFxuK1xcdGludCBlbmNhcF9obGVuO1xcbiBcXHR1OCB0b3MsIHR0bDtcXG4gXFx0X19iZTMyIGRzdDtcXG4gXFx0X19iZTE2IGRmO1xcbkBAIC03NjUsNyArNzY4LDEwIEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VwYXJtcy5saW5rKSxcXG4gXFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XFxuIFxcbi1cXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXFx1MDAyNnR1bm5lbC1cXHUwMDNlZW5jYXAsIFxcdTAwMjZwcm90b2NvbCwgXFx1MDAyNmZsNCkgXFx1MDAzYyAwKVxcbitcXHQvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqL1xcbitcXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cXHUwMDNlZW5jYXApO1xcbitcXHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcXHUwMDI2aXBlbmNhcCk7XFxuK1xcdGlmIChlbmNhcF9obGVuIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byB0eF9lcnJvcjtcXG4gXFxuIFxcdGlmIChjb25uZWN0ZWQgXFx1MDAyNlxcdTAwMjYgbWQpIHtcXG5AQCAtODAzLDcgKzgwOSw4IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFxcdTAwMjZcXHUwMDI2ICF0dW5uZWwtXFx1MDAzZWlnbm9yZV9kZilcXG4gXFx0XFx0ZGYgfD0gKGlubmVyX2lwaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9ERikpO1xcbiBcXG4tXFx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlKSkge1xcbitcXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXFxuK1xcdFxcdFxcdCAgICBlbmNhcF9obGVuKSkge1xcbiBcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiBcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiBcXHR9XFxuQEAgLTgzNCw3ICs4NDEsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdG1heF9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKHJ0LVxcdTAwM2Vkc3QuZGV2KSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpXFxuLVxcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgaXBfZW5jYXBfaGxlbihcXHUwMDI2dHVubmVsLVxcdTAwM2VlbmNhcCk7XFxuK1xcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcXG4gXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7XFxuIFxcdFxcdGlwX3J0X3B1dChydCk7XFxuQEAgLTg0NSw2ICs4NTIsMTEgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XFxuIFxcbitcXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXFx1MDAyNmlwZW5jYXAsIFxcdTAwMjZwcm90b2NvbCwgXFx1MDAyNmZsNCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGlwX3J0X3B1dChydCk7XFxuK1xcdFxcdGdvdG8gdHhfZXJyb3I7XFxuK1xcdH1cXG4rXFxuIFxcdGlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCxcXG4gXFx0XFx0ICAgICAgZGYsICFuZXRfZXEodHVubmVsLVxcdTAwM2VuZXQsIGRldl9uZXQoZGV2KSksIDApO1xcbiBcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjA5LjU5MzA2Nzg4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUyMDAxODEwNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQX1RVTk5FTFwiLFxuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiTkVUX0ZPVV9JUF9UVU5ORUxTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3htaXRcIixcbiAgICBcImlwX21kX3R1bm5lbF94bWl0XCIsXG4gICAgXCJ0bmxfdXBkYXRlX3BtdHVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBQTVRVIGNhbGN1bGF0aW9uIGFuZCB0dW5uZWwgZW5jYXBzdWxhdGlvbiBoYW5kbGluZyBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiB0aGUgSVAgdHVubmVsaW5nIHN1YnN5c3RlbSAobmV0L2lwdjQvaXBfdHVubmVsLmMpLiBJdCBzbmFwc2hvdHMgdGhlIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyBjb25jdXJyZW50IGNoYW5nZWxpbmsgb3BlcmF0aW9ucywgZGVmZXJzIGVuY2Fwc3VsYXRpb24gaW4gaXBfdHVubmVsX3htaXQsIGFuZCBhY2NvdW50cyBmb3IgZW5jYXAgaGVhZGVyIGxlbmd0aCBpbiBQTVRVIHVwZGF0ZXMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgcGF0aHMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCB0dW5uZWwgZGV2aWNlcyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMTkzYTUxN2ZhZjcyMDE0OWVlOTI0ZWI1ZGFiN2UxZWNjYWY3MDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCA2IDA1OjAxOjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggOWQxMTRiZDU3NWY5Mi4uNDQ3YjQzNWIxMGNjYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTUxMiwxNCArNTEyLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XG4gc3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGgsXG4tXHRcdFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZClcbitcdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kLFxuK1x0XHRcdCAgICBpbnQgZW5jYXBfaGxlbilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0aW50IHBrdF9zaXplO1xuIFx0aW50IG10dTtcbiBcbiBcdHR1bm5lbF9obGVuID0gbWQgPyB0dW5uZWxfaGxlbiA6IHR1bm5lbC1cdTAwM2VobGVuO1xuLVx0cGt0X3NpemUgPSBza2ItXHUwMDNlbGVuIC0gdHVubmVsX2hsZW47XG4rXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gKyBlbmNhcF9obGVuIC0gdHVubmVsX2hsZW47XG4gXHRwa3Rfc2l6ZSAtPSBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcbiBcbiBcdGlmIChkZikge1xuQEAgLTYyOSw3ICs2MzAsNyBAQCB2b2lkIGlwX21kX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXHUwMDNldHVuX2ZsYWdzKSlcbiBcdFx0ZGYgPSBodG9ucyhJUF9ERik7XG4gXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgdHVubmVsX2hsZW4sXG4tXHRcdFx0ICAgIGtleS1cdTAwM2V1LmlwdjQuZHN0LCB0cnVlKSkge1xuK1x0XHRcdCAgICBrZXktXHUwMDNldS5pcHY0LmRzdCwgdHJ1ZSwgMCkpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC02NzEsNiArNjcyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvID0gTlVMTDtcbitcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcbiBcdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xuIFx0dW5zaWduZWQgaW50IG1heF9oZWFkcm9vbTtcdC8qIFRoZSBleHRyYSBoZWFkZXIgc3BhY2UgbmVlZGVkICovXG4gXHRzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7XHRcdC8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovXG5AQCAtNjgwLDYgKzY4Miw3IEBAIHZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGJvb2wgbWQgPSBmYWxzZTtcbiBcdGJvb2wgY29ubmVjdGVkO1xuIFx0aW50IGVycl9jb3VudDtcbitcdGludCBlbmNhcF9obGVuO1xuIFx0dTggdG9zLCB0dGw7XG4gXHRfX2JlMzIgZHN0O1xuIFx0X19iZTE2IGRmO1xuQEAgLTc2NSw3ICs3NjgsMTAgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVx1MDAzZXBhcm1zLmxpbmspLFxuIFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XG4gXG4tXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2dHVubmVsLVx1MDAzZWVuY2FwLCBcdTAwMjZwcm90b2NvbCwgXHUwMDI2Zmw0KSBcdTAwM2MgMClcbitcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXG4rXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cdTAwM2VlbmNhcCk7XG4rXHRlbmNhcF9obGVuID0gaXBfZW5jYXBfaGxlbihcdTAwMjZpcGVuY2FwKTtcbitcdGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFxuIFx0aWYgKGNvbm5lY3RlZCBcdTAwMjZcdTAwMjYgbWQpIHtcbkBAIC04MDMsNyArODA5LDggQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWlnbm9yZV9kZilcbiBcdFx0ZGYgfD0gKGlubmVyX2lwaC1cdTAwM2VmcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfREYpKTtcbiBcbi1cdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSkpIHtcbitcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSxcbitcdFx0XHQgICAgZW5jYXBfaGxlbikpIHtcbiBcdFx0aXBfcnRfcHV0KHJ0KTtcbiBcdFx0Z290byB0eF9lcnJvcjtcbiBcdH1cbkBAIC04MzQsNyArODQxLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXHUwMDNlZHN0LmRldikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKVxuLVx0XHRcdCsgcnQtXHUwMDNlZHN0LmhlYWRlcl9sZW4gKyBpcF9lbmNhcF9obGVuKFx1MDAyNnR1bm5lbC1cdTAwM2VlbmNhcCk7XG4rXHRcdFx0KyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiArIGVuY2FwX2hsZW47XG4gXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuQEAgLTg0NSw2ICs4NTIsMTEgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0aXBfdHVubmVsX2Fkal9oZWFkcm9vbShkZXYsIG1heF9oZWFkcm9vbSk7XG4gXG4rXHRpZiAoaXBfdHVubmVsX2VuY2FwKHNrYiwgXHUwMDI2aXBlbmNhcCwgXHUwMDI2cHJvdG9jb2wsIFx1MDAyNmZsNCkgXHUwMDNjIDApIHtcbitcdFx0aXBfcnRfcHV0KHJ0KTtcbitcdFx0Z290byB0eF9lcnJvcjtcbitcdH1cbitcbiBcdGlwdHVubmVsX3htaXQoTlVMTCwgcnQsIHNrYiwgZmw0LnNhZGRyLCBmbDQuZGFkZHIsIHByb3RvY29sLCB0b3MsIHR0bCxcbiBcdFx0ICAgICAgZGYsICFuZXRfZXEodHVubmVsLVx1MDAzZW5ldCwgZGV2X25ldChkZXYpKSwgMCk7XG4gXHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTowOS41OTMwNjk3MzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTY0NTkzODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSVAgVHVubmVsIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgYXJlIGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIExldCdzIGRpZyBpbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBtb2RpZmljYXRpb25zIHJldm9sdmUgYXJvdW5kIGBpcF90dW5uZWxfeG1pdGAsIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgYGlwX21kX3R1bm5lbF94bWl0YC4gUmlnaHQsIHRoZSBtYWluIHRoaW5nIGlzIHRoaXMgbmV3IGBlbmNhcF9obGVuYCBhcmd1bWVudCBiZWluZyBpbnRyb2R1Y2VkIGludG8gYHRubF91cGRhdGVfcG10dWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIGVuY2Fwc3VsYXRpb24gaGVhZGVyIGxlbmd0aCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBwYWNrZXQgc2l6ZSBmb3IgUGF0aCBNVFUgZGlzY292ZXJ5LiBJbiBgdG5sX3VwZGF0ZV9wbXR1YCwgdGhlIGNhbGN1bGF0aW9uIGlzIG5vdyBgcGt0X3NpemUgPSBza2ItXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlbiwgbG9va2luZyBhdCBgaXBfdHVubmVsX3htaXRgLCBJIHNlZSB0aGV5J3JlIGdyYWJiaW5nIGBlbmNhcF9obGVuYCBmcm9tIGB0dW5uZWwtXHUwMDNlZW5jYXBgLiBTbWFydCB0byB1c2UgYGRhdGFfcmFjZWAgdGhlcmUsIG1pbmltaXplcyBsb2NraW5nIG92ZXJoZWFkLiBUaGUgZXJyb3IgY2hlY2sgYGlmIChlbmNhcF9obGVuIFx1MDAzYyAwKSBnb3RvIHR4X2Vycm9yO2AgaXMgY3J1Y2lhbC4gVGhleSBhcmUgYWxzbyBkZWZlcnJpbmcgYGlwX3R1bm5lbF9lbmNhcGAgdW50aWwgYWZ0ZXIgYHNrYl9jb3dfaGVhZGAgYW5kIGBpcF90dW5uZWxfYWRqX2hlYWRyb29tYC4gVGhpcyBzaG91bGQgaW1wcm92ZSBlZmZpY2llbmN5LiBNb3N0IGltcG9ydGFudGx5LCBgZW5jYXBfaGxlbmAgaXMgcGFzc2VkIG9uIHRvIGB0bmxfdXBkYXRlX3BtdHVgLCBhbmQgaXMgYWxzbyB1c2VkIGluIGBtYXhfaGVhZHJvb21gLiBUaGlzIGlzIGFsbCBsb2dpY2FsbHkgY29ubmVjdGVkLCB0aGUgaGVhZGVyIHNpemUgaXMgdXNlZCBpbiBzZXZlcmFsIHBsYWNlcy5cblxuSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCB0byBzZWUgaG93IHRoaXMgYWZmZWN0cyBvdGhlciBmdW5jdGlvbnMgYW5kIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIEFuZCBvZiBjb3Vyc2UsIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGJ1aWxkIGlzc3VlcyBvciB1bmV4cGVjdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjE3LjE1NzY2NTUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNDgyNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORVRfSVBfVFVOTkVMfG9iai1cXFxcJFxcXFwoQ09ORklHX05FVF9JUF9UVU5ORUxcXFxcKXxpcF90dW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTc0NCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTUtXFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTY6XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxcbm5ldC9pcHY0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbm5ldC9pcHY0L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2NC5vXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTEyLSNpbmNsdWRlIFxcdTAwM2NuZXQvaW5ldF9jb21tb24uaFxcdTAwM2VcXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTEzOiNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfdHVubmVscy5oXFx1MDAzZVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTQtI2luY2x1ZGUgXFx1MDAzY25ldC94ZnJtLmhcXHUwMDNlXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTg4Mj1zdGF0aWMgaW50IF9faW5pdCBpbmV0X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0yMDAyLVxcbm5ldC9pcHY0L2FmX2luZXQuYzoyMDAzOlxcdGlwX3R1bm5lbF9jb3JlX2luaXQoKTtcXG5uZXQvaXB2NC9hZl9pbmV0LmMtMjAwNC1cXG4tLVxcbm5ldC9pcHY0L2FycC5jLTExMi0jaW5jbHVkZSBcXHUwMDNjbmV0L2RzdF9tZXRhZGF0YS5oXFx1MDAzZVxcbm5ldC9pcHY0L2FycC5jOjExMzojaW5jbHVkZSBcXHUwMDNjbmV0L2lwX3R1bm5lbHMuaFxcdTAwM2VcXG5uZXQvaXB2NC9hcnAuYy0xMTQtXFxuLS1cXG5uZXQvaXB2NC9mb3VfYnBmLmM9NDQ9X19icGZfa2Z1bmMgaW50IGJwZl9za2Jfc2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jLTQ3LVxcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xcbm5ldC9pcHY0L2ZvdV9icGYuYzo0ODpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9mb3VfYnBmLmMtNDktXFxuLS1cXG5uZXQvaXB2NC9mb3VfYnBmLmM9ODY9X19icGZfa2Z1bmMgaW50IGJwZl9za2JfZ2V0X2ZvdV9lbmNhcChzdHJ1Y3QgX19za19idWZmICpza2JfY3R4LFxcbi0tXFxubmV0L2lwdjQvZm91X2JwZi5jLTg5LVxcdHN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilza2JfY3R4O1xcbm5ldC9pcHY0L2ZvdV9icGYuYzo5MDpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9mb3VfYnBmLmMtOTEtXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTkwMz1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGZvdV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MTY6c2l6ZV90IGZvdV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05MjA9RVhQT1JUX1NZTUJPTChmb3VfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MjI6c2l6ZV90IGd1ZV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjMte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05Mzg9RVhQT1JUX1NZTUJPTChndWVfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MzktXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTQxLVxcdFxcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05NTQ9RVhQT1JUX1NZTUJPTChfX2ZvdV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTU2OmludCBfX2d1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTk1Ny1cXHRcXHQgICAgICAgdTggKnByb3RvY29sLCBfX2JlMTYgKnNwb3J0LCBpbnQgdHlwZSlcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzItXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIHU4ICpwcm90b2NvbCwgX19iZTE2IHNwb3J0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGZvdV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNTEtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDY2LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA2NzpzdGF0aWMgaW50IGd1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz0xMDk2PXN0YXRpYyBpbnQgZ3VlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2MS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGZvdV9pcHR1bl9vcHMgPSB7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBndWVfaXB0dW5fb3BzID0ge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2OS1cXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTczLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3NS17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTc4OlxcdHJldCA9IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4My1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cXHRcXHRwcl9lcnIoXFxcImNhbid0IGFkZCBndWUgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XFx0XFx0aXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4OC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTkzLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTUte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NjpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwdHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTk3OlxcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTgtfVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjAxLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTIwMjpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDYtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwOC17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1Ni1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9mb3Vfb3BzKCk7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjU4LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTI2OT1zdGF0aWMgdm9pZCBfX2V4aXQgZm91X2Zpbmkodm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTI3MTpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2Zm91X25sX2ZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNS0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L2lwdjQvaXBfZ3JlLmM6MzY6I2luY2x1ZGUgXFx1MDAzY25ldC9pcF90dW5uZWxzLmhcXHUwMDNlXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzctI2luY2x1ZGUgXFx1MDAzY25ldC9hcnAuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyMj1zdGF0aWMgaW50IGlwZ3JlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbyxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOS1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDA6XFx0c3RydWN0IGlwX3R1bm5lbF9uZXQgKml0bjtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDEtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDMtXFx0Y29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihza2IpLVxcdTAwM2Vjb2RlO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0O1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NC1cXHRpcGggPSAoY29uc3Qgc3RydWN0IGlwaGRyICopKGljbXBfaGRyKHNrYikgKyAxKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTU6XFx0dCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgdHBpLVxcdTAwM2VmbGFncyxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYtXFx0XFx0XFx0ICAgICBpcGgtXFx1MDAzZWRhZGRyLCBpcGgtXFx1MDAzZXNhZGRyLCB0cGktXFx1MDAzZWtleSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0yNjc9c3RhdGljIGludCBlcnNwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0bmxfcHRrX2luZm8gKnRwaSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTI3My1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjc0OlxcdHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG47XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjc1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0yNzYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yODAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MjgxOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0yODItXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yODctXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9OT19LRVlfQklULCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjg4OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMjg5LVxcdFxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0yOTgtXFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6Mjk5OlxcdFxcdHR1bm5lbCA9IGlwX3R1bm5lbF9sb29rdXAoaXRuLCBza2ItXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleCwgZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzAwLVxcdFxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgdHBpLVxcdTAwM2VrZXkpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzE5LVxcdFxcdFxcdHN0cnVjdCBlcnNwYW5fbWV0YWRhdGEgKnBrdF9tZCwgKm1kO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjMyMDpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XFxubmV0L2lwdjQvaXBfZ3JlLmMtMzIxLVxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmdoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzI0LVxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHBpLVxcdTAwM2VmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzI1OlxcdFxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zMjYtXFx0XFx0XFx0dHVuX2lkID0ga2V5MzJfdG9fdHVubmVsX2lkKHRwaS1cXHUwMDNla2V5KTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM0NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKCplcnNoZHIpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNDU6XFx0XFx0XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKFxcdTAwMjZ0dW5fZHN0LVxcdTAwM2V1LnR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNDYtXFx0XFx0XFx0bWQtXFx1MDAzZXZlcnNpb24gPSB2ZXI7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNTUtXFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzozNTY6XFx0XFx0aXBfdHVubmVsX3Jjdih0dW5uZWwsIHNrYiwgdHBpLCB0dW5fZHN0LCBsb2dfZWNuX2Vycm9yKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNTctXFx0XFx0cmV0dXJuIFBBQ0tFVF9SQ1ZEO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MzY2PXN0YXRpYyBpbnQgX19pcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjM2NzpcXHRcXHQgICAgICAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwgaW50IGhkcl9sZW4sIGJvb2wgcmF3X3Byb3RvKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTM2OC17XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzAtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGg7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MzcxOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0zNzItXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzczLVxcdGlwaCA9IGlwX2hkcihza2IpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjM3NDpcXHR0dW5uZWwgPSBpcF90dW5uZWxfbG9va3VwKGl0biwgc2tiLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXgsIHRwaS1cXHUwMDNlZmxhZ3MsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzc1LVxcdFxcdFxcdFxcdCAgaXBoLVxcdTAwM2VzYWRkciwgaXBoLVxcdTAwM2VkYWRkciwgdHBpLVxcdTAwM2VrZXkpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMzk4LVxcdFxcdFxcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjM5OTpcXHRcXHRcXHRpcF90dW5uZWxfZmxhZ3NfYW5kKGZsYWdzLCB0cGktXFx1MDAzZWZsYWdzLCBmbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDAwLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDA2LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjQwNzpcXHRcXHRpcF90dW5uZWxfcmN2KHR1bm5lbCwgc2tiLCB0cGksIHR1bl9kc3QsIGxvZ19lY25fZXJyb3IpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQwOC1cXHRcXHRyZXR1cm4gUEFDS0VUX1JDVkQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz00MTc9c3RhdGljIGludCBpcGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHRubF9wdGtfaW5mbyAqdHBpLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDIwLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjQyMTpcXHRzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQyMi1cXHRpbnQgcmVzO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ3OS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgwOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNDgxLVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy00ODItXFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgzOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4NC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ5MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0OTE6XFx0aXBfdHVubmVsX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHRubF9wYXJhbXMtXFx1MDAzZXByb3RvY29sKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy00OTItfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDk5PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MDEte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjUwMjpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUwMy1cXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncykgPSB7IH07XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTA0OlxcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm87XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTA1OlxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTA2LVxcdGludCB0dW5uZWxfaGxlbjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUwOS1cXHRpZiAodW5saWtlbHkoIXR1bl9pbmZvIHx8ICEodHVuX2luZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkgfHxcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MTA6XFx0XFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTExLVxcdFxcdGdvdG8gZXJyX2ZyZWVfc2tiO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTI2LVxcdF9fc2V0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjUyNzpcXHRpcF90dW5uZWxfZmxhZ3NfYW5kKGZsYWdzLCB0dW5faW5mby1cXHUwMDNla2V5LnR1bl9mbGFncywgZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUyOC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTU0Mz1zdGF0aWMgdm9pZCBlcnNwYW5fZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU0NC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTQ1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTQ2LVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKSA9IHsgfTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NDc6XFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbztcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NDg6XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NDktXFx0c3RydWN0IGVyc3Bhbl9tZXRhZGF0YSAqbWQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NTctXFx0aWYgKHVubGlrZWx5KCF0dW5faW5mbyB8fCAhKHR1bl9pbmZvLVxcdTAwM2Vtb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpIHx8XFxubmV0L2lwdjQvaXBfZ3JlLmM6NTU4OlxcdFxcdCAgICAgaXBfdHVubmVsX2luZm9fYWYodHVuX2luZm8pICE9IEFGX0lORVQpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU1OS1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTU2NS1cXHRcXHRnb3RvIGVycl9mcmVlX3NrYjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1NjY6XFx0bWQgPSBpcF90dW5uZWxfaW5mb19vcHRzKHR1bl9pbmZvKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01NjctXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02Mjg9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC9pcF9ncmUuYy02Mjkte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjYzMDpcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo2MzE6XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYy02MzItXFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy02MzQtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NjM1OlxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSAhPSBBRl9JTkVUKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzNi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzOC1cXHRrZXkgPSBcXHUwMDI2aW5mby1cXHUwMDNla2V5O1xcbm5ldC9pcHY0L2lwX2dyZS5jOjYzOTpcXHRpcF90dW5uZWxfaW5pdF9mbG93KFxcdTAwMjZmbDQsIElQUFJPVE9fR1JFLCBrZXktXFx1MDAzZXUuaXB2NC5kc3QsIGtleS1cXHUwMDNldS5pcHY0LnNyYyxcXG5uZXQvaXB2NC9pcF9ncmUuYy02NDAtXFx0XFx0XFx0ICAgIHR1bm5lbF9pZF90b19rZXkzMihrZXktXFx1MDAzZXR1bl9pZCksXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02NTI9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY1NC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NjU1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNjU2LVxcdGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY3Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzo2Nzc6XFx0XFx0LyogaXBfdHVubmVsX3htaXQoKSBuZWVkcyBza2ItXFx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gZ3JlIGhlYWRlci4gKi9cXG5uZXQvaXB2NC9pcF9ncmUuYy02NzgtXFx0XFx0c2tiX3B1bGwoc2tiLCBwdWxsX2xlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03MDQ9c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03MDYte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjcwNzpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTcwOC1cXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03NTk9c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzYxLXtcXG5uZXQvaXB2NC9pcF9ncmUuYzo3NjI6XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy03NjMtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz03ODg9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc4OS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkwOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNzkxLVxcdGludCBsZW47XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04MTc9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODE4OlxcdFxcdFxcdCAgICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG5uZXQvaXB2NC9pcF9ncmUuYy04MTktXFx0XFx0XFx0ICAgIGludCBjbWQpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MjMtXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI0OlxcdGlmICghaXBfdHVubmVsX2ZsYWdzX2lzX2JlMTZfY29tcGF0KHAtXFx1MDAzZWlfZmxhZ3MpIHx8XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI1OlxcdCAgICAhaXBfdHVubmVsX2ZsYWdzX2lzX2JlMTZfY29tcGF0KHAtXFx1MDAzZW9fZmxhZ3MpKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgyNi1cXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODI4OlxcdGlfZmxhZ3MgPSBpcF90dW5uZWxfZmxhZ3NfdG9fYmUxNihwLVxcdTAwM2VpX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4Mjk6XFx0b19mbGFncyA9IGlwX3R1bm5lbF9mbGFnc190b19iZTE2KHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTgzMC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg0MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDE6XFx0ZXJyID0gaXBfdHVubmVsX2N0bChkZXYsIHAsIGNtZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODQyLVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04NDUtXFx0aWYgKGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODQ2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg0Ny1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NDg6XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODQ5OlxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLm9fZmxhZ3MsIHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg1MC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg1NS1cXHRpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODU2OlxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODU3LVxcdG9fZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VvX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4NTg6XFx0aXBfdHVubmVsX2ZsYWdzX2Zyb21fYmUxNihwLVxcdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy04NTktXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04OTA9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg5My17XFxubmV0L2lwdjQvaXBfZ3JlLmM6ODk0OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg5NS1cXHRzdHJ1Y3QgZ3JlX2Jhc2VfaGRyICpncmVoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTM3PXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkzOC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6OTM5OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTk0MC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk2Nj1zdGF0aWMgaW50IGlwZ3JlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTY3LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzo5Njg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtOTY5LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy05ODEtXFx0Lm5kb19pbml0XFx0XFx0PSBpcGdyZV90dW5uZWxfaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODI6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTgzLSNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTg3LVxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXBncmVfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODg6XFx0Lm5kb19zaW9jZGV2cHJpdmF0ZVxcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjk4OTpcXHQubmRvX2NoYW5nZV9tdHVcXHRcXHQ9IGlwX3R1bm5lbF9jaGFuZ2VfbXR1LFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5MC1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjk5MTpcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cXHQubmRvX3R1bm5lbF9jdGxcXHRcXHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDAwPXN0YXRpYyB2b2lkIGlwZ3JlX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwMy1cXHRkZXYtXFx1MDAzZXR5cGVcXHRcXHQ9IEFSUEhSRF9JUEdSRTtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDA0OlxcdGlwX3R1bm5lbF9zZXR1cChkZXYsIGlwZ3JlX25ldF9pZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwNS19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDA3PXN0YXRpYyB2b2lkIF9fZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwOC17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAwOTpcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWw7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAxMC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwMzY9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMzcte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMzg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDM5LVxcdHN0cnVjdCBpcGhkciAqaXBoID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA2Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDY3OlxcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjgtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTA3NT1zdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzYte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNzc6XFx0cmV0dXJuIGlwX3R1bm5lbF9pbml0X25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBOVUxMKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDc4LX1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwODA9c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGdyZV9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4Mi17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTA4MzpcXHRpcF90dW5uZWxfZGVsZXRlX25ldChuZXQsIGlwZ3JlX25ldF9pZCwgXFx1MDAyNmlwZ3JlX2xpbmtfb3BzLCBkZXZfdG9fa2lsbCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA4NC19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDg2PXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBncmVfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwODktXFx0LmlkICAgPSBcXHUwMDI2aXBncmVfbmV0X2lkLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEwOTA6XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGlwX3R1bm5lbF9uZXQpLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwOTEtfTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTExODI9c3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMTg0LVxcdFxcdFxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTE4NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4Ni1cXHRcXHRcXHRcXHRfX3UzMiAqZndtYXJrKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTExODcte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjExODg6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTE4OS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyNTE9c3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTI1My1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEyNTQ6XFx0XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTUtXFx0XFx0XFx0XFx0X191MzIgKmZ3bWFyaylcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjU2LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMjU3OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEyNTgtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEyOTY9c3RhdGljIGJvb2wgaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTI5NzpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICppcGVuY2FwKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEyOTgte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTMyOT1zdGF0aWMgaW50IGdyZV90YXBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTMzNC1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzM1OlxcdHJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzMzYtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzM5LVxcdC5uZG9faW5pdFxcdFxcdD0gZ3JlX3RhcF9pbml0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDA6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0MS1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGdyZV90YXBfeG1pdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDMtXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzQ0OlxcdC5uZG9fY2hhbmdlX210dVxcdFxcdD0gaXBfdHVubmVsX2NoYW5nZV9tdHUsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NS1cXHQubmRvX2dldF9zdGF0czY0XFx0PSBkZXZfZ2V0X3RzdGF0czY0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDY6XFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ3LVxcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcXHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzNTA9c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzUxLXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzUyOlxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM1My1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM2ODpcXHRyZXR1cm4gaXBfdHVubmVsX2luaXQoZGV2KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzY5LX1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzNzE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcnNwYW5fbmV0ZGV2X29wcyA9IHtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzcyLVxcdC5uZG9faW5pdFxcdFxcdD0gZXJzcGFuX3R1bm5lbF9pbml0LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzM6XFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3NC1cXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGVyc3Bhbl94bWl0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ni1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzc6XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBpcF90dW5uZWxfY2hhbmdlX210dSxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc4LVxcdC5uZG9fZ2V0X3N0YXRzNjRcXHQ9IGRldl9nZXRfdHN0YXRzNjQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3OTpcXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODAtXFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM4Mz1zdGF0aWMgdm9pZCBpcGdyZV90YXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODktXFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzXFx0fD0gSUZGX0xJVkVfQUREUl9DSEFOR0U7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MDpcXHRpcF90dW5uZWxfc2V0dXAoZGV2LCBncmVfdGFwX25ldF9pZCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5MS19XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzk0PWlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTUte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTY6XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5OC1cXHRpZiAoaXBncmVfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk5OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MDA6XFx0XFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQwMS1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDk9c3RhdGljIGludCBpcGdyZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDE0LVxcdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cXHUwMDNldGI7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQxNTpcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MTYtXFx0X191MzIgZndtYXJrID0gMDtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjUtXFx0XFx0cmV0dXJuIGVycjtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDI2OlxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFxcdTAwMjZwLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MjctXFx0XFx0XFx0XFx0IGZ3bWFyayk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDMwPXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MzUtXFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDM2OlxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQzNy1cXHRfX3UzMiBmd21hcmsgPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0Ni1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NDc6XFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cXHUwMDNlbGlua19uZXQgPyA6IGRldl9uZXQoZGV2KSwgZGV2LCB0YiwgXFx1MDAyNnAsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ0OC1cXHRcXHRcXHRcXHQgZndtYXJrKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NTE9c3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU0LXtcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDU1OlxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0NTY6XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDU3LVxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NjctXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ2ODpcXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcXHUwMDI2cCwgZndtYXJrKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDY5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ3MS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDcyOlxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ3MzpcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0NzQtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDgwPXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODMte1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0ODQ6XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ4NTpcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0ODYtXFx0X191MzIgZndtYXJrID0gdC1cXHUwMDNlZndtYXJrO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk3OlxcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFxcdTAwMjZwLCBmd21hcmspO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToxNy4yMTExNTI2MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE1MzM0MTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBJUCBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBlbmFibGluZyBgaXBfdHVubmVsLmNgLiBNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpdmUgZm9yIElQdjQuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgSVAgdHVubmVsaW5nIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIExldCdzIHNlZSB3aGF0IEkgY2FuIGZpbmQuLi4gSSBleHBlY3QgdG8gc2VlIHNvbWUgb3B0aW9ucyByZWxhdGVkIHRvIHR1bm5lbGluZywgR1JFLCBJUElQLCBvciBzaW1pbGFyIHRlY2hub2xvZ2llcy4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgdGhlIGNvbmZpZyBzeW1ib2wgdGhhdCBuZWVkcyB0byBiZSBzZXQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgdHVubmVsIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODcxLCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MTkuMzI2NDg4NzI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTU4MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9JUF9UVU5ORUx8TkVUX0lQR1JFfE5FVF9JUElQfE5FVF9GT1VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE0OT1jb25maWcgSVBfUE5QX1JBUlBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTYxLVxcbm5ldC9pcHY0L0tjb25maWc6MTYyOmNvbmZpZyBORVRfSVBJUFxcbm5ldC9pcHY0L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUDogdHVubmVsaW5nXFxcIlxcbm5ldC9pcHY0L0tjb25maWctMTY0LVxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWc6MTY1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0xNjYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4NS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4Njpjb25maWcgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMTg3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0xOTMtXFx0dHJpc3RhdGUgXFxcIklQOiBHUkUgdHVubmVscyBvdmVyIElQXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MTk0OlxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxubmV0L2lwdjQvS2NvbmZpZzoxOTU6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTE5Ni1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMDk6XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTAtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cXHRzZWxlY3QgWEZSTVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXFx0dHJpc3RhdGVcXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE5LVxcdGRlZmF1bHQgblxcbm5ldC9pcHY0L0tjb25maWctMzIwLVxcbm5ldC9pcHY0L0tjb25maWc6MzIxOmNvbmZpZyBORVRfRk9VXFxubmV0L2lwdjQvS2NvbmZpZy0zMjItXFx0dHJpc3RhdGUgXFxcIklQOiBGb28gKElQIHByb3RvY29scykgb3ZlciBVRFBcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMyOS1cXG5uZXQvaXB2NC9LY29uZmlnOjMzMDpjb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxubmV0L2lwdjQvS2NvbmZpZy0zMzEtXFx0Ym9vbCBcXFwiSVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzozMzI6XFx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcXG5uZXQvaXB2NC9LY29uZmlnOjMzMzpcXHRzZWxlY3QgTkVUX0ZPVVxcbm5ldC9pcHY0L0tjb25maWctMzM0LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MTkuMzcyNDUxOTQ0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA2MDIwMDI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgSVB2NCBUdW5uZWwgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGhlYXJ0IG9mIHRoZSBJUHY0IHR1bm5lbGluZyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgd29ya3MsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSBsb2FkaW5nIHVwIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIEknbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSByZWxldmFudCBjb2RlLlxuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBJIHJlbWVtYmVyLCBJIHRoaW5rIHRoZSBzZWN0aW9uIGJldHdlZW4gbGluZXMgNTAwIGFuZCA4NjAgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb3JlIGxvZ2ljIGZvci4uLiB3ZWxsLCBwcm9iYWJseSB0aGUgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uIHByb2Nlc3MsIG9yIG1heWJlIHRoZSBoYW5kbGluZyBvZiB0dW5uZWwgZGV2aWNlIGNyZWF0aW9uIGFuZCBkZWxldGlvbi4gVGhhdCByYW5nZSBmZWVscyBhYm91dCByaWdodCBmb3IgdGhlIG1lYXQgb2YgdGhlIHR1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB0aGUgYml0IEkgd2FudCB0byB1bmRlcnN0YW5kIGJldHRlci4gSSBuZWVkIHRvIGtub3cgaG93IHRoZSB0dW5uZWwgcHJvdG9jb2wgYWN0dWFsbHkgbWFuaXB1bGF0ZXMgdGhlIElQIHBhY2tldHMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIGFudGljaXBhdGUgYSBnb29kIGNodW5rIG9mIHN3aXRjaCBzdGF0ZW1lbnRzIGFuZCBoZWxwZXIgZnVuY3Rpb24gY2FsbHMgaW4gdGhlcmUuIFNob3VsZCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5MjQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToyNC40MzI2NTQ1NDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfdHVubmVsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9lbmNhcF9zZXR1cCk7XFxuIDUxMTpcXHRcXG4gNTEyOlxcdHN0YXRpYyBpbnQgdG5sX3VwZGF0ZV9wbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIDUxMzpcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUxNiBkZixcXG4gNTE0OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcXG4gNTE1OlxcdFxcdFxcdFxcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXFxuIDUxNjpcXHRcXHRcXHRcXHQgICAgaW50IGVuY2FwX2hsZW4pXFxuIDUxNzpcXHR7XFxuIDUxODpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA1MTk6XFx0XFx0aW50IHBrdF9zaXplO1xcbiA1MjA6XFx0XFx0aW50IG10dTtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVxcdTAwM2VobGVuO1xcbiA1MjM6XFx0XFx0cGt0X3NpemUgPSBza2ItXFx1MDAzZWxlbiArIGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcXG4gNTI0OlxcdFxcdHBrdF9zaXplIC09IGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfRVRIRVIgPyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDA7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGlmIChkZikge1xcbiA1Mjc6XFx0XFx0XFx0bXR1ID0gZHN0X210dShcXHUwMDI2cnQtXFx1MDAzZWRzdCkgLSAoc2l6ZW9mKHN0cnVjdCBpcGhkcikgKyB0dW5uZWxfaGxlbik7XFxuIDUyODpcXHRcXHRcXHRtdHUgLT0gZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcXG4gNTI5OlxcdFxcdH0gZWxzZSB7XFxuIDUzMDpcXHRcXHRcXHRtdHUgPSBza2JfdmFsaWRfZHN0KHNrYikgPyBkc3RfbXR1KHNrYl9kc3Qoc2tiKSkgOiBkZXYtXFx1MDAzZW10dTtcXG4gNTMxOlxcdFxcdH1cXG4gNTMyOlxcdFxcbiA1MzM6XFx0XFx0aWYgKHNrYl92YWxpZF9kc3Qoc2tiKSlcXG4gNTM0OlxcdFxcdFxcdHNrYl9kc3RfdXBkYXRlX3BtdHVfbm9fY29uZmlybShza2IsIG10dSk7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkge1xcbiA1Mzc6XFx0XFx0XFx0aWYgKCFza2JfaXNfZ3NvKHNrYikgXFx1MDAyNlxcdTAwMjZcXG4gNTM4OlxcdFxcdFxcdCAgICAoaW5uZXJfaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSkgXFx1MDAyNlxcdTAwMjZcXG4gNTM5OlxcdFxcdFxcdCAgICBtdHUgXFx1MDAzYyBwa3Rfc2l6ZSkge1xcbiA1NDA6XFx0XFx0XFx0XFx0aWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTtcXG4gNTQxOlxcdFxcdFxcdFxcdHJldHVybiAtRTJCSUc7XFxuIDU0MjpcXHRcXHRcXHR9XFxuIDU0MzpcXHRcXHR9XFxuIDU0NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gNTQ1OlxcdFxcdGVsc2UgaWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gNTQ2OlxcdFxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2O1xcbiA1NDc6XFx0XFx0XFx0X19iZTMyIGRhZGRyO1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRcXHRydDYgPSBza2JfdmFsaWRfZHN0KHNrYikgPyBkc3RfcnQ2X2luZm8oc2tiX2RzdChza2IpKSA6XFxuIDU1MDpcXHRcXHRcXHRcXHRcXHRcXHQgICBOVUxMO1xcbiA1NTE6XFx0XFx0XFx0ZGFkZHIgPSBtZCA/IGRzdCA6IHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLmRhZGRyO1xcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRcXHRpZiAocnQ2IFxcdTAwMjZcXHUwMDI2IG10dSBcXHUwMDNjIGRzdF9tdHUoc2tiX2RzdChza2IpKSBcXHUwMDI2XFx1MDAyNlxcbiA1NTQ6XFx0XFx0XFx0XFx0ICAgbXR1IFxcdTAwM2U9IElQVjZfTUlOX01UVSkge1xcbiA1NTU6XFx0XFx0XFx0XFx0aWYgKChkYWRkciBcXHUwMDI2XFx1MDAyNiAhaXB2NF9pc19tdWx0aWNhc3QoZGFkZHIpKSB8fFxcbiA1NTY6XFx0XFx0XFx0XFx0ICAgIHJ0Ni1cXHUwMDNlcnQ2aV9kc3QucGxlbiA9PSAxMjgpIHtcXG4gNTU3OlxcdFxcdFxcdFxcdFxcdHJ0Ni1cXHUwMDNlcnQ2aV9mbGFncyB8PSBSVEZfTU9ESUZJRUQ7XFxuIDU1ODpcXHRcXHRcXHRcXHRcXHRkc3RfbWV0cmljX3NldChza2JfZHN0KHNrYiksIFJUQVhfTVRVLCBtdHUpO1xcbiA1NTk6XFx0XFx0XFx0XFx0fVxcbiA1NjA6XFx0XFx0XFx0fVxcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSBcXHUwMDI2XFx1MDAyNiBtdHUgXFx1MDAzZT0gSVBWNl9NSU5fTVRVIFxcdTAwMjZcXHUwMDI2XFxuIDU2MzpcXHRcXHRcXHRcXHRcXHRcXHRtdHUgXFx1MDAzYyBwa3Rfc2l6ZSkge1xcbiA1NjQ6XFx0XFx0XFx0XFx0aWNtcHY2X25kb19zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7XFxuIDU2NTpcXHRcXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbiA1NjY6XFx0XFx0XFx0fVxcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0I2VuZGlmXFxuIDU2OTpcXHRcXHRyZXR1cm4gMDtcXG4gNTcwOlxcdH1cXG4gNTcxOlxcdFxcbiA1NzI6XFx0dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA1NzM6XFx0XFx0XFx0ICAgICAgIHU4IHByb3RvLCBpbnQgdHVubmVsX2hsZW4pXFxuIDU3NDpcXHR7XFxuIDU3NTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA1NzY6XFx0XFx0dTMyIGhlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuIDU3NzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKnR1bl9pbmZvO1xcbiA1Nzg6XFx0XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG4gNTc5OlxcdFxcdGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoO1xcbiA1ODA6XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBOVUxMO1xcbiA1ODE6XFx0XFx0c3RydWN0IGZsb3dpNCBmbDQ7XFxuIDU4MjpcXHRcXHRfX2JlMTYgZGYgPSAwO1xcbiA1ODM6XFx0XFx0dTggdG9zLCB0dGw7XFxuIDU4NDpcXHRcXHRib29sIHVzZV9jYWNoZTtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0dHVuX2luZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcXG4gNTg3OlxcdFxcdGlmICh1bmxpa2VseSghdHVuX2luZm8gfHwgISh0dW5faW5mby1cXHUwMDNlbW9kZSBcXHUwMDI2IElQX1RVTk5FTF9JTkZPX1RYKSB8fFxcbiA1ODg6XFx0XFx0XFx0ICAgICBpcF90dW5uZWxfaW5mb19hZih0dW5faW5mbykgIT0gQUZfSU5FVCkpXFxuIDU4OTpcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMToyNC40MzI4MTU1OTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjExNTUwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBleGFtaW5lIHRoZSByZW1haW5pbmcgY29kZSB3aXRoaW4gYGlwX3R1bm5lbF94bWl0YC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIGl0cyBvcGVyYXRpb24uIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGFuZCB0aGUgcHVycG9zZSBvZiBlYWNoIHNlY3Rpb24gb2YgdGhlIGNvZGUgdG8gcHJvcGVybHkgYXNzZXNzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MjUuNjQ0MzcwMzQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYwOlxcdFxcdFxcdH0gZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbiA3NjE6XFx0XFx0XFx0XFx0dG9zID0gaXB2Nl9nZXRfZHNmaWVsZCgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilpbm5lcl9pcGgpO1xcbiA3NjI6XFx0XFx0XFx0XFx0Y29ubmVjdGVkID0gZmFsc2U7XFxuIDc2MzpcXHRcXHRcXHR9XFxuIDc2NDpcXHRcXHR9XFxuIDc2NTpcXHRcXG4gNzY2OlxcdFxcdGlwX3R1bm5lbF9pbml0X2Zsb3coXFx1MDAyNmZsNCwgcHJvdG9jb2wsIGRzdCwgdG5sX3BhcmFtcy1cXHUwMDNlc2FkZHIsXFxuIDc2NzpcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSwgdG9zIFxcdTAwMjYgSU5FVF9EU0NQX01BU0ssXFxuIDc2ODpcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXFx1MDAzZXBhcm1zLmxpbmspLFxcbiA3Njk6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlZndtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwgMCk7XFxuIDc3MDpcXHRcXG4gNzcxOlxcdFxcdC8qIFNuYXBzaG90IGVuY2FwOyBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIHVwZGF0ZSBpdCBjb25jdXJyZW50bHkuICovXFxuIDc3MjpcXHRcXHRpcGVuY2FwID0gZGF0YV9yYWNlKHR1bm5lbC1cXHUwMDNlZW5jYXApO1xcbiA3NzM6XFx0XFx0ZW5jYXBfaGxlbiA9IGlwX2VuY2FwX2hsZW4oXFx1MDAyNmlwZW5jYXApO1xcbiA3NzQ6XFx0XFx0aWYgKGVuY2FwX2hsZW4gXFx1MDAzYyAwKVxcbiA3NzU6XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0aWYgKGNvbm5lY3RlZCBcXHUwMDI2XFx1MDAyNiBtZCkge1xcbiA3Nzg6XFx0XFx0XFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCB0dW5faW5mbyk7XFxuIDc3OTpcXHRcXHRcXHRpZiAodXNlX2NhY2hlKVxcbiA3ODA6XFx0XFx0XFx0XFx0cnQgPSBkc3RfY2FjaGVfZ2V0X2lwNChcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWRzdF9jYWNoZSxcXG4gNzgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zmw0LnNhZGRyKTtcXG4gNzgyOlxcdFxcdH0gZWxzZSB7XFxuIDc4MzpcXHRcXHRcXHRydCA9IGNvbm5lY3RlZCA/IGRzdF9jYWNoZV9nZXRfaXA0KFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWRzdF9jYWNoZSxcXG4gNzg0OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmbDQuc2FkZHIpIDogTlVMTDtcXG4gNzg1OlxcdFxcdH1cXG4gNzg2OlxcdFxcbiA3ODc6XFx0XFx0aWYgKCFydCkge1xcbiA3ODg6XFx0XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4gNzkxOlxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9jYXJyaWVyX2Vycm9ycyk7XFxuIDc5MjpcXHRcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiA3OTM6XFx0XFx0XFx0fVxcbiA3OTQ6XFx0XFx0XFx0aWYgKHVzZV9jYWNoZSlcXG4gNzk1OlxcdFxcdFxcdFxcdGRzdF9jYWNoZV9zZXRfaXA0KFxcdTAwMjZ0dW5faW5mby1cXHUwMDNlZHN0X2NhY2hlLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCxcXG4gNzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgZmw0LnNhZGRyKTtcXG4gNzk3OlxcdFxcdFxcdGVsc2UgaWYgKCFtZCBcXHUwMDI2XFx1MDAyNiBjb25uZWN0ZWQpXFxuIDc5ODpcXHRcXHRcXHRcXHRkc3RfY2FjaGVfc2V0X2lwNChcXHUwMDI2dHVubmVsLVxcdTAwM2Vkc3RfY2FjaGUsIFxcdTAwMjZydC1cXHUwMDNlZHN0LFxcbiA3OTk6XFx0XFx0XFx0XFx0XFx0XFx0ICBmbDQuc2FkZHIpO1xcbiA4MDA6XFx0XFx0fVxcbiA4MDE6XFx0XFxuIDgwMjpcXHRcXHRpZiAocnQtXFx1MDAzZWRzdC5kZXYgPT0gZGV2KSB7XFxuIDgwMzpcXHRcXHRcXHRpcF9ydF9wdXQocnQpO1xcbiA4MDQ6XFx0XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIGNvbGxpc2lvbnMpO1xcbiA4MDU6XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gODA2OlxcdFxcdH1cXG4gODA3OlxcdFxcbiA4MDg6XFx0XFx0ZGYgPSB0bmxfcGFyYW1zLVxcdTAwM2VmcmFnX29mZjtcXG4gODA5OlxcdFxcdGlmIChwYXlsb2FkX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSBcXHUwMDI2XFx1MDAyNiAhdHVubmVsLVxcdTAwM2VpZ25vcmVfZGYpXFxuIDgxMDpcXHRcXHRcXHRkZiB8PSAoaW5uZXJfaXBoLVxcdTAwM2VmcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSk7XFxuIDgxMTpcXHRcXG4gODEyOlxcdFxcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCAwLCAwLCBmYWxzZSxcXG4gODEzOlxcdFxcdFxcdFxcdCAgICBlbmNhcF9obGVuKSkge1xcbiA4MTQ6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODE1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDgxNjpcXHRcXHR9XFxuIDgxNzpcXHRcXG4gODE4OlxcdFxcdGVycl9jb3VudCA9IFJFQURfT05DRSh0dW5uZWwtXFx1MDAzZWVycl9jb3VudCk7XFxuIDgxOTpcXHRcXHRpZiAoZXJyX2NvdW50IFxcdTAwM2UgMCkge1xcbiA4MjA6XFx0XFx0XFx0aWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsXFxuIDgyMTpcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfdGltZSkgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7XFxuIDgyMjpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX2NvdW50LCBlcnJfY291bnQgLSAxKTtcXG4gODIzOlxcdFxcbiA4MjQ6XFx0XFx0XFx0XFx0ZHN0X2xpbmtfZmFpbHVyZShza2IpO1xcbiA4MjU6XFx0XFx0XFx0fSBlbHNlIHtcXG4gODI2OlxcdFxcdFxcdFxcdFdSSVRFX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfY291bnQsIDApO1xcbiA4Mjc6XFx0XFx0XFx0fVxcbiA4Mjg6XFx0XFx0fVxcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHR0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaW5uZXJfaXBoLCBza2IpO1xcbiA4MzE6XFx0XFx0dHRsID0gdG5sX3BhcmFtcy1cXHUwMDNldHRsO1xcbiA4MzI6XFx0XFx0aWYgKHR0bCA9PSAwKSB7XFxuIDgzMzpcXHRcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpXFxuIDgzNDpcXHRcXHRcXHRcXHR0dGwgPSBpbm5lcl9pcGgtXFx1MDAzZXR0bDtcXG4gODM1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA4MzY6XFx0XFx0XFx0ZWxzZSBpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSlcXG4gODM3OlxcdFxcdFxcdFxcdHR0bCA9ICgoY29uc3Qgc3RydWN0IGlwdjZoZHIgKilpbm5lcl9pcGgpLVxcdTAwM2Vob3BfbGltaXQ7XFxuIDgzODpcXHQjZW5kaWZcXG4gODM5OlxcdFxcdFxcdGVsc2VcXG4gODQwOlxcdFxcdFxcdFxcdHR0bCA9IGlwNF9kc3RfaG9wbGltaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiA4NDE6XFx0XFx0fVxcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cXHUwMDNlZHN0LmRldikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKVxcbiA4NDQ6XFx0XFx0XFx0XFx0KyBydC1cXHUwMDNlZHN0LmhlYWRlcl9sZW4gKyBlbmNhcF9obGVuO1xcbiA4NDU6XFx0XFxuIDg0NjpcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgbWF4X2hlYWRyb29tKSkge1xcbiA4NDc6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODQ4OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9kcm9wcGVkKTtcXG4gODQ5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA4NTA6XFx0XFx0XFx0cmV0dXJuO1xcbiA4NTE6XFx0XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRcXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKGlwX3R1bm5lbF9lbmNhcChza2IsIFxcdTAwMjZpcGVuY2FwLCBcXHUwMDI2cHJvdG9jb2wsIFxcdTAwMjZmbDQpIFxcdTAwM2MgMCkge1xcbiA4NTY6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODU3OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDg1ODpcXHRcXHR9XFxuIDg1OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MjUuNjQ0NTgxMDU1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwNzcwNTAzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBJUCBUdW5uZWxpbmcgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHdoaWNoLCBhcyB3ZSBrbm93LCBpcyAqY29yZSogdG8gdGhlIGtlcm5lbCdzIElQIHR1bm5lbGluZyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb3ZlcnMgdGhpbmdzIGxpa2UgR1JFLCBJUElQLCBhbmQgc28gb24g4oCTIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzIGxpa2UgYGlwZ3JlYCBhbmQgYGlwaXBgLiAgSW1wb3J0YW50bHksIHRoaXMgY29kZSAqaXMqIHJlYWNoYWJsZSBhbmQgZXhlY3V0YWJsZSB3aXRoaW4gdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIFRoZSBmYWN0IHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIFRSVUUgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBUaGF0IGNvbmZpcm1zIG91ciBodW5jaDogd2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGlzIHRob3JvdWdobHkuXG5cbk5vdywgbGV0J3MgcGlucG9pbnQgdGhlIGFyZWFzIG9mIGdyZWF0ZXN0IGludGVyZXN0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGV4cG9zZWQgc3ltYm9scywgYW5kIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkLiAgYGlwX3R1bm5lbF94bWl0YCwgYHRubF91cGRhdGVfcG10dWAsIGFuZCBgaXBfbWRfdHVubmVsX3htaXRgIGFyZSB0aGUgaW1tZWRpYXRlIHRhcmdldHMuIGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgYXJlICpleHBvcnRlZCosIG1lYW5pbmcgdGhleSBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBTcGVjaWZpY2FsbHksIGBFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfeG1pdClgIGFuZCBgRVhQT1JUX1NZTUJPTF9HUEwoaXBfbWRfdHVubmVsX3htaXQpYCBjb25maXJtIHRoaXMuICBgdG5sX3VwZGF0ZV9wbXR1YCwgYWx0aG91Z2ggc3RhdGljLCBpcyBhbHNvIGludGVyZXN0aW5nIHNpbmNlIGl0IGdldHMgY2FsbGVkIGJ5IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAuIFRoZSBmYWN0IHRoYXQgYHRubF91cGRhdGVfcG10dWAgaXMgKm1vZGlmaWVkKiBpcyBkZWZpbml0ZWx5IGEgcmVkIGZsYWcuICBUaGlzIHN1Z2dlc3RzIHRoYXQgd2hhdGV2ZXIgaXMgaGFwcGVuaW5nIGR1cmluZyBQTVRVIHVwZGF0ZXMsIHNwZWNpZmljYWxseSB3aGVuIGNhbGxlZCB3aXRoaW4gdGhlIHhtaXQgcGF0aHMsIHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS5cblxuRmluYWxseSwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGNvbnRleHQuICBMb29raW5nIGF0IGBuZXQvaXB2NC9LY29uZmlnYCwgYENPTkZJR19ORVRfSVBfVFVOTkVMYCBpcyB0cmlzdGF0ZSBhbmQgc2VsZWN0ZWQgYnkgdGhlIGxpa2VzIG9mIGBDT05GSUdfTkVUX0lQR1JFYCwgYENPTkZJR19ORVRfSVBJUGAsIGV0Yy4gIE9mIGNvdXJzZSwgYENPTkZJR19JTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIGVudGlyZSBgbmV0L2lwdjRgIHN1YnRyZWUuICBJdCdzIHVzZWZ1bCB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHNlbGVjdCBgTkVUX0lQX1RVTk5FTGAgYXJlIGtub3duLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBmdXp6aW5nIGNhbXBhaWducyBhbmQgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIGltcGFjdC4gV2Ugbm93IGhhdmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBleHBsb3JpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNzksIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozMC43MjE2MzQzNTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODMyNjE1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQX1RVTk5FTHxzZWxlY3QgTkVUX0lQX1RVTk5FTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNjQtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzoxNjU6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTE2Ni1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4MD1jb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4NS1cXG5uZXQvaXB2NC9LY29uZmlnOjE4Njpjb25maWcgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMTg3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE5Mj1jb25maWcgTkVUX0lQR1JFXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE5NC1cXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWc6MTk1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0xOTYtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMDQ9Y29uZmlnIE5FVF9JUFZUSVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zMDYtXFx0c2VsZWN0IElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZzozMDc6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTMwOC1cXHRzZWxlY3QgWEZSTVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zMTY9Y29uZmlnIE5FVF9VRFBfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy0zMTctXFx0dHJpc3RhdGVcXG5uZXQvaXB2NC9LY29uZmlnOjMxODpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY0L0tjb25maWctMzE5LVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNTA9Y29uZmlnIElQVjZfVlRJXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE1Mi1cXHRzZWxlY3QgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnOjE1MzpcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMTU0LVxcdHNlbGVjdCBYRlJNXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE2Mj1jb25maWcgSVBWNl9TSVRcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTY0LVxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWc6MTY1OlxcdHNlbGVjdCBORVRfSVBfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0xNjYtXFx0c2VsZWN0IElQVjZfTkRJU0NfTk9ERVRZUEVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjEwPWNvbmZpZyBJUFY2X0dSRVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMTItXFx0c2VsZWN0IElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIxNC1cXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozMC44Mjk5NjY0ODdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4MzAyMDkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIElQIFR1bm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBrZXkgcGxheWVycyBmb3IgSVAgdHVubmVscyBhcmUgY2VudGVyZWQgYXJvdW5kIGEgZmV3IEtjb25maWcgc3ltYm9scy4gU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGVpdGhlciBgTkVUX0lQX1RVTk5FTGAsIGBORVRfSVBHUkVgLCBvciBgTkVUX0lQSVBgIGlzIGNydWNpYWwuIFRoZSBgTkVUX0lQX1RVTk5FTGAgc3ltYm9sIGRpcmVjdGx5IGxpbmtzIHRvIGBuZXQvaXB2NC9NYWtlZmlsZWAgd2hlcmUgYGlwX3R1bm5lbC5vYCBpcyBidWlsdC4gQWxzbywgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9GT1VfSVBfVFVOTkVMU2AsIHdoaWNoIGxldmVyYWdlcyBlbmNhcHN1bGF0aW9uLlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIGRvdWJsZS1jaGVjayBgTkVUX0ZPVWAgdG8gZW5zdXJlIGl0LCBhbG9uZyB3aXRoIGBORVRfRk9VX0lQX1RVTk5FTFNgLCBpcyBhY2NvdW50ZWQgZm9yLlxuXG5JJ3ZlIGdvdCB0aGUgcmVxdWlyZW1lbnRzIG5haWxlZCBkb3duOiBgV29ydGhGdXp6aW5nYCBpcyB0cnVlLCBhbmQgdGhlIGtleSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBORVRfSVBfVFVOTkVMYCwgYE5FVF9JUEdSRWAsIGBORVRfSVBJUGAsIGFuZCBgTkVUX0ZPVV9JUF9UVU5ORUxTYC5cblxuVGhlIGZvY3VzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiBzaG91bGQgYmUgb24gYEZvY3VzU3ltYm9sc2A6IGBpcF90dW5uZWxfeG1pdGAsIGBpcF9tZF90dW5uZWxfeG1pdGAsIGFuZCBgdG5sX3VwZGF0ZV9wbXR1YC5cblxuSSdtIG1ha2luZyBzdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1ha2Ugc2Vuc2UgaW4gcmVsYXRpb24gdG8gb25lIGFub3RoZXIuIEkgbmVlZCB0byBwZXJmb3JtIGEgcXVpY2sgY2hlY2ssIHRvIGVuc3VyZSBgdG5sX3VwZGF0ZV9wbXR1YCBpcyBhY3R1YWxseSBhIHN5bWJvbCBpbiBgaXBfdHVubmVsLm9gLCB1bmxlc3MsIG9mIGNvdXJzZSwgaXQncyBpbmxpbmVkLiBFdmVuIGlmIGl0J3MgaW5saW5lZCwgSSdtIGNvbmZpZGVudCB0aGF0IGBpcF90dW5uZWxfeG1pdGAgYW5kIGBpcF9tZF90dW5uZWxfeG1pdGAgd2lsbCBiZSBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LlxuXG5Pa2F5LCB0aGF0J3MgdGhlIGNvcmUgb2YgdGhlIGFuYWx5c2lzLiBUaW1lIHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk5MiwiT3V0cHV0VG9rZW5zIjoxODEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6MzQuNzEyOTg5NzAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyNTYyMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUF9UVU5ORUxcIixcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQSVBcIixcbiAgICBcIk5FVF9GT1VfSVBfVFVOTkVMU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF94bWl0XCIsXG4gICAgXCJpcF9tZF90dW5uZWxfeG1pdFwiLFxuICAgIFwidG5sX3VwZGF0ZV9wbXR1XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgUE1UVSBjYWxjdWxhdGlvbiBhbmQgdHVubmVsIGVuY2Fwc3VsYXRpb24gaGFuZGxpbmcgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gdGhlIElQIHR1bm5lbGluZyBzdWJzeXN0ZW0gKG5ldC9pcHY0L2lwX3R1bm5lbC5jKS4gSXQgc25hcHNob3RzIHRoZSB0dW5uZWwgZW5jYXBzdWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgY29uY3VycmVudCBjaGFuZ2VsaW5rIG9wZXJhdGlvbnMsIGRlZmVycyBlbmNhcHN1bGF0aW9uIGluIGlwX3R1bm5lbF94bWl0LCBhbmQgYWNjb3VudHMgZm9yIGVuY2FwIGhlYWRlciBsZW5ndGggaW4gUE1UVSB1cGRhdGVzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIHBhdGhzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgdHVubmVsIGRldmljZXMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBfVFVOTkVMXCIsXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJORVRfRk9VX0lQX1RVTk5FTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBfbWRfdHVubmVsX3htaXRcIixcbiAgICBcInRubF91cGRhdGVfcG10dVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFBNVFUgY2FsY3VsYXRpb24gYW5kIHR1bm5lbCBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nIGR1cmluZyBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIHRoZSBJUCB0dW5uZWxpbmcgc3Vic3lzdGVtIChuZXQvaXB2NC9pcF90dW5uZWwuYykuIEl0IHNuYXBzaG90cyB0aGUgdHVubmVsIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGRhdGEgcmFjZXMgZHVyaW5nIGNvbmN1cnJlbnQgY2hhbmdlbGluayBvcGVyYXRpb25zLCBkZWZlcnMgZW5jYXBzdWxhdGlvbiBpbiBpcF90dW5uZWxfeG1pdCwgYW5kIGFjY291bnRzIGZvciBlbmNhcCBoZWFkZXIgbGVuZ3RoIGluIFBNVFUgdXBkYXRlcy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBwYXRocyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIHR1bm5lbCBkZXZpY2VzIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjM0Ljc5MzI1MzI5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MjQ0Mjg5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTozNC43OTM3MzU0MzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMTQyMzk0MTk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGRhdGEgcmFjZXMgYW5kIFBNVFUvaGVhZHJvb20gY2FsY3VsYXRpb25zIGluIElQdjQgdHVubmVsIHRyYW5zbWlzc2lvbiAoaXBfdHVubmVsX3htaXQgYW5kIHRubF91cGRhdGVfcG10dSkuIFNwZWNpZmljYWxseTpcXG4xLiBJdCBzbmFwc2hvdHMgYHR1bm5lbC1cXHUwMDNlZW5jYXBgIGludG8gYSBzdGFjayB2YXJpYWJsZSBgaXBlbmNhcGAgdXNpbmcgYGRhdGFfcmFjZSgpYCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGJ5IGBpcGdyZV9jaGFuZ2VsaW5rKClgLlxcbjIuIEl0IGFjY291bnRzIGZvciBgZW5jYXBfaGxlbmAgaW4gYHRubF91cGRhdGVfcG10dWAgYW5kIGRlZmVycyBjYWxsaW5nIGBpcF90dW5uZWxfZW5jYXAoKWAgdW50aWwgYWZ0ZXIgc2tiIGhlYWRyb29tIGlzIGV4cGFuZGVkIHdpdGggYHNrYl9jb3dfaGVhZCgpYC5cXG5cXG5SZWdhcmRpbmcgc2FuaXRpemVyczpcXG4tIE1lbW9yeSBzYWZldHkgYnVncyByZWxhdGVkIHRvIGJ1ZmZlciBoZWFkcm9vbSwgc2tiIGJvdW5kcywgYW5kIHVzZS1hZnRlci1mcmVlIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLlxcbi0gQ29uY3VycmVuY3kgaXNzdWVzIGFuZCBkYXRhIHJhY2VzIGFyZSB0YXJnZXRlZCBieSBLQ1NBTi9MT0NLREVQLlxcbi0gVGhlIGxvY2FsIHZhcmlhYmxlIGBpcGVuY2FwYCBpcyBmdWxseSBpbml0aWFsaXplZCB2aWEgc3RydWN0dXJlIGFzc2lnbm1lbnQgYmVmb3JlIGFueSByZWFkLCBgZW5jYXBfaGxlbmAgaXMgYW4gaW50ZWdlciBpbml0aWFsaXplZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlwX2VuY2FwX2hsZW4oKWAsIGFuZCBubyBrZXJuZWwgbWVtb3J5IGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTAxOTNhNTE3ZmFmNzIwMTQ5ZWU5MjRlYjVkYWI3ZTFlY2NhZjcwNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDYgMDU6MDE6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCA5ZDExNGJkNTc1ZjkyLi40NDdiNDM1YjEwY2NhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbisrKyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtNTEyLDE0ICs1MTIsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcbiBzdGF0aWMgaW50IHRubF91cGRhdGVfcG10dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlubmVyX2lwaCxcbi1cdFx0XHQgICAgaW50IHR1bm5lbF9obGVuLCBfX2JlMzIgZHN0LCBib29sIG1kKVxuK1x0XHRcdCAgICBpbnQgdHVubmVsX2hsZW4sIF9fYmUzMiBkc3QsIGJvb2wgbWQsXG4rXHRcdFx0ICAgIGludCBlbmNhcF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRpbnQgcGt0X3NpemU7XG4gXHRpbnQgbXR1O1xuIFxuIFx0dHVubmVsX2hsZW4gPSBtZCA/IHR1bm5lbF9obGVuIDogdHVubmVsLVx1MDAzZWhsZW47XG4tXHRwa3Rfc2l6ZSA9IHNrYi1cdTAwM2VsZW4gLSB0dW5uZWxfaGxlbjtcbitcdHBrdF9zaXplID0gc2tiLVx1MDAzZWxlbiArIGVuY2FwX2hsZW4gLSB0dW5uZWxfaGxlbjtcbiBcdHBrdF9zaXplIC09IGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xuIFxuIFx0aWYgKGRmKSB7XG5AQCAtNjI5LDcgKzYzMCw3IEBAIHZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpKVxuIFx0XHRkZiA9IGh0b25zKElQX0RGKTtcbiBcdGlmICh0bmxfdXBkYXRlX3BtdHUoZGV2LCBza2IsIHJ0LCBkZiwgaW5uZXJfaXBoLCB0dW5uZWxfaGxlbixcbi1cdFx0XHQgICAga2V5LVx1MDAzZXUuaXB2NC5kc3QsIHRydWUpKSB7XG4rXHRcdFx0ICAgIGtleS1cdTAwM2V1LmlwdjQuZHN0LCB0cnVlLCAwKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuQEAgLTY3MSw2ICs2NzIsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqdHVuX2luZm8gPSBOVUxMO1xuK1x0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XG4gXHR1bnNpZ25lZCBpbnQgbWF4X2hlYWRyb29tO1x0LyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi9cbiBcdHN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDtcdFx0LyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi9cbkBAIC02ODAsNiArNjgyLDcgQEAgdm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0Ym9vbCBtZCA9IGZhbHNlO1xuIFx0Ym9vbCBjb25uZWN0ZWQ7XG4gXHRpbnQgZXJyX2NvdW50O1xuK1x0aW50IGVuY2FwX2hsZW47XG4gXHR1OCB0b3MsIHR0bDtcbiBcdF9fYmUzMiBkc3Q7XG4gXHRfX2JlMTYgZGY7XG5AQCAtNzY1LDcgKzc2OCwxMCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VuZXQsIFJFQURfT05DRSh0dW5uZWwtXHUwMDNlcGFybXMubGluayksXG4gXHRcdFx0ICAgIHR1bm5lbC1cdTAwM2Vmd21hcmssIHNrYl9nZXRfaGFzaChza2IpLCAwKTtcbiBcbi1cdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZ0dW5uZWwtXHUwMDNlZW5jYXAsIFx1MDAyNnByb3RvY29sLCBcdTAwMjZmbDQpIFx1MDAzYyAwKVxuK1x0LyogU25hcHNob3QgZW5jYXA7IGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gdXBkYXRlIGl0IGNvbmN1cnJlbnRseS4gKi9cbitcdGlwZW5jYXAgPSBkYXRhX3JhY2UodHVubmVsLVx1MDAzZWVuY2FwKTtcbitcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFx1MDAyNmlwZW5jYXApO1xuK1x0aWYgKGVuY2FwX2hsZW4gXHUwMDNjIDApXG4gXHRcdGdvdG8gdHhfZXJyb3I7XG4gXG4gXHRpZiAoY29ubmVjdGVkIFx1MDAyNlx1MDAyNiBtZCkge1xuQEAgLTgwMyw3ICs4MDksOCBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXHUwMDI2XHUwMDI2ICF0dW5uZWwtXHUwMDNlaWdub3JlX2RmKVxuIFx0XHRkZiB8PSAoaW5uZXJfaXBoLVx1MDAzZWZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpO1xuIFxuLVx0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlKSkge1xuK1x0aWYgKHRubF91cGRhdGVfcG10dShkZXYsIHNrYiwgcnQsIGRmLCBpbm5lcl9pcGgsIDAsIDAsIGZhbHNlLFxuK1x0XHRcdCAgICBlbmNhcF9obGVuKSkge1xuIFx0XHRpcF9ydF9wdXQocnQpO1xuIFx0XHRnb3RvIHR4X2Vycm9yO1xuIFx0fVxuQEAgLTgzNCw3ICs4NDEsNyBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRtYXhfaGVhZHJvb20gPSBMTF9SRVNFUlZFRF9TUEFDRShydC1cdTAwM2Vkc3QuZGV2KSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpXG4tXHRcdFx0KyBydC1cdTAwM2Vkc3QuaGVhZGVyX2xlbiArIGlwX2VuY2FwX2hsZW4oXHUwMDI2dHVubmVsLVx1MDAzZWVuY2FwKTtcbitcdFx0XHQrIHJ0LVx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBtYXhfaGVhZHJvb20pKSB7XG4gXHRcdGlwX3J0X3B1dChydCk7XG5AQCAtODQ1LDYgKzg1MiwxMSBAQCB2b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRpcF90dW5uZWxfYWRqX2hlYWRyb29tKGRldiwgbWF4X2hlYWRyb29tKTtcbiBcbitcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcdTAwMjZpcGVuY2FwLCBcdTAwMjZwcm90b2NvbCwgXHUwMDI2Zmw0KSBcdTAwM2MgMCkge1xuK1x0XHRpcF9ydF9wdXQocnQpO1xuK1x0XHRnb3RvIHR4X2Vycm9yO1xuK1x0fVxuK1xuIFx0aXB0dW5uZWxfeG1pdChOVUxMLCBydCwgc2tiLCBmbDQuc2FkZHIsIGZsNC5kYWRkciwgcHJvdG9jb2wsIHRvcywgdHRsLFxuIFx0XHQgICAgICBkZiwgIW5ldF9lcSh0dW5uZWwtXHUwMDNlbmV0LCBkZXZfbmV0KGRldikpLCAwKTtcbiBcdHJldHVybjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjM0Ljc5MzczNjc4OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDkyMzk0Mzc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipLTVNBTiBGdXp6aW5nIENvbnNpZGVyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGtlcm5lbCBwYXRjaCBqdXN0aWZpZXMgZmlyaW5nIHVwIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLCBiZXlvbmQgdGhlIHVzdWFsIEtBU0FOIGNoZWNrcy4gTGV0J3MgZGlnIGluLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIHBhdGNoIGRpZmYsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQsICp3aHkqLCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBhcmUgZm9yIG1lbW9yeSBzYWZldHkuXG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IHdpdGggZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCDigJMgd2hhdGV2ZXIncyBmYXN0ZXN0IGFuZCBtb3N0IGVmZmljaWVudCDigJMgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhhdCBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gS25vd2luZyB0aGF0IGNvZGUgbGlrZSB0aGUgYmFjayBvZiBteSBoYW5kIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gZGV0ZXJtaW5lIGlmIEtNU0FOIGZ1enppbmcgaXMgd2FycmFudGVkLCBvciBpZiBLQVNBTiBhbG9uZSBpcyBzdWZmaWNpZW50LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDUuNzE3NjgzNjE2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzUwOlxcdFxcdFxcdGlmICghbWQpXFxuIDc1MTpcXHRcXHRcXHRcXHRjb25uZWN0ZWQgPSBmYWxzZTtcXG4gNzUyOlxcdFxcdH1cXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0dG9zID0gdG5sX3BhcmFtcy1cXHUwMDNldG9zO1xcbiA3NTU6XFx0XFx0aWYgKHRvcyBcXHUwMDI2IDB4MSkge1xcbiA3NTY6XFx0XFx0XFx0dG9zIFxcdTAwMjY9IH4weDE7XFxuIDc1NzpcXHRcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHtcXG4gNzU4OlxcdFxcdFxcdFxcdHRvcyA9IGlubmVyX2lwaC1cXHUwMDNldG9zO1xcbiA3NTk6XFx0XFx0XFx0XFx0Y29ubmVjdGVkID0gZmFsc2U7XFxuIDc2MDpcXHRcXHRcXHR9IGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHtcXG4gNzYxOlxcdFxcdFxcdFxcdHRvcyA9IGlwdjZfZ2V0X2RzZmllbGQoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKTtcXG4gNzYyOlxcdFxcdFxcdFxcdGNvbm5lY3RlZCA9IGZhbHNlO1xcbiA3NjM6XFx0XFx0XFx0fVxcbiA3NjQ6XFx0XFx0fVxcbiA3NjU6XFx0XFxuIDc2NjpcXHRcXHRpcF90dW5uZWxfaW5pdF9mbG93KFxcdTAwMjZmbDQsIHByb3RvY29sLCBkc3QsIHRubF9wYXJhbXMtXFx1MDAzZXNhZGRyLFxcbiA3Njc6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMub19rZXksIHRvcyBcXHUwMDI2IElORVRfRFNDUF9NQVNLLFxcbiA3Njg6XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlbmV0LCBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VwYXJtcy5saW5rKSxcXG4gNzY5OlxcdFxcdFxcdFxcdCAgICB0dW5uZWwtXFx1MDAzZWZ3bWFyaywgc2tiX2dldF9oYXNoKHNrYiksIDApO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRcXHQvKiBTbmFwc2hvdCBlbmNhcDsgaXBncmVfY2hhbmdlbGluaygpIGNhbiB1cGRhdGUgaXQgY29uY3VycmVudGx5LiAqL1xcbiA3NzI6XFx0XFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXFx1MDAzZWVuY2FwKTtcXG4gNzczOlxcdFxcdGVuY2FwX2hsZW4gPSBpcF9lbmNhcF9obGVuKFxcdTAwMjZpcGVuY2FwKTtcXG4gNzc0OlxcdFxcdGlmIChlbmNhcF9obGVuIFxcdTAwM2MgMClcXG4gNzc1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcdGlmIChjb25uZWN0ZWQgXFx1MDAyNlxcdTAwMjYgbWQpIHtcXG4gNzc4OlxcdFxcdFxcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgdHVuX2luZm8pO1xcbiA3Nzk6XFx0XFx0XFx0aWYgKHVzZV9jYWNoZSlcXG4gNzgwOlxcdFxcdFxcdFxcdHJ0ID0gZHN0X2NhY2hlX2dldF9pcDQoXFx1MDAyNnR1bl9pbmZvLVxcdTAwM2Vkc3RfY2FjaGUsXFxuIDc4MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmZsNC5zYWRkcik7XFxuIDc4MjpcXHRcXHR9IGVsc2Uge1xcbiA3ODM6XFx0XFx0XFx0cnQgPSBjb25uZWN0ZWQgPyBkc3RfY2FjaGVfZ2V0X2lwNChcXHUwMDI2dHVubmVsLVxcdTAwM2Vkc3RfY2FjaGUsXFxuIDc4NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2Zmw0LnNhZGRyKSA6IE5VTEw7XFxuIDc4NTpcXHRcXHR9XFxuIDc4NjpcXHRcXG4gNzg3OlxcdFxcdGlmICghcnQpIHtcXG4gNzg4OlxcdFxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxuIDc4OTpcXHRcXG4gNzkwOlxcdFxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuIDc5MTpcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfY2Fycmllcl9lcnJvcnMpO1xcbiA3OTI6XFx0XFx0XFx0XFx0Z290byB0eF9lcnJvcjtcXG4gNzkzOlxcdFxcdFxcdH1cXG4gNzk0OlxcdFxcdFxcdGlmICh1c2VfY2FjaGUpXFxuIDc5NTpcXHRcXHRcXHRcXHRkc3RfY2FjaGVfc2V0X2lwNChcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWRzdF9jYWNoZSwgXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsXFxuIDc5NjpcXHRcXHRcXHRcXHRcXHRcXHQgIGZsNC5zYWRkcik7XFxuIDc5NzpcXHRcXHRcXHRlbHNlIGlmICghbWQgXFx1MDAyNlxcdTAwMjYgY29ubmVjdGVkKVxcbiA3OTg6XFx0XFx0XFx0XFx0ZHN0X2NhY2hlX3NldF9pcDQoXFx1MDAyNnR1bm5lbC1cXHUwMDNlZHN0X2NhY2hlLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCxcXG4gNzk5OlxcdFxcdFxcdFxcdFxcdFxcdCAgZmw0LnNhZGRyKTtcXG4gODAwOlxcdFxcdH1cXG4gODAxOlxcdFxcbiA4MDI6XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2ID09IGRldikge1xcbiA4MDM6XFx0XFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4gODA0OlxcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCBjb2xsaXNpb25zKTtcXG4gODA1OlxcdFxcdFxcdGdvdG8gdHhfZXJyb3I7XFxuIDgwNjpcXHRcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdGRmID0gdG5sX3BhcmFtcy1cXHUwMDNlZnJhZ19vZmY7XFxuIDgwOTpcXHRcXHRpZiAocGF5bG9hZF9wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlaWdub3JlX2RmKVxcbiA4MTA6XFx0XFx0XFx0ZGYgfD0gKGlubmVyX2lwaC1cXHUwMDNlZnJhZ19vZmYgXFx1MDAyNiBodG9ucyhJUF9ERikpO1xcbiA4MTE6XFx0XFxuIDgxMjpcXHRcXHRpZiAodG5sX3VwZGF0ZV9wbXR1KGRldiwgc2tiLCBydCwgZGYsIGlubmVyX2lwaCwgMCwgMCwgZmFsc2UsXFxuIDgxMzpcXHRcXHRcXHRcXHQgICAgZW5jYXBfaGxlbikpIHtcXG4gODE0OlxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDgxNTpcXHRcXHRcXHRnb3RvIHR4X2Vycm9yO1xcbiA4MTY6XFx0XFx0fVxcbiA4MTc6XFx0XFxuIDgxODpcXHRcXHRlcnJfY291bnQgPSBSRUFEX09OQ0UodHVubmVsLVxcdTAwM2VlcnJfY291bnQpO1xcbiA4MTk6XFx0XFx0aWYgKGVycl9jb3VudCBcXHUwMDNlIDApIHtcXG4gODIwOlxcdFxcdFxcdGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLFxcbiA4MjE6XFx0XFx0XFx0XFx0XFx0UkVBRF9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX3RpbWUpICsgSVBUVU5ORUxfRVJSX1RJTUVPKSkge1xcbiA4MjI6XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0dW5uZWwtXFx1MDAzZWVycl9jb3VudCwgZXJyX2NvdW50IC0gMSk7XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdFxcdFxcdGRzdF9saW5rX2ZhaWx1cmUoc2tiKTtcXG4gODI1OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDgyNjpcXHRcXHRcXHRcXHRXUklURV9PTkNFKHR1bm5lbC1cXHUwMDNlZXJyX2NvdW50LCAwKTtcXG4gODI3OlxcdFxcdFxcdH1cXG4gODI4OlxcdFxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0dG9zID0gaXBfdHVubmVsX2Vjbl9lbmNhcCh0b3MsIGlubmVyX2lwaCwgc2tiKTtcXG4gODMxOlxcdFxcdHR0bCA9IHRubF9wYXJhbXMtXFx1MDAzZXR0bDtcXG4gODMyOlxcdFxcdGlmICh0dGwgPT0gMCkge1xcbiA4MzM6XFx0XFx0XFx0aWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKVxcbiA4MzQ6XFx0XFx0XFx0XFx0dHRsID0gaW5uZXJfaXBoLVxcdTAwM2V0dGw7XFxuIDgzNTpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gODM2OlxcdFxcdFxcdGVsc2UgaWYgKHBheWxvYWRfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpXFxuIDgzNzpcXHRcXHRcXHRcXHR0dGwgPSAoKGNvbnN0IHN0cnVjdCBpcHY2aGRyICopaW5uZXJfaXBoKS1cXHUwMDNlaG9wX2xpbWl0O1xcbiA4Mzg6XFx0I2VuZGlmXFxuIDgzOTpcXHRcXHRcXHRlbHNlXFxuIDg0MDpcXHRcXHRcXHRcXHR0dGwgPSBpcDRfZHN0X2hvcGxpbWl0KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4gODQxOlxcdFxcdH1cXG4gODQyOlxcdFxcbiA4NDM6XFx0XFx0bWF4X2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtXFx1MDAzZWRzdC5kZXYpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcilcXG4gODQ0OlxcdFxcdFxcdFxcdCsgcnQtXFx1MDAzZWRzdC5oZWFkZXJfbGVuICsgZW5jYXBfaGxlbjtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIG1heF9oZWFkcm9vbSkpIHtcXG4gODQ3OlxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDg0ODpcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZHJvcHBlZCk7XFxuIDg0OTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDUuNzE3ODMxNDU2WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNDcyOTgxMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0cywgZ2VhcmVkIHRvd2FyZHMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHRubF91cGRhdGVfcG10dWAgaW4gQ29udGV4dCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgd2Ugc2hvdWxkIHplcm8gaW4gb24gbGluZXMgNTEwLTU1MCB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiBgdG5sX3VwZGF0ZV9wbXR1YC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIGZvciBhZGp1c3RpbmcgUE1UVSB2YWx1ZXMgaW4gYSB0dW5uZWwgY29udGV4dCwgc28gdW5kZXJzdGFuZGluZyBpdHMgbG9naWMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGFueSBNVFUtcmVsYXRlZCBpc3N1ZXMgb3Igb3B0aW1pemluZyB0dW5uZWwgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcywgaG93IGl0IGhhbmRsZXMgZnJhZ21lbnRhdGlvbiwgYW5kLCBlc3BlY2lhbGx5IGdpdmVuIG15IGJhY2tncm91bmQsIGhvdyBpdCBkZWFscyB3aXRoIHBhdGggTVRVIGRpc2NvdmVyeSBhbmQgYW55IHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcuIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSBhbGwgdGhlIFBNVFUgXCJtYWdpY1wiIGhhcHBlbnMuIEdpdmVuIHRoZSBjb2RlJ3MgY29tcGxleGl0eSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB1c2Ugb2YgYW55IGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgY29uY3VycmVuY3kgY29uc2lkZXJhdGlvbnMsIGVzcGVjaWFsbHkgaWYgd2UgaGF2ZSBtdWx0aXBsZSB0dW5uZWwgaW5zdGFuY2VzLiBNeSBleHBlcnQgZXllIHdpbGwgYmUgbGFzZXItZm9jdXNlZCBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMxNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NDcuOTY1MTMxMzU5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcXG4gNTExOlxcdFxcbiA1MTI6XFx0c3RhdGljIGludCB0bmxfdXBkYXRlX3BtdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gNTEzOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgcnRhYmxlICpydCwgX19iZTE2IGRmLFxcbiA1MTQ6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqaW5uZXJfaXBoLFxcbiA1MTU6XFx0XFx0XFx0XFx0ICAgIGludCB0dW5uZWxfaGxlbiwgX19iZTMyIGRzdCwgYm9vbCBtZCxcXG4gNTE2OlxcdFxcdFxcdFxcdCAgICBpbnQgZW5jYXBfaGxlbilcXG4gNTE3OlxcdHtcXG4gNTE4OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDUxOTpcXHRcXHRpbnQgcGt0X3NpemU7XFxuIDUyMDpcXHRcXHRpbnQgbXR1O1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHR0dW5uZWxfaGxlbiA9IG1kID8gdHVubmVsX2hsZW4gOiB0dW5uZWwtXFx1MDAzZWhsZW47XFxuIDUyMzpcXHRcXHRwa3Rfc2l6ZSA9IHNrYi1cXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuO1xcbiA1MjQ6XFx0XFx0cGt0X3NpemUgLT0gZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9FVEhFUiA/IGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIDogMDtcXG4gNTI1OlxcdFxcbiA1MjY6XFx0XFx0aWYgKGRmKSB7XFxuIDUyNzpcXHRcXHRcXHRtdHUgPSBkc3RfbXR1KFxcdTAwMjZydC1cXHUwMDNlZHN0KSAtIChzaXplb2Yoc3RydWN0IGlwaGRyKSArIHR1bm5lbF9obGVuKTtcXG4gNTI4OlxcdFxcdFxcdG10dSAtPSBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwO1xcbiA1Mjk6XFx0XFx0fSBlbHNlIHtcXG4gNTMwOlxcdFxcdFxcdG10dSA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9tdHUoc2tiX2RzdChza2IpKSA6IGRldi1cXHUwMDNlbXR1O1xcbiA1MzE6XFx0XFx0fVxcbiA1MzI6XFx0XFxuIDUzMzpcXHRcXHRpZiAoc2tiX3ZhbGlkX2RzdChza2IpKVxcbiA1MzQ6XFx0XFx0XFx0c2tiX2RzdF91cGRhdGVfcG10dV9ub19jb25maXJtKHNrYiwgbXR1KTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7XFxuIDUzNzpcXHRcXHRcXHRpZiAoIXNrYl9pc19nc28oc2tiKSBcXHUwMDI2XFx1MDAyNlxcbiA1Mzg6XFx0XFx0XFx0ICAgIChpbm5lcl9pcGgtXFx1MDAzZWZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfREYpKSBcXHUwMDI2XFx1MDAyNlxcbiA1Mzk6XFx0XFx0XFx0ICAgIG10dSBcXHUwMDNjIHBrdF9zaXplKSB7XFxuIDU0MDpcXHRcXHRcXHRcXHRpY21wX25kb19zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsIGh0b25sKG10dSkpO1xcbiA1NDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FMkJJRztcXG4gNTQyOlxcdFxcdFxcdH1cXG4gNTQzOlxcdFxcdH1cXG4gNTQ0OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA1NDU6XFx0XFx0ZWxzZSBpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkge1xcbiA1NDY6XFx0XFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydDY7XFxuIDU0NzpcXHRcXHRcXHRfX2JlMzIgZGFkZHI7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdFxcdHJ0NiA9IHNrYl92YWxpZF9kc3Qoc2tiKSA/IGRzdF9ydDZfaW5mbyhza2JfZHN0KHNrYikpIDpcXG4gNTUwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTEw7XFxuIDU1MTpcXHRcXHRcXHRkYWRkciA9IG1kID8gZHN0IDogdHVubmVsLVxcdTAwM2VwYXJtcy5pcGguZGFkZHI7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdFxcdGlmIChydDYgXFx1MDAyNlxcdTAwMjYgbXR1IFxcdTAwM2MgZHN0X210dShza2JfZHN0KHNrYikpIFxcdTAwMjZcXHUwMDI2XFxuIDU1NDpcXHRcXHRcXHRcXHQgICBtdHUgXFx1MDAzZT0gSVBWNl9NSU5fTVRVKSB7XFxuIDU1NTpcXHRcXHRcXHRcXHRpZiAoKGRhZGRyIFxcdTAwMjZcXHUwMDI2ICFpcHY0X2lzX211bHRpY2FzdChkYWRkcikpIHx8XFxuIDU1NjpcXHRcXHRcXHRcXHQgICAgcnQ2LVxcdTAwM2VydDZpX2RzdC5wbGVuID09IDEyOCkge1xcbiA1NTc6XFx0XFx0XFx0XFx0XFx0cnQ2LVxcdTAwM2VydDZpX2ZsYWdzIHw9IFJURl9NT0RJRklFRDtcXG4gNTU4OlxcdFxcdFxcdFxcdFxcdGRzdF9tZXRyaWNfc2V0KHNrYl9kc3Qoc2tiKSwgUlRBWF9NVFUsIG10dSk7XFxuIDU1OTpcXHRcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjQ3Ljk2NTI2ODQyOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzY4Njc2MTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQ29tbWl0IERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpc3NlY3QgdGhpcyBjb21taXQuIE15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGUgKndoYXQqLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgZ3Jhc3AgdGhlIHByb2JsZW0gdGhpcyBhZGRyZXNzZXMuIEknbSBsb29raW5nIGJleW9uZCB0aGUgY29kZTsgd2hhdCB3YXMgdGhlIHRyaWdnZXI/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBzeXN0ZW0/IFBlcmZvcm1hbmNlLCBzZWN1cml0eSwgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eT8gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzLiBNeSBmb2N1cyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgYGlwX3R1bm5lbF9lbmNhcGAgYW5kIGBpcF9lbmNhcF9obGVuYCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIChvciB3aGF0ZXZlciB0aGlzIHNwZWNpZmljIHN5c3RlbSB1c2VzKS4gVGhlc2UgYXJlIGxpa2VseSBrZXkgZWxlbWVudHMsIGdpdmVuIHRoZWlyIG1lbnRpb24uIFRoZXkgYWxtb3N0IGNlcnRhaW5seSByZWxhdGUgdG8gc29tZSBmb3JtIG9mIElQIGVuY2Fwc3VsYXRpb24sIHByb2JhYmx5IHJlbGF0ZWQgdG8gdHVubmVsaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgaGVyZSBhcmUgYWZmZWN0aW5nIHRob3NlIGZ1bmN0aW9ucy92YXJpYWJsZXMuIEFueSBtb2RpZmljYXRpb25zIHRvIHRob3NlIGFyZWFzIGFyZSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBjaGFuZ2VzLiBBcmUgd2UgZGVhbGluZyB3aXRoIGhlYWRlciBzaXplIGlzc3Vlcz8gQW55IHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGNoYW5nZXM/IEVuY3J5cHRpb24gY29uY2VybnM/IFdoYXQncyB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBhcmUgdXNlZCwgYW5kIGhvdyBkb2VzIHRoaXMgdXBkYXRlIGludGVyYWN0PyBJdCBhbGwgYm9pbHMgZG93biB0byB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHBhY2tldHMgYXJlIGhhbmRsZWQsIGFuZCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTU1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQwNTowMTo1MC4zMzM5NDY2MTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjM2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2VuY2FwX2hsZW58aXBfdHVubmVsX2VuY2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9mb3VfY29yZS5jPTkwMz1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGZvdV9ubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0ge1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTUtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MTY6c2l6ZV90IGZvdV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MTcte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05MjA9RVhQT1JUX1NZTUJPTChmb3VfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjEtXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5MjI6c2l6ZV90IGd1ZV9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxubmV0L2lwdjQvZm91X2NvcmUuYy05MjMte1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05Mzg9RVhQT1JUX1NZTUJPTChndWVfZW5jYXBfaGxlbik7XFxubmV0L2lwdjQvZm91X2NvcmUuYy05MzktXFxubmV0L2lwdjQvZm91X2NvcmUuYzo5NDA6aW50IF9fZm91X2J1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTQxLVxcdFxcdCAgICAgICB1OCAqcHJvdG9jb2wsIF9fYmUxNiAqc3BvcnQsIGludCB0eXBlKVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz05NTQ9RVhQT1JUX1NZTUJPTChfX2ZvdV9idWlsZF9oZWFkZXIpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtOTU1LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6OTU2OmludCBfX2d1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTk1Ny1cXHRcXHQgICAgICAgdTggKnByb3RvY29sLCBfX2JlMTYgKnNwb3J0LCBpbnQgdHlwZSlcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTAyNz1FWFBPUlRfU1lNQk9MKF9fZ3VlX2J1aWxkX2hlYWRlcik7XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzAtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMDMxOnN0YXRpYyB2b2lkIGZvdV9idWlsZF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwMzItXFx0XFx0XFx0ICBzdHJ1Y3QgZmxvd2k0ICpmbDQsIHU4ICpwcm90b2NvbCwgX19iZTE2IHNwb3J0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDQ5LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA1MDpzdGF0aWMgaW50IGZvdV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNTEtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMDY2LVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTA2NzpzdGF0aWMgaW50IGd1ZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSxcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEwNjgtXFx0XFx0XFx0ICAgIHU4ICpwcm90b2NvbCwgc3RydWN0IGZsb3dpNCAqZmw0KVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYz0xMDk2PXN0YXRpYyBpbnQgZ3VlX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbylcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2MS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExNjI6c3RhdGljIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIGZvdV9pcHR1bl9vcHMgPSB7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTYzLVxcdC5lbmNhcF9obGVuID0gZm91X2VuY2FwX2hsZW4sXFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNjctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTY4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBndWVfaXB0dW5fb3BzID0ge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE2OS1cXHQuZW5jYXBfaGxlbiA9IGd1ZV9lbmNhcF9obGVuLFxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTczLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE3NDpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE3NS17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzctXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTc4OlxcdHJldCA9IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKFxcdTAwMjZmb3VfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfRk9VKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExNzktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4My1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODQ6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9vcHMoXFx1MDAyNmd1ZV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9HVUUpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4NS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4Ni1cXHRcXHRwcl9lcnIoXFxcImNhbid0IGFkZCBndWUgb3BzXFxcXG5cXFwiKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jOjExODc6XFx0XFx0aXBfdHVubmVsX2VuY2FwX2RlbF9vcHMoXFx1MDAyNmZvdV9pcHR1bl9vcHMsIFRVTk5FTF9FTkNBUF9GT1UpO1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTE4OC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMTkzLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NDpzdGF0aWMgdm9pZCBpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHModm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTUte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTE5NjpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhcXHUwMDI2Zm91X2lwdHVuX29wcywgVFVOTkVMX0VOQ0FQX0ZPVSk7XFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMTk3OlxcdGlwX3R1bm5lbF9lbmNhcF9kZWxfb3BzKFxcdTAwMjZndWVfaXB0dW5fb3BzLCBUVU5ORUxfRU5DQVBfR1VFKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTExOTgtfVxcbi0tXFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjAxLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTIwMjpzdGF0aWMgaW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwMy17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyMDYtXFxubmV0L2lwdjQvZm91X2NvcmUuYzoxMjA3OnN0YXRpYyB2b2lkIGlwX3R1bm5lbF9lbmNhcF9kZWxfZm91X29wcyh2b2lkKVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTIwOC17XFxuLS1cXG5uZXQvaXB2NC9mb3VfY29yZS5jPTEyNDE9c3RhdGljIGludCBfX2luaXQgZm91X2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmMtMTI1Ni1cXG5uZXQvaXB2NC9mb3VfY29yZS5jOjEyNTc6XFx0cmV0ID0gaXBfdHVubmVsX2VuY2FwX2FkZF9mb3Vfb3BzKCk7XFxubmV0L2lwdjQvZm91X2NvcmUuYy0xMjU4LVxcdGlmIChyZXQgPT0gMClcXG4tLVxcbm5ldC9pcHY0L2ZvdV9jb3JlLmM9MTI2OT1zdGF0aWMgdm9pZCBfX2V4aXQgZm91X2Zpbmkodm9pZClcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzAte1xcbm5ldC9pcHY0L2ZvdV9jb3JlLmM6MTI3MTpcXHRpcF90dW5uZWxfZW5jYXBfZGVsX2ZvdV9vcHMoKTtcXG5uZXQvaXB2NC9mb3VfY29yZS5jLTEyNzItXFx0Z2VubF91bnJlZ2lzdGVyX2ZhbWlseShcXHUwMDI2Zm91X25sX2ZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMjk2PXN0YXRpYyBib29sIGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjEyOTc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMjk4LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzOTQ9aXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NS17XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5NjpcXHRzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwIGlwZW5jYXA7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktXFx0XFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMDpcXHRcXHRpbnQgZXJyID0gaXBfdHVubmVsX2VuY2FwX3NldHVwKHQsIFxcdTAwMjZpcGVuY2FwKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NDU3PUVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yY3YpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ1OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0NTk6aW50IGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHMsXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDYwLVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbnVtKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDY0LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2NTpcXHRyZXR1cm4gIWNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ2Ni1cXHRcXHRcXHRcXHUwMDI2aXB0dW5fZW5jYXBzW251bV0sXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NjgtfVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ2OTpFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9lbmNhcF9hZGRfb3BzKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NzAtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDcxOmludCBpcF90dW5uZWxfZW5jYXBfZGVsX29wcyhjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzLFxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3Mi1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG51bSlcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ3OC1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0Nzk6XFx0cmV0ID0gKGNtcHhjaGcoKGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICoqKVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ4MC1cXHRcXHQgICAgICAgXFx1MDAyNmlwdHVuX2VuY2Fwc1tudW1dLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg2LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo0ODc6RVhQT1JUX1NZTUJPTChpcF90dW5uZWxfZW5jYXBfZGVsX29wcyk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDg4LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ4OTppbnQgaXBfdHVubmVsX2VuY2FwX3NldHVwKHN0cnVjdCBpcF90dW5uZWwgKnQsXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDkwOlxcdFxcdFxcdCAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTEte1xcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDk1LVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjQ5NjpcXHRobGVuID0gaXBfZW5jYXBfaGxlbihpcGVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00OTctXFx0aWYgKGhsZW4gXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNTA5LX1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo1MTA6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2VuY2FwX3NldHVwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy01MTEtXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz01NzI9dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjA1LVxcdGlmICghdHVubmVsX2hsZW4pXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjA2OlxcdFxcdHR1bm5lbF9obGVuID0gaXBfZW5jYXBfaGxlbihcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDctXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjA4OlxcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWVuY2FwLCBcXHUwMDI2cHJvdG8sIFxcdTAwMjZmbDQpIFxcdTAwM2MgMClcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MDktXFx0XFx0Z290byB0eF9lcnJvcjtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTY3MD12b2lkIGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzQtXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICp0dW5faW5mbyA9IE5VTEw7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6Njc1OlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy02NzYtXFx0Y29uc3Qgc3RydWN0IGlwaGRyICppbm5lcl9pcGg7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03NzItXFx0aXBlbmNhcCA9IGRhdGFfcmFjZSh0dW5uZWwtXFx1MDAzZWVuY2FwKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3NzM6XFx0ZW5jYXBfaGxlbiA9IGlwX2VuY2FwX2hsZW4oXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTc3NC1cXHRpZiAoZW5jYXBfaGxlbiBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTQtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6ODU1OlxcdGlmIChpcF90dW5uZWxfZW5jYXAoc2tiLCBcXHUwMDI2aXBlbmNhcCwgXFx1MDAyNnByb3RvY29sLCBcXHUwMDI2Zmw0KSBcXHUwMDNjIDApIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy04NTYtXFx0XFx0aXBfcnRfcHV0KHJ0KTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMtNDEtXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYzo0Mjpjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyBfX3JjdSAqXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy00My1cXHRcXHRpcHR1bl9lbmNhcHNbTUFYX0lQVFVOX0VOQ0FQX09QU10gX19yZWFkX21vc3RseTtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmM9MTEyOT1ib29sIGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG5uZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jOjExMzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApXFxubmV0L2lwdjQvaXBfdHVubmVsX2NvcmUuYy0xMTMxLXtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYz00NjQ9c3RhdGljIGludCBpcGlwX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00NzAtXFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG5uZXQvaXB2NC9pcGlwLmM6NDcxOlxcdHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgaXBlbmNhcDtcXG5uZXQvaXB2NC9pcGlwLmMtNDcyLVxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDc1LVxcdGlmIChpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhkYXRhLCBcXHUwMDI2aXBlbmNhcCkpIHtcXG5uZXQvaXB2NC9pcGlwLmM6NDc2OlxcdFxcdGludCBlcnIgPSBpcF90dW5uZWxfZW5jYXBfc2V0dXAodCwgXFx1MDAyNmlwZW5jYXApO1xcbm5ldC9pcHY0L2lwaXAuYy00NzctXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9NDg3PXN0YXRpYyBpbnQgaXBpcF9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcGlwLmMtNDkxLVxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwaXAuYzo0OTI6XFx0c3RydWN0IGlwX3R1bm5lbF9lbmNhcCBpcGVuY2FwO1xcbm5ldC9pcHY0L2lwaXAuYy00OTMtXFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy00OTctXFx0aWYgKGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKGRhdGEsIFxcdTAwMjZpcGVuY2FwKSkge1xcbm5ldC9pcHY0L2lwaXAuYzo0OTg6XFx0XFx0aW50IGVyciA9IGlwX3R1bm5lbF9lbmNhcF9zZXR1cCh0LCBcXHUwMDI2aXBlbmNhcCk7XFxubmV0L2lwdjQvaXBpcC5jLTQ5OS1cXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTgxNz1zdGF0aWMgaW50IF9fdWRwNF9saWJfZXJyX2VuY2FwX25vX3NrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtODIyLVxcdFxcdGludCAoKmhhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKTtcXG5uZXQvaXB2NC91ZHAuYzo4MjM6XFx0XFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9lbmNhcF9vcHMgKmVuY2FwO1xcbm5ldC9pcHY0L3VkcC5jLTgyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NTAuMzg3NTg3NDMzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NzMwODUyNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRlZmluaXRpb25zLCBwdWxsaW5nIGZyb20gbXkgZXhwZXJ0IGtub3dsZWRnZSBvZiBuZXR3b3JrIGVuY2Fwc3VsYXRpb246XG5cbioqRGVjaXBoZXJpbmcgYGlwX2VuY2FwX2hsZW5gIGFuZCBgaXBfdHVubmVsX2VuY2FwYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBpcF9lbmNhcF9obGVuYCBhbmQgYGlwX3R1bm5lbF9lbmNhcGAuICBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoZXNlIGFyZSBsaWtlbHkgY29yZSBjb21wb25lbnRzIG9mIElQIGVuY2Fwc3VsYXRpb24sIGFuZCBteSBzcGlkZXkgc2Vuc2VzIGFyZSB0aW5nbGluZyAtIGl0J3MgcHJvYmFibHkgcmVsYXRlZCB0byBob3cgd2UgaGFuZGxlIGFkZGluZyBoZWFkZXJzIGFuZCBmcmFtaW5nIGRhdGEgZm9yIHR1bm5lbGluZyBhbmQgb3RoZXIgZW5jYXBzdWxhdGlvbiBzY2VuYXJpb3MuIGBpcF9lbmNhcF9obGVuYCBpbW1lZGlhdGVseSBzaWduYWxzIFwiaGVhZGVyIGxlbmd0aFwiLiBJJ20gYmV0dGluZyB0aGlzIGlzIGEgdmFsdWUsIHByb2JhYmx5IGFuIGludGVnZXIsIHRoYXQgdGVsbHMgdGhlIElQIHN0YWNrICpleGFjdGx5KiBob3cgbWFueSBieXRlcyBuZWVkIHRvIGJlIHByZXBlbmRlZCB0byB0aGUgb3JpZ2luYWwgcGFja2V0IHdoZW4gaXQncyBiZWluZyBlbmNhcHN1bGF0ZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHRoZSB1cHBlciBsYXllcnMgdG8gY2FsY3VsYXRlIGNoZWNrc3VtcyBhbmQgcHJvcGVybHkgaW50ZXJwcmV0IHRoZSBpbmNvbWluZyBkYXRhLiBJJ20gdGhpbmtpbmcgaXTigJlsbCBiZSB1c2VkIGF0IGJvdGggdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBzaWRlcy5cblxuVGhlbiB0aGVyZSdzIGBpcF90dW5uZWxfZW5jYXBgLiBUaGlzIHNjcmVhbXMgXCJ0dW5uZWwgZW5jYXBzdWxhdGlvbixcIiBvZiBjb3Vyc2UhIEl0J3MgcHJvYmFibHkgYSBzdHJ1Y3R1cmUgb3IgYSBmdW5jdGlvbiBwb2ludGVyLCBpZiBJIHdlcmUgdG8gZ3Vlc3MsIHRoYXQgaGFuZGxlcyB0aGUgYWN0dWFsIHByb2Nlc3Mgb2YgY29uc3RydWN0aW5nIHRoZSB0dW5uZWwgaGVhZGVycy4gIEl0IG1pZ2h0IGluY2x1ZGUgdGhpbmdzIGxpa2UgYWRkaW5nIHRoZSBvdXRlciBJUCBoZWFkZXIgKGlmIGl0J3MgYW4gSVAtaW4tSVAgdHVubmVsKSwgR1JFIGhlYWRlcnMsIG9yIG90aGVyIGVuY2Fwc3VsYXRpb24tc3BlY2lmaWMgZmllbGRzLiBJ4oCZZCBleHBlY3QgdGhpcyB0byBiZSB0aGUgd29ya2hvcnNlIHRoYXQgd3JhcHMgdGhlIGlubmVyIHBhY2tldCBpbiB0aGUgbmVjZXNzYXJ5IHR1bm5lbCBmcmFtaW5nLCBlZmZlY3RpdmVseSBoaWRpbmcgdGhlIG9yaWdpbmFsIElQIHBheWxvYWQgYW5kIHByb3ZpZGluZyBhIHNhZmUgcGFzc2FnZSB0aHJvdWdoIHNvbWUgbmV0d29yay4gSSdkIGltYWdpbmUgdGhhdCB0aGlzIGVuY2Fwc3VsYXRlcyB0aGUgZW50aXJlIHByb2NlZHVyZSBvZiBjb25zdHJ1Y3RpbmcgdGhlIG5ldyBJUCBwYWNrZXQuIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjb2RlIHVzZXMgdGhlc2UgdHdvIGluIGNvbmp1bmN0aW9uLiBJIHdvbmRlciBpZiB0aGVyZSBpcyBhbiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0d28sIHN1Y2ggYXMsIHRoZSBgaXBfdHVubmVsX2VuY2FwYCBtYWtlcyB1c2Ugb2YgYGlwX2VuY2FwX2hsZW5gIHRvIGNvbnN0cnVjdCB0aGUgZW5jYXBzdWxhdGlvbiBmcmFtZS4gIFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkzNCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU1LjA2MDY3NDY2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0MjU4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdHVubmVsX2VuY2FwXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oPTUyNj1zdGF0aWMgaW5saW5lIGludCBpcF9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxuLS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTQ1LVxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaDo1NDY6c3RhdGljIGlubGluZSBpbnQgaXBfdHVubmVsX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTU0Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU1LjIzMTEwNTMxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODgwMDA4MTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBfdHVubmVscy5oYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgSVAgdHVubmVscywgYW5kIHRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCByZWxldmFudCBkZWZpbml0aW9ucyBpcyB0aGUga2VybmVsIGhlYWRlciBmaWxlLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLiBBbmQgSSdtIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDUyMDsgdGhhdCdzIG9mdGVuIGEgZ29vZCBzcG90IHRvIGZpbmQga2V5IGRhdGEgc3RydWN0dXJlcyBvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCBzaW1pbGFyIG5ldHdvcmtpbmcgY29kZS4gSXQncyBhIHRhcmdldGVkIGFwcHJvYWNoIHJhdGhlciB0aGFuIGEgZnVsbCBjb2RlIHJldmlldyBhdCB0aGlzIHBvaW50LCB3aGljaCBpcyBpbXBvcnRhbnQgZ2l2ZW4gbXkgdGltZS4gTm93LCBsZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDE6NTcuMTExMTE2NDgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFx0ICogYSBiYXNlIG5ldHdvcmsgaGVhZGVyIGluIHNrYi1cXHUwMDNlaGVhZC5cXG4gNTE2OlxcdFxcdCAqL1xcbiA1MTc6XFx0XFx0cmVhc29uID0gcHNrYl9tYXlfcHVsbF9yZWFzb24oc2tiLCBtYWNsZW4gKyBuaGxlbik7XFxuIDUxODpcXHRcXHRpZiAocmVhc29uKVxcbiA1MTk6XFx0XFx0XFx0cmV0dXJuIHJlYXNvbjtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIG1hY2xlbik7XFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdHJldHVybiBTS0JfTk9UX0RST1BQRURfWUVUO1xcbiA1MjQ6XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHRzdGF0aWMgaW5saW5lIGludCBpcF9lbmNhcF9obGVuKHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmUpXFxuIDUyNzpcXHR7XFxuIDUyODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwX29wcyAqb3BzO1xcbiA1Mjk6XFx0XFx0aW50IGhsZW4gPSAtRUlOVkFMO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSA9PSBUVU5ORUxfRU5DQVBfTk9ORSlcXG4gNTMyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA1MzM6XFx0XFxuIDUzNDpcXHRcXHRpZiAoZS1cXHUwMDNldHlwZSBcXHUwMDNlPSBNQVhfSVBUVU5fRU5DQVBfT1BTKVxcbiA1MzU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUzNjpcXHRcXG4gNTM3OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gNTM4OlxcdFxcdG9wcyA9IHJjdV9kZXJlZmVyZW5jZShpcHR1bl9lbmNhcHNbZS1cXHUwMDNldHlwZV0pO1xcbiA1Mzk6XFx0XFx0aWYgKGxpa2VseShvcHMgXFx1MDAyNlxcdTAwMjYgb3BzLVxcdTAwM2VlbmNhcF9obGVuKSlcXG4gNTQwOlxcdFxcdFxcdGhsZW4gPSBvcHMtXFx1MDAzZWVuY2FwX2hsZW4oZSk7XFxuIDU0MTpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gNTQyOlxcdFxcbiA1NDM6XFx0XFx0cmV0dXJuIGhsZW47XFxuIDU0NDpcXHR9XFxuIDU0NTpcXHRcXG4gNTQ2OlxcdHN0YXRpYyBpbmxpbmUgaW50IGlwX3R1bm5lbF9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA1NDc6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplLFxcbiA1NDg6XFx0XFx0XFx0XFx0XFx0ICB1OCAqcHJvdG9jb2wsIHN0cnVjdCBmbG93aTQgKmZsNClcXG4gNTQ5OlxcdHtcXG4gNTUwOlxcdFxcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzICpvcHM7XFxuIDU1MTpcXHRcXHRpbnQgcmV0ID0gLUVJTlZBTDtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0aWYgKGUtXFx1MDAzZXR5cGUgPT0gVFVOTkVMX0VOQ0FQX05PTkUpXFxuIDU1NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTU1OlxcdFxcbiA1NTY6XFx0XFx0aWYgKGUtXFx1MDAzZXR5cGUgXFx1MDAzZT0gTUFYX0lQVFVOX0VOQ0FQX09QUylcXG4gNTU3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDA1OjAxOjU3LjExMTIxNTc4MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTA2NDM4NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFR1bm5lbCBFbmNhcHN1bGF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBwb3RlbnRpYWwgcmlza3MgYW5kIHZ1bG5lcmFiaWxpdGllcywgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB3b3VsZC5cblxuRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgYHRubF91cGRhdGVfcG10dWAgYW5kIGBpcF90dW5uZWxfeG1pdGAuIFRoZSBhZGRpdGlvbiBvZiBgZW5jYXBfaGxlbmAgYXMgYW4gYXJndW1lbnQgdG8gYHRubF91cGRhdGVfcG10dWAgaXMga2V5LiBJdCBzaWduYWxzIGEgc2hpZnQgaW4gaG93IHRoZSBlbmNhcHN1bGF0aW9uIGhlYWRlciBsZW5ndGggaXMgaGFuZGxlZCwgZGlyZWN0bHkgaW1wYWN0aW5nIHBhY2tldCBzaXplIGNhbGN1bGF0aW9ucywgYW5kIHRoZXJlZm9yZSwgUE1UVSBkZXRlcm1pbmF0aW9uLiBUaGUgY2hhbmdlIHRvIGBwa3Rfc2l6ZWAgY2FsY3VsYXRpb24gKGBza2ItXHUwMDNlbGVuICsgZW5jYXBfaGxlbiAtIHR1bm5lbF9obGVuYCkgaXMgb2J2aW91c2x5IHdoZXJlIHRoaXMgaW1wYWN0IGxpZXMsIGFuZCBuZWVkcyB0byBiZSBhY2NvdW50ZWQgZm9yLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGlwX3R1bm5lbF94bWl0YCBub3cgKnNuYXBzaG90cyogdGhlIGVuY2Fwc3VsYXRpb24gY29uZmlndXJhdGlvbiBpbnRvIGEgbG9jYWwgdmFyaWFibGUsIGBpcGVuY2FwYCwgdXNpbmcgYGRhdGFfcmFjZSh0dW5uZWwtXHUwMDNlZW5jYXApYC4gVGhpcyAqbXVzdCogYmUgYWJvdXQgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgZW5zdXJpbmcgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGVuY2Fwc3VsYXRpb24gc2V0dGluZ3MgZHVyaW5nIHRoZSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gVGhpcyBlbmNhcHN1bGF0aW9uIG9jY3VycyByaWdodCBiZWZvcmUgYGlwdHVubmVsX3htaXRgLCBhZnRlciBhIGNoZWNrIGZvciBhdmFpbGFibGUgaGVhZHJvb20uXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlICptdXN0KiB2ZXJpZnkgaWYgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrIGV4aXN0cyBoZXJlLiBgaXBlbmNhcGAgaXMgcG9wdWxhdGVkIHZpYSBhIHN0cnVjdCBhc3NpZ25tZW50IGZyb20gYHR1bm5lbC1cdTAwM2VlbmNhcGAsIHRoaXMgaXMgYSBnb29kIHNpZ24uIGBlbmNhcF9obGVuYCBpcyBkZXJpdmVkIGZyb20gYGlwZW5jYXBgIHZpYSBhIGRlZGljYXRlZCBmdW5jdGlvbiwgYGlwX2VuY2FwX2hsZW4oKWAsIHdoaWNoLCBvbiBpdHMgb3duLCBzZWVtcyBzYWZlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGB0bmxfdXBkYXRlX3BtdHVgIGlzIGFsc28gbm90IHJlYWRpbmcgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSwgd2hpY2ggaXQgc2hvdWxkbid0LCBzaW5jZSBpdCdzIG9ubHkgcmVjZWl2aW5nIHRoZSBgZW5jYXBfaGxlbmAgaW50LiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgaW1wb3J0YW50bHksIHRoZSBgcGt0X3NpemVgIGNhbGN1bGF0aW9uIGlzIHNvbGVseSB1c2VkIGZvciBQTVRVL0lDTVAgY2FsY3VsYXRpb25zIGFuZCBmcmFnbWVudHMsIHNvIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgaXNzdWVzIHRoZXJlLlxuXG5XZSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBJcyB0aGVyZSBhbnkgc3RydWN0IHBhZGRpbmcgaW5mby1sZWFrcywgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhPyBgaXBlbmNhcGAgaXMgaW5pdGlhbGl6ZWQgdmlhIHN0cnVjdCBhc3NpZ25tZW50ICpiZWZvcmUqIGJlaW5nIHVzZWQgaW4gYGlwX2VuY2FwX2hsZW4oKWAgYW5kIGBpcF90dW5uZWxfZW5jYXAoKWAuIGBlbmNhcF9obGVuYCBpcyBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBBbGwgYnJhbmNoZXMgcmVseSBvbiBpbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vIGRhdGEgZ29lcyB0byB1c2Vyc3BhY2UuIFRoaXMgc2VlbXMgcm9idXN0LlxuXG5XaGF0IGJ1Z3MgYXJlIGZpeGVkIG9yIHBvdGVudGlhbGx5IGludHJvZHVjZWQ/IFRoaXMgbG9va3MgbGlrZSBhIHJhY2UgY29uZGl0aW9uIGZpeCBieSBzbmFwc2hvdHRpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcGFyYW1ldGVycy4gSXQncyBtb3ZpbmcgdGhlIGVuY2Fwc3VsYXRpb24gKmFmdGVyKiBoZWFkcm9vbSBleHBhbnNpb24sIHdoaWNoIGlzIHNtYXJ0LCB0byBwcmV2ZW50IHdyaXRpbmcgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSBQTVRVIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3RlZCBieSBhY2NvdW50aW5nIGZvciB0aGUgZW5jYXBzdWxhdGlvbiBoZWFkZXIgbGVuZ3RoLiBUaGVzZSBhcmUgZ29vZCBjaGFuZ2VzLlxuXG5GaW5hbGx5LCBkb2VzIHRoaXMgcGF0Y2ggd2FycmFudCBLTVNBTj8gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8gbGVha3MgdG8gdXNlcnNwYWNlLiBCZWNhdXNlIGFsbCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBubyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBLTVNBTi5cblxuTGV0J3MgZG8gYSBmaW5hbCBjaGVjayB0byBjb25maXJtIHRoYXQgY29uY2x1c2lvbjpcblxuMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXJzcGFjZSB3aGVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC5cbjIuICBObyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjMuICBObyBhbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgQm91bmRzIGNoZWNrcyBhbmQgbGVuZ3RocyBhcmUgZG9uZSBzYWZlbHkuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEl0J3MgYSBzb2xpZCBwYXRjaCwgYWRkcmVzc2luZyByZWFsIGNvbmN1cnJlbmN5LCBidWZmZXItaGFuZGxpbmcsIGFuZCBsb2dpYyBjb25jZXJucyB3aXRob3V0IGludHJvZHVjaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzUsIk91dHB1dFRva2VucyI6MjgyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMDU6MDI6MDYuMjE3NjU3MDU2WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IHNuYXBzaG90cyBgdHVubmVsLVxcdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXFxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxcblxcblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRhdGEgcmFjZXMgYXJlIHRhcmdldGVkIGJ5IEtDU0FOL0xPQ0tERVAuXFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgZGF0YSByYWNlcyBhbmQgUE1UVS9oZWFkcm9vbSBjYWxjdWxhdGlvbnMgaW4gSVB2NCB0dW5uZWwgdHJhbnNtaXNzaW9uIChpcF90dW5uZWxfeG1pdCBhbmQgdG5sX3VwZGF0ZV9wbXR1KS4gU3BlY2lmaWNhbGx5OlxcbjEuIEl0IHNuYXBzaG90cyBgdHVubmVsLVxcdTAwM2VlbmNhcGAgaW50byBhIHN0YWNrIHZhcmlhYmxlIGBpcGVuY2FwYCB1c2luZyBgZGF0YV9yYWNlKClgIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb24gYnkgYGlwZ3JlX2NoYW5nZWxpbmsoKWAuXFxuMi4gSXQgYWNjb3VudHMgZm9yIGBlbmNhcF9obGVuYCBpbiBgdG5sX3VwZGF0ZV9wbXR1YCBhbmQgZGVmZXJzIGNhbGxpbmcgYGlwX3R1bm5lbF9lbmNhcCgpYCB1bnRpbCBhZnRlciBza2IgaGVhZHJvb20gaXMgZXhwYW5kZWQgd2l0aCBgc2tiX2Nvd19oZWFkKClgLlxcblxcblJlZ2FyZGluZyBzYW5pdGl6ZXJzOlxcbi0gTWVtb3J5IHNhZmV0eSBidWdzIHJlbGF0ZWQgdG8gYnVmZmVyIGhlYWRyb29tLCBza2IgYm91bmRzLCBhbmQgdXNlLWFmdGVyLWZyZWUgYXJlIGNvdmVyZWQgYnkgS0FTQU4uXFxuLSBDb25jdXJyZW5jeSBpc3N1ZXMgYW5kIGRhdGEgcmFjZXMgYXJlIHRhcmdldGVkIGJ5IEtDU0FOL0xPQ0tERVAuXFxuLSBUaGUgbG9jYWwgdmFyaWFibGUgYGlwZW5jYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBzdHJ1Y3R1cmUgYXNzaWdubWVudCBiZWZvcmUgYW55IHJlYWQsIGBlbmNhcF9obGVuYCBpcyBhbiBpbnRlZ2VyIGluaXRpYWxpemVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBgaXBfZW5jYXBfaGxlbigpYCwgYW5kIG5vIGtlcm5lbCBtZW1vcnkgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[1] Phase: Succeeded StartedAt: 2026-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 05:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 05:02:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2] Phase: Succeeded StartedAt: 2026-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 05:03:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:02:48 +0000 UTC FinishedAt: 2026-09-06 05:02:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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-workflowspxmb/series-workflowspxmb-convert-artifact-3365039114/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:03:09 +0000 UTC FinishedAt: 2026-09-06 05:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:03:09 +0000 UTC FinishedAt: 2026-09-06 05:22:44 +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:*581e7be5-065a-4a66-87c5-d72a6ea2b7e1,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-workflowspxmb/series-workflowspxmb-convert-artifact-3365039114/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": "a1a84405-94ea-4b14-a27c-2567aaa6f833", "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-workflowspxmb/series-workflowspxmb-build-action-4066580216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:03:09 +0000 UTC FinishedAt: 2026-09-06 05:22:34 +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:*581e7be5-065a-4a66-87c5-d72a6ea2b7e1,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-workflowspxmb/series-workflowspxmb-convert-artifact-3365039114/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": "a1a84405-94ea-4b14-a27c-2567aaa6f833", "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-workflowspxmb/series-workflowspxmb-build-action-4066580216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:44 +0000 UTC FinishedAt: 2026-09-06 05:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:44 +0000 UTC FinishedAt: 2026-09-06 05:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:44 +0000 UTC FinishedAt: 2026-09-06 05:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:44 +0000 UTC FinishedAt: 2026-09-06 05:22:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-workflowspxmb/series-workflowspxmb-convert-artifact-2193423013/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:54 +0000 UTC FinishedAt: 2026-09-06 05:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:22:54 +0000 UTC FinishedAt: 2026-09-06 05:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1a84405-94ea-4b14-a27c-2567aaa6f833,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-workflowspxmb/series-workflowspxmb-build-action-4066580216/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-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:24:44 +0000 UTC FinishedAt: 2026-09-06 05:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:24:44 +0000 UTC FinishedAt: 2026-09-06 05:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:24:44 +0000 UTC FinishedAt: 2026-09-06 05:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:24:44 +0000 UTC FinishedAt: 2026-09-06 05:47:20 +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:*581e7be5-065a-4a66-87c5-d72a6ea2b7e1,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-workflowspxmb/series-workflowspxmb-convert-artifact-2193423013/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": "cbf6d070-7338-4d10-8714-34cd9dc587e7", "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-workflowspxmb/series-workflowspxmb-build-action-435565297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:24:44 +0000 UTC FinishedAt: 2026-09-06 05:47:10 +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:*581e7be5-065a-4a66-87c5-d72a6ea2b7e1,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-workflowspxmb/series-workflowspxmb-convert-artifact-2193423013/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": "cbf6d070-7338-4d10-8714-34cd9dc587e7", "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-workflowspxmb/series-workflowspxmb-build-action-435565297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:47:20 +0000 UTC FinishedAt: 2026-09-06 05:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:47:20 +0000 UTC FinishedAt: 2026-09-06 05:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:47:20 +0000 UTC FinishedAt: 2026-09-06 05:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:47:20 +0000 UTC FinishedAt: 2026-09-06 05:49:02 +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:*cbf6d070-7338-4d10-8714-34cd9dc587e7,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-workflowspxmb/series-workflowspxmb-build-action-435565297/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-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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: Failed StartedAt: 2026-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"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:*a1a84405-94ea-4b14-a27c-2567aaa6f833,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cbf6d070-7338-4d10-8714-34cd9dc587e7,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-workflowspxmb/series-workflowspxmb-build-action-4066580216/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-workflowspxmb/series-workflowspxmb-build-action-435565297/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 05:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 05:49:21 +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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"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-workflowspxmb/series-workflowspxmb-convert-artifact-1084927530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 05:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 05:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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-09-06 05:49:12 +0000 UTC FinishedAt: 2026-09-06 05:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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: Failed StartedAt: 2026-09-06 05:49:32 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowspxmb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"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":["ip_tunnel_xmit","ip_md_tunnel_xmit","tnl_update_pmtu"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f4b7d1a49c5c826f3be9b684313eea5b83ac232","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IP_TUNNEL","NET_IPGRE","NET_IPIP","NET_FOU_IP_TUNNELS"],"series_id":"d09a84b9-80e1-440c-9987-e9982aee12f2","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: Error StartedAt: 2026-09-06 05:49:32 +0000 UTC FinishedAt: 2026-09-06 06:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a1a84405-94ea-4b14-a27c-2567aaa6f833,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cbf6d070-7338-4d10-8714-34cd9dc587e7,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-workflowspxmb/series-workflowspxmb-build-action-4066580216/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-workflowspxmb/series-workflowspxmb-build-action-435565297/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-workflowspxmb/series-workflowspxmb-convert-artifact-1084927530/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil