Name: series-workflowwmj7c Phase: Succeeded StartedAt: 2026-09-15 02:14:45 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[0] Phase: Succeeded StartedAt: 2026-09-15 02:14:45 +0000 UTC FinishedAt: 2026-09-15 02:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 02:14:45 +0000 UTC FinishedAt: 2026-09-15 02:20:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "b8feef7f-ae2b-4258-ac17-b8349622dc25" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rt_add_uncached_list", "rt_flush_dev", "rt6_uncached_list_add", "rt6_uncached_list_flush", "rt6_uncached_list_flush_dev", "rt6_disable_ip" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDssCiAgICAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2gmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXG5cbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb2RlIChuZXQvaXB2NC9yb3V0ZS5jIGFuZCBuZXQvaXB2Ni9yb3V0ZS5jKSBieSBjb252ZXJ0aW5nIHRoZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyBrZXllZCBieSBuZXRfZGV2aWNlIHBvaW50ZXJzIHRvIG9wdGltaXplIGRldmljZSBmbHVzaCBvcGVyYXRpb25zLiBJdCBhbHNvIGFkZHMgYSBtaXNtYXRjaCBsaXN0IGluIElQdjYgdG8gaGFuZGxlIHJvdXRlcyB3aGVyZSBydDZpX2lkZXYgZGlmZmVycyBmcm9tIGRzdC5kZXYgKGUuZy4sIFZSRiBjb25maWd1cmF0aW9ucykuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGV4ZXJjaXNlZCB3aGVuIHVuY2FjaGVkIHJvdXRlcyBhcmUgZ2VuZXJhdGVkIGFuZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgZGlzYWJsZWQgb3IgdW5yZWdpc3RlcmVkLCBtYWtpbmcgdGhlbSByZWFjaGFibGUgYW5kIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZ1xuaW5kZXggMzAxYjQ3NjYwMzA1Yi4uN2Q0MGNhMjJkMmIyMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L0tjb25maWdcbkBAIC0xMDMsNiAmIzQzOzEwMywxOSBAQCBjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXG4gXHRib29sXG4gXG4mIzQzO2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbiYjNDM7XHRpbnQgXCYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHNcJiMzNDtcbiYjNDM7XHRyYW5nZSAxIDEwXG4mIzQzO1x0ZGVmYXVsdCA2XG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZFxuJiM0MztcdCAgcm91dGUgaGFzaCB0YWJsZSB0byAyXklQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGVcbiYjNDM7XHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuJiM0MztcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcbiYjNDM7XHQgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxuJiM0MztcbiBjb25maWcgSVBfUE5QXG4gXHRib29sIFwmIzM0O0lQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICYjNDM7NzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICYjNDM7MTU1MywyMSBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuJiM0MzsjZGVmaW5lIFJUX1VOQ0FDSEVEX0hBU0hfU0laRVx0QklUKENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdW5jYWNoZWRfdGFibGUge1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4mIzQzO1xuJiM0MztcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4mIzQzO1x0XHRcdFx0ICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICYjNDM7MTU5OSwxOSBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiBcbiBcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbi1cdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldiAhPSBkZXYpXG4mIzQzO1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgJiM0MzszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKVxuIFx0aXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdGludCBidWNrZXQ7XG4mIzQzO1xuJiM0MztcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnXG5pbmRleCBjMzgwNmM2YWM5NmY5Li4wMjUzMTc4NjY4YmRmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvS2NvbmZpZ1xuQEAgLTE4LDYgJiM0MzsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4mIzQzO2NvbmZpZyBJUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xuJiM0MztcdGludCBcJiMzNDtJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wmIzM0O1xuJiM0MztcdHJhbmdlIDEgMTBcbiYjNDM7XHRkZWZhdWx0IDZcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY2IHVuY2FjaGVkXG4mIzQzO1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4mIzQzO1x0ICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXNcbiYjNDM7XHQgIHJlZHVjZSBjb2xsaXNpb25zLCBidXQgZWFjaCBhZGRpdGlvbmFsIGJpdCBkb3VibGVzIHRoZSBwZXItQ1BVXG4mIzQzO1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS5cbiYjNDM7XG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDc1MzViMDkwNjhhMDYuLjA4MGRjZTMyOTE2ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtNDAsNiAmIzQzOzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICYjNDM7MTM0LDI3IEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnQ2X3VuY2FjaGVkX2xpc3QpO1xuJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuJiM0MztcdC8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqL1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbiYjNDM7XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4mIzQzO1xuJiM0MztcdGlmIChydC1cdTAwM2VydDZpX2lkZXYgXHUwMDI2XHUwMDI2IHJ0LVx1MDAzZXJ0NmlfaWRldi1cdTAwM2VkZXYgIT0gcnRfZGV2KVxuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1Nyw0MCAmIzQzOzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuJiM0MztcdFx0XHRydC1cdTAwM2VydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTtcbiYjNDM7XHRcdFx0aW42X2Rldl9wdXQocnRfaWRldik7XG4mIzQzO1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4mIzQzO1x0XHRcdHJ0LVx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xuJiM0MztcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdFx0aGFuZGxlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaGFuZGxlZClcbiYjNDM7XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbi1cdFx0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XG4mIzQzO1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiBcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuLVx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuLVx0XHRcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuLVxuLVx0XHRcdGlmIChydF9pZGV2IFx1MDAyNlx1MDAyNiBydF9pZGV2LVx1MDAzZWRldiA9PSBkZXYpIHtcbi1cdFx0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuLVx0XHRcdFx0aW42X2Rldl9wdXQocnRfaWRldik7XG4tXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcbi1cdFx0XHRcdHJ0LVx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xuLVx0XHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbi1cdFx0XHRcdFx0XHQgICBcdTAwMjZydC1cdTAwM2Vkc3QuZGV2X3RyYWNrZXIsXG4tXHRcdFx0XHRcdFx0ICAgR0ZQX0FUT01JQyk7XG4tXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKGhhbmRsZWQpXG4tXHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiYjNDM7XHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xuJiM0MztcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgJiM0Mzs3MDE1LDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4mIzQzO1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdGludCBidWNrZXQ7XG4mIzQzO1xuJiM0MztcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4mIzQzO1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5sb2NrKTtcbiBcdH1cbiBcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5pbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHNlbmRlcl9waWRcbiYjNDM7XHRsb2NhbCBiYWNrbG9nXG4mIzQzO1x0bG9jYWwgcmNcbiYjNDM7XG4mIzQzO1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4mIzQzO1x0IyB0aGUgVlJGIG1lbWJlciBpbnRlcmZhY2UgaW4gcnQ2aV9pZGV2LiBSYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZFxuJiM0MztcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbiYjNDM7XHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4mIzQzO1x0aXAgLTYgLW5ldG5zIFwmIzM0OyRob3N0MVwmIzM0OyByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRob3N0MVwmIzM0OyAuL21zZ196ZXJvY29weSAtNiBcXFxuJiM0MztcdFx0LVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcXFxuJiM0MztcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztcdHNlbmRlcl9waWQ9JCFcbiYjNDM7XHR3YWl0IFwmIzM0OyRzZW5kZXJfcGlkXCYjMzQ7XG4mIzQzO1x0cmM9JD9cbiYjNDM7XHRsb2dfdGVzdCAkcmMgMCBcJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcJiMzNDtcbiYjNDM7XHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbiYjNDM7XG4mIzQzO1x0YmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JGhvc3QxXCYjMzQ7IHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbiYjNDM7XHRpZiAhIGVjaG8gXCYjMzQ7JGJhY2tsb2dcJiMzNDsgfCBncmVwIC1FcSAmIzM5O2JhY2tsb2cgLiogWzEtOV1bMC05XSpwJiMzOTs7IHRoZW5cbiYjNDM7XHRcdGxvZ190ZXN0IDEgMCBcJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdGxvZ190ZXN0IDAgMCBcJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbiYjNDM7XHRsb2dfdGVzdCAkPyAwIFwmIzM0O0ZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgJiM0Mzs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCYjMzQ7bmV0ZW0gcWRpc2Mgb24gVlJGIGRldmljZVwmIzM0O1xuIHJ1bl90ZXN0c1xuIFxuJiM0MztlY2hvXG4mIzQzO2VjaG8gXCYjMzQ7VW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wmIzM0O1xuJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2hcbiYjNDM7XG4gcHJpbnRmIFwmIzM0O1xcblRlc3RzIHBhc3NlZDogJTNkXFxuXCYjMzQ7ICR7bnN1Y2Nlc3N9XG4gcHJpbnRmIFwmIzM0O1Rlc3RzIGZhaWxlZDogJTNkXFxuXCYjMzQ7ICAgJHtuZmFpbH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjODIyMzQwMjZkY2ExZGNlYjZkZmU3ZjkwMDEwZDY5ZjI3YTA1MjJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDI6MTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTEwMyw2ICYjNDM7MTAzLDE5IEBAIGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFCiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRAogCWJvb2wKIAomIzQzO2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMKJiM0MzsJaW50ICYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwomIzQzOwlyYW5nZSAxIDEwCiYjNDM7CWRlZmF1bHQgNgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZAomIzQzOwkgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlCiYjNDM7CSAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzCiYjNDM7CSAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFUKJiM0MzsJICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS4KJiM0MzsKIGNvbmZpZyBJUF9QTlAKIAlib29sICYjMzQ7SVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvbiYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC03NCw2ICYjNDM7NzQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZ21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXJvdXRlLmgmZ3Q7CkBAIC0xNTUyLDExICYjNDM7MTU1MywyMSBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZAloZWFkOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpOwomIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKQomIzQzOwomIzQzO3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpOwogCiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KQogewotCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlKTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZHN0X2RldigmYW1wO3J0LSZndDtkc3QpLAomIzQzOwkJCQkgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU4OCwxNCAmIzQzOzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LAomIzQzOwkJCQkJICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldOwogCiAJCWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewotCQkJaWYgKHJ0LSZndDtkc3QuZGV2ICE9IGRldikKJiM0MzsJCQlpZiAoZHN0X2RldigmYW1wO3J0LSZndDtkc3QpICE9IGRldikKIAkJCQljb250aW51ZTsKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihydC0mZ3Q7ZHN0LmRldl9yY3UsIGJsYWNraG9sZV9uZXRkZXYpOwogCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldiwKQEAgLTM3NzEsMTAgJiM0MzszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKQogCWlwX3RzdGFtcHMgPSBpZGVudHNfaGFzaCAmIzQzOyAoaXBfaWRlbnRzX21hc2sgJiM0MzsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCWludCBidWNrZXQ7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbYnVja2V0XTsKIAotCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl9CiAJfQogI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECiAJaXBfcnRfYWNjdCA9IF9fYWxsb2NfcGVyY3B1KDI1NiAqIHNpemVvZihzdHJ1Y3QgaXBfcnRfYWNjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBpcF9ydF9hY2N0KSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZwppbmRleCBjMzgwNmM2YWM5NmY5Li4wMjUzMTc4NjY4YmRmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L0tjb25maWcKQEAgLTE4LDYgJiM0MzsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjYKIAogaWYgSVBWNgogCiYjNDM7Y29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTCiYjNDM7CWludCAmIzM0O0lQdjYgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzJiMzNDsKJiM0MzsJcmFuZ2UgMSAxMAomIzQzOwlkZWZhdWx0IDYKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjYgdW5jYWNoZWQKJiM0MzsJICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlCiYjNDM7CSAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzCiYjNDM7CSAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFUKJiM0MzsJICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS4KJiM0MzsKIGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGCiAJYm9vbCAmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNzUzNWIwOTA2OGEwNi4uMDgwZGNlMzI5MTY4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbnNwcm94eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2poYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lwaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CkBAIC0xMzMsMTEgJiM0MzsxMzQsMjcgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7CS8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqLwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CWlmIChydC0mZ3Q7cnQ2aV9pZGV2ICZhbXA7JmFtcDsgcnQtJmd0O3J0NmlfaWRldi0mZ3Q7ZGV2ICE9IHJ0X2RldikKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2g7CiYjNDM7CWVsc2UKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihydF9kZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKIAogCXJ0LSZndDtkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsOwogCkBAIC0xNTcsNDAgJiM0MzsxNzQsNTEgQEAgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7CiYjNDM7CQlzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtJmd0O3J0NmlfaWRldjsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CQlib29sIGhhbmRsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewomIzQzOwkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKJiM0MzsJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKJiM0MzsJCQloYW5kbGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChydF9kZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O2RzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2OwomIzQzOwkJCW5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsCiYjNDM7CQkJCQkgICAmYW1wO3J0LSZndDtkc3QuZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJaWYgKGhhbmRsZWQpCiYjNDM7CQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7Ci0JCXN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlOwomIzQzOwkJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtJmd0O3J0NmlfaWRldjsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBydC0mZ3Q7ZHN0LmRldjsKLQkJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwotCi0JCQlpZiAocnRfaWRldiAmYW1wOyZhbXA7IHJ0X2lkZXYtJmd0O2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7Ci0JCQkJaW42X2Rldl9wdXQocnRfaWRldik7Ci0JCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQl9Ci0KLQkJCWlmIChydF9kZXYgPT0gZGV2KSB7Ci0JCQkJcnQtJmd0O2RzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2OwotCQkJCW5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsCi0JCQkJCQkgICAmYW1wO3J0LSZndDtkc3QuZGV2X3RyYWNrZXIsCi0JCQkJCQkgICBHRlBfQVRPTUlDKTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQkJCWlmIChoYW5kbGVkKQotCQkJCWxpc3RfZGVsX2luaXQoJmFtcDtydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkKTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LAomIzQzOwkJCQkJICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiYjNDM7CQlydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKCZhbXA7dGFibGUtJmd0O21pc21hdGNoLCBkZXYpOwogCX0KIH0KIApAQCAtNjk4NywxMCAmIzQzOzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKQogI2VuZGlmCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCWludCBidWNrZXQ7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgJmx0OyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KJiM0MzsJCUlOSVRfTElTVF9IRUFEKCZhbXA7dGFibGUtJmd0O21pc21hdGNoLmhlYWQpOwomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gubG9jayk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaApAQCAtMzg1LDYgJiM0MzszODUsMzcgQEAgcnVuX3Rlc3RzKCkKIAljbGVhbnVwX3hmcm1fZGV2CiB9CiAKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VuZGVyX3BpZAomIzQzOwlsb2NhbCBiYWNrbG9nCiYjNDM7CWxvY2FsIHJjCiYjNDM7CiYjNDM7CSMgQSBsb2NhbCByb3V0ZSB0aHJvdWdoIGEgVlJGIHVzZXMgdGhlIFZSRiBhcyBkc3QuZGV2IHdoaWxlIHJldGFpbmluZwomIzQzOwkjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkCiYjNDM7CSMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC4KJiM0MzsJcnVuX2NtZF9ob3N0MSB0YyBxZGlzYyByZXBsYWNlIGRldiAke1ZSRn0gcm9vdCBuZXRlbSBsaW1pdCAxIGRlbGF5IDEwcwomIzQzOwlpcCAtNiAtbmV0bnMgJiMzNDskaG9zdDEmIzM0OyByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRob3N0MSYjMzQ7IC4vbXNnX3plcm9jb3B5IC02IFwKJiM0MzsJCS1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXAomIzQzOwkJJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzOwlzZW5kZXJfcGlkPSQhCiYjNDM7CXdhaXQgJiMzNDskc2VuZGVyX3BpZCYjMzQ7CiYjNDM7CXJjPSQ/CiYjNDM7CWxvZ190ZXN0ICRyYyAwICYjMzQ7Q3JlYXRlIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0MzsJWyAkcmMgLW5lIDAgXSAmYW1wOyZhbXA7IHJldHVybgomIzQzOwomIzQzOwliYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRob3N0MSYjMzQ7IHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSkKJiM0MzsJaWYgISBlY2hvICYjMzQ7JGJhY2tsb2cmIzM0OyB8IGdyZXAgLUVxICYjMzk7YmFja2xvZyAuKiBbMS05XVswLTldKnAmIzM5OzsgdGhlbgomIzQzOwkJbG9nX3Rlc3QgMSAwICYjMzQ7UmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzYyYjMzQ7CiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJbG9nX3Rlc3QgMCAwICYjMzQ7UmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzYyYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDAKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt9CiYjNDM7CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB1c2FnZQogCkBAIC00MjUsNiAmIzQzOzQ1NiwxMCBAQCBlY2hvCiBlY2hvICYjMzQ7bmV0ZW0gcWRpc2Mgb24gVlJGIGRldmljZSYjMzQ7CiBydW5fdGVzdHMKIAomIzQzO2VjaG8KJiM0MztlY2hvICYjMzQ7VW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoCiYjNDM7CiBwcmludGYgJiMzNDtcblRlc3RzIHBhc3NlZDogJTNkXG4mIzM0OyAke25zdWNjZXNzfQogcHJpbnRmICYjMzQ7VGVzdHMgZmFpbGVkOiAlM2RcbiYjMzQ7ICAgJHtuZmFpbH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneTogVW5jYWNoZWQgUm91dGUgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwsIHNvIEkgbmVlZCB0byBhbmFseXplIGl0cyBpbXBhY3Qgb24gdGhlIGtlcm5lbC4gSSBzZWUgdGhhdCBpdCBmb2N1c2VzIG9uIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGUgaGFuZGxpbmcsIGEgY29yZSBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHVuY2FjaGVkIHJvdXRlcyBmcm9tIHBlci1DUFUgbGlua2VkIGxpc3RzIHRvIHBlci1DUFUgaGFzaCB0YWJsZXMuIFNwZWNpZmljYWxseToKCiogICAqKklQdjQ6KiogTW9kaWZpZXMgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjQvcm91dGUuY2AuIFRoZSBgcnRfdW5jYWNoZWRfbGlzdGAgaXMgcmVwbGFjZWQgYnkgYHJ0X3VuY2FjaGVkX3RhYmxlYCwgYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoZSBoYXNoIGZ1bmN0aW9uIHVzZXMgYGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KWAgYW5kIGEgY29uZmlndXJhYmxlIG51bWJlciBvZiBoYXNoIGJpdHMgKGBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCkuIENoYW5nZXMgYXJlIG1hZGUgdG8gYHJ0X2FkZF91bmNhY2hlZF9saXN0YCAod2hpY2ggYWRkcyByb3V0ZXMpLCBgcnRfZmx1c2hfZGV2YCAod2hpY2ggcmVtb3ZlcyByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlKSwgYW5kIGBpcF9ydF9pbml0YCAoaW5pdGlhbGl6YXRpb24pLgoqICAgKipJUHY2OioqIE1vZGlmaWVzIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGUgcGF0dGVybiBtaXJyb3JzIElQdjQsIHdpdGggYHJ0Nl91bmNhY2hlZF9saXN0YCBiZWNvbWluZyBgcnQ2X3VuY2FjaGVkX3RhYmxlYC4gVGhlIGhhc2ggdGFibGUgdXNlcyBgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRWAgYW5kIGBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgLiBMb2dpYyBpcyBhZGRlZCBmb3IgYSAmIzM0O21pc21hdGNoJiMzNDsgbGlzdCB0aGF0IGlzIHVzZWQgd2hlbiBgcnQtJmd0O3J0NmlfaWRldiAmYW1wOyZhbXA7IHJ0LSZndDtydDZpX2lkZXYtJmd0O2RldiAhPSBydF9kZXZgLiBLZXkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgaXA2X3JvdXRlX2luaXRgLgoqICAgKipUZXN0aW5nOioqIFRoZXJlJiMzOTtzIGEgcmVsYXRlZCBtb2RpZmljYXRpb24gdG8gdGhlIGB2cmYteGZybS10ZXN0cy5zaGAgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHNvbWVvbmUmIzM5O3MgYWxyZWFkeSBjb25zaWRlcmluZyBob3cgdG8gdGVzdCB0aGlzIGNoYW5nZS4KCk5vdywgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNoYW5nZXMgbGlrZSB0aGlzLCBwYXJ0aWN1bGFybHkgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBmdW5jdGlvbnMgKGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmApIHdpdGhpbiBhIGNyaXRpY2FsIHBhdGguIFRoaXMgY29kZSBydW5zIHdoZW4gcm91dGVzIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQsIGFuZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgdGFrZW4gZG93biBvciBmbHVzaGVkLiBVbmNhY2hlZCByb3V0ZXMgYXJlIHVzZWQgd2hlbiBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGUuZy4sIHdpdGggcmF3IHNvY2tldHMsIFBNVFUsIHJlZGlyZWN0cywgVlJGLCBldGMuIFRoZSBmbHVzaGluZyBhc3BlY3QsIHRyaWdnZXJlZCBieSBkZXZpY2UgcmVtb3ZhbCwgaXMgYSBwYXJ0aWN1bGFybHkgYXBwZWFsaW5nIHRhcmdldCwgc2luY2UgbmV0d29yayBkZXZpY2VzIGNvbWUgYW5kIGdvIGNvbnN0YW50bHksIGVzcGVjaWFsbHkgaW4gZW52aXJvbm1lbnRzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgY29kZSByZWZhY3RvcmluZywgcGFydGljdWxhcmx5IG9mIGRhdGEgc3RydWN0dXJlcywgaXMgbWVudGlvbmVkIGFzIGFuIGlkZWFsIGNhbmRpZGF0ZS4KClRvIGJlIHRob3JvdWdoLCBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb2RlJiMzOTtzIHJlYWNoIGFuZCBkZXRlcm1pbmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgcG90ZW50aWFsIGZ1enppbmcgaGFybmVzc2VzLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBhbmQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvb2QgY2FuZGlkYXRlcyB0byByZXZlYWwgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1MzktXHRcdGlmIChvcmlnKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1NDA6XHRcdFx0cnRfYWRkX3VuY2FjaGVkX2xpc3Qob3JpZyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2b3JpZy1cdTAwM2Vkc3QpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU2Mj1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2My1cbm5ldC9pcHY0L3JvdXRlLmM6MTU2NDp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxubmV0L2lwdjQvcm91dGUuYy0xNTY1LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzctXHRcdFx0fVxubmV0L2lwdjQvcm91dGUuYzoxNjc4Olx0XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY3OS1cdFx0fVxubmV0L2lwdjQvcm91dGUuYy0xNjgwLVx0fSBlbHNlXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIzMDg9aXBfcm91dGVfaW5wdXRfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDItXHRcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjUwMzpcdFx0XHRydF9hZGRfdW5jYWNoZWRfbGlzdChydGgpO1xubmV0L2lwdjQvcm91dGUuYy0yNTA0LVx0fVxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTY2PXN0YXRpYyBpbnQgeGZybTRfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTkwLVx0eGRzdC1cdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cdTAwM2VydF9tdHVfbG9ja2VkO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmM6OTE6XHRydF9hZGRfdW5jYWNoZWRfbGlzdChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQpO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgcnRfZmx1c2hfZGV2YCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGBydF9mbHVzaF9kZXZgIGZ1bmN0aW9uLiBXZSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHNvbWUgcmVsYXRlZCBpc3N1ZXMsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIG1hcCBvdXQgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hvJiMzOTtzIGNhbGxpbmcgaXQgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgd2UgbmVlZCB0byBzZWUgaXRzIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBleHBlY3RlZCBjYWxscywgb3IgYXJlIHRoZXJlIHNvbWUgdW5leHBlY3RlZCBsb2NhdGlvbnMgd2hlcmUgd2UgYXJlIGZsdXNoaW5nPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxzPyBBcmUgdGhlcmUgYW55IGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBpdCB0aGF0IHNob3VsZG4mIzM5O3QgYmU/IERvaW5nIHRoaXMgd2lsbCBoZWxwIHVzIGlzb2xhdGUgdGhlIHNvdXJjZSBvZiBhbnkgaXNzdWVzIHdlIGZpbmQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE1MDY9c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTctXHRcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUxODpcdFx0cnRfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE5LVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTkwPXN0YXRpYyB2b2lkIGlwdjRfZHN0X2Rlc3Ryb3koc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU5NS1cbm5ldC9pcHY0L3JvdXRlLmM6MTU5Njp2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvcm91dGUuYy0xNTk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyBsaWtlIGEgc2Vhc29uZWQgbmV0d29yayBlbmdpbmVlcjoKCioqSVB2NiBSb3V0ZSBDYWNoZSBUaGlua2luZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gSVB2NiByb3V0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSAmIzM0O3VuY2FjaGVkJiMzNDsgcm91dGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgcmlnaHQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJvdXRlcyB0aGF0IGFyZW4mIzM5O3Qgc2l0dGluZyBpbiB0aGUgZmFzdCBwYXRoLCBwcm9iYWJseSBkdWUgdG8gc29tZSBjb25kaXRpb24gb3IgYmVjYXVzZSB0aGV5JiMzOTtyZSBsZXNzIGZyZXF1ZW50bHkgdXNlZC4mIzM0OyBJIHNlZSBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSAmIzM0O2FkZCYjMzQ7IGZ1bmN0aW9uIHByb2JhYmx5IGFwcGVuZHMgYSBuZXcgcm91dGUgdG8gYSBsaXN0IG9mIHRoZXNlIHVuY2FjaGVkIGVudHJpZXMuIFdlIGFyZSBsaWtlbHkgYWRkaW5nIHRoZSByb3V0ZSB0byBhIGxpc3QgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywgb3IgZm9yIGl0IHRvIGJlIGNvbnN1bHRlZCB3aGVuIHdlIGhhdmUgYSBwYWNrZXQgdG8gZm9yd2FyZC4gVGhlICYjMzQ7Zmx1c2hfZGV2JiMzNDsgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlISBUaGF0IGluZGljYXRlcyB3ZSBhcmUgbGlrZWx5IGZsdXNoaW5nLCBvciByZW1vdmluZywgdGhlc2UgdW5jYWNoZWQgcm91dGVzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlLCBwcm9iYWJseSBvbiBhbiBpbnRlcmZhY2UuIFdlIG1pZ2h0IGJlIGNsZWFuaW5nIHVwIHRoZXNlIHVuY2FjaGVkIGVudHJpZXMgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBpcyByZWNvbmZpZ3VyZWQsIG9yIG1heWJlIGV2ZW4gd2hlbiBhIG5ldywgbW9yZSBvcHRpbWFsIHJvdXRlIGlzIGxlYXJuZWQsIGFuZCB0aGUgb2xkIGNhY2hlZCBlbnRyeSBpcyBubyBsb25nZXIgYXBwbGljYWJsZS4gVGhlIGVmZmljaWVuY3kgb2YgdGhlIGNhY2hlIGFuZCBob3cgdGhlc2UgJiMzNDt1bmNhY2hlZCYjMzQ7IHJvdXRlcyBhcmUgbWFuYWdlZCBhcmUgY3JpdGljYWwuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSBmb3IgYSByb3V0ZSB0byBiZWNvbWUgJiMzNDt1bmNhY2hlZCYjMzQ7IGFuZCBhbHNvIGhvdyBvZnRlbiB0aGlzIGxpc3QgaXMgcHVyZ2VkLiBJcyB0aGVyZSBhIHRpbWVyLCBzb21lIGtpbmQgb2YgdXNhZ2UgdGhyZXNob2xkLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGtub3cgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9MTQ1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ni1cbm5ldC9pcHY2L3JvdXRlLmM6MTQ3OnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OC17XG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNjUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjE2Njp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxubmV0L2lwdjYvcm91dGUuYy0xNjcte1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMTc2LVxubmV0L2lwdjYvcm91dGUuYzoxNzc6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxubmV0L2lwdjYvcm91dGUuYy0xNzgtXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIwOC1cbm5ldC9pcHY2L3JvdXRlLmM6MjA5OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvcm91dGUuYy0yMTAte1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjE5LVx0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbm5ldC9pcHY2L3JvdXRlLmM6MjIwOlx0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmM6MjIxOlx0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaCwgZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjIyLVx0fVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzgyPXN0YXRpYyB2b2lkIGlwNl9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zODgtXHRpcF9kc3RfbWV0cmljc19wdXQoZHN0KTtcbm5ldC9pcHY2L3JvdXRlLmM6Mzg5Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMzkwLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjMwMT1zdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMzQyLVx0XHRcdC8qIDEgcmVmY250IGlzIHRha2VuIGR1cmluZyBpcDZfcnRfY2FjaGVfYWxsb2MoKS5cbm5ldC9pcHY2L3JvdXRlLmM6MjM0MzpcdFx0XHQgKiBBcyBydDZfdW5jYWNoZWRfbGlzdF9hZGQoKSBkb2VzIG5vdCBjb25zdW1lIHJlZmNudCxcbm5ldC9pcHY2L3JvdXRlLmMtMjM0NC1cdFx0XHQgKiB0aGlzIHJlZmNudCBpcyBhbHdheXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBldmVuXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMzQ2LVx0XHRcdCAqL1xubmV0L2lwdjYvcm91dGUuYzoyMzQ3Olx0XHRcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChydCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMzYzPXN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzM5MS1cdCAqL1xubmV0L2lwdjYvcm91dGUuYzozMzkyOlx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMzM5My1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNzQ9dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cdHJ0Nl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQpO1xubmV0L2lwdjYvcm91dGUuYzo1MDc5Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODAtXHRuZWlnaF9pZmRvd24obmRfdGFibGUobmV0KSwgZGV2KTtcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYz04MD1zdGF0aWMgaW50IHhmcm02X2ZpbGxfZHN0KHN0cnVjdCB4ZnJtX2RzdCAqeGRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDItXHR4ZHN0LVx1MDAzZXUucnQ2LnJ0Nmlfc3JjID0gcnQtXHUwMDNlcnQ2aV9zcmM7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoxMDM6XHRydDZfdW5jYWNoZWRfbGlzdF9hZGQoXHUwMDI2eGRzdC1cdTAwM2V1LnJ0Nik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDQtXG4tLVxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9MTI3PXN0YXRpYyB2b2lkIHhmcm02X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMzEtXHRkc3RfZGVzdHJveV9tZXRyaWNzX2dlbmVyaWMoZHN0KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jOjEzMjpcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQ2KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEzMy1cdGlmIChsaWtlbHkoeGRzdC1cdTAwM2V1LnJ0Ni5ydDZpX2lkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgSVB2NC9JUHY2IFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCB0aGlzIGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpdHVhdGlvbiByaXBlIGZvciBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgY3JpdGVyaWEgYW5kIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBJIGRpdmUgaW4uIEZvY3VzU3ltYm9scyB3aWxsIGFsc28gcGxheSBhbiBpbXBvcnRhbnQgcm9sZSwgc28gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aG9zZSBlYXJseSBvbi4KCkZpcnN0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYEtjb25maWdgIGZpbGVzLCBmb2N1c2luZyBvbiBJUHY0IGFuZCBJUHY2IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIEkgc2VlIHRoaXM6CgpgYGAKY29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUwoJaW50ICYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwoJcmFuZ2UgMSAxMAoJZGVmYXVsdCA2CmBgYAoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGlzIHZhcmlhYmxlIGlzIHVuZGVyIGEgbWVudSwgd2hpY2ggbWlnaHQgcmVzdHJpY3QgaXRzIHZpc2liaWxpdHkgb3IgaW5mbHVlbmNlLiBJJiMzOTtsbCBzY2FuIGFyb3VuZCBsaW5lIDEwMyBpbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGhlbHBcbiAgOTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxuICA5NzpcdFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcbiAgOTg6XHRcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXG4gIDk5Olx0XHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXG4gMTAwOlx0XHQgIGhhbmRsZWQgYnkgdGhlIGtsb2dkIGRhZW1vbiB3aGljaCBpcyByZXNwb25zaWJsZSBmb3Iga2VybmVsIG1lc3NhZ2VzXG4gMTAxOlx0XHQgIChcJiMzNDttYW4ga2xvZ2RcJiMzNDspLlxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXG4gMTA0Olx0XHRib29sXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xuIDEwNzpcdFx0aW50IFwmIzM0O0lQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCYjMzQ7XG4gMTA4Olx0XHRyYW5nZSAxIDEwXG4gMTA5Olx0XHRkZWZhdWx0IDZcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZFxuIDExMjpcdFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZVxuIDExMzpcdFx0ICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXNcbiAxMTQ6XHRcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcbiAxMTU6XHRcdCAgbWVtb3J5IHVzZWQgYnkgdGhlIHRhYmxlLlxuIDExNjpcdFxuIDExNzpcdFx0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxuIDExODpcdFxuIDExOTpcdGNvbmZpZyBJUF9QTlBcbiAxMjA6XHRcdGJvb2wgXCYjMzQ7SVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvblwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBUaGlzIGVuYWJsZXMgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gb2YgSVAgYWRkcmVzc2VzIG9mIGRldmljZXMgYW5kXG4gMTIzOlx0XHQgIG9mIHRoZSByb3V0aW5nIHRhYmxlIGR1cmluZyBrZXJuZWwgYm9vdCwgYmFzZWQgb24gZWl0aGVyIGluZm9ybWF0aW9uXG4gMTI0Olx0XHQgIHN1cHBsaWVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIG9yIGJ5IEJPT1RQIG9yIFJBUlAgcHJvdG9jb2xzLlxuIDEyNTpcdFx0ICBZb3UgbmVlZCB0byBzYXkgWSBvbmx5IGZvciBkaXNrbGVzcyBtYWNoaW5lcyByZXF1aXJpbmcgbmV0d29ya1xuIDEyNjpcdFx0ICBhY2Nlc3MgdG8gYm9vdCAoaW4gd2hpY2ggY2FzZSB5b3Ugd2FudCB0byBzYXkgWSB0byBcJiMzNDtSb290IGZpbGUgc3lzdGVtXG4gMTI3Olx0XHQgIG9uIE5GU1wmIzM0OyBhcyB3ZWxsKSwgYmVjYXVzZSBhbGwgb3RoZXIgbWFjaGluZXMgY29uZmlndXJlIHRoZSBuZXR3b3JrXG4gMTI4Olx0XHQgIGluIHRoZWlyIHN0YXJ0dXAgc2NyaXB0cy5cbiAxMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBJUHY0IGFuZCBJUHY2IFJvdXRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYG5ldC9pcHY0L0tjb25maWdgIGlzIG5lc3RlZCB1bmRlciB0aGUgYCYjMzQ7SVA6IFRDUC9JUCBuZXR3b3JraW5nJiMzNDtgIG1lbnUsIGFuZCB0aGF0ICptZW51KiBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCBJUHY0IHJvdXRlIG1hbmFnZW1lbnQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGZvciBpdCwgcmVxdWlyZXMgdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuCgpUaGVuIEkgbW92ZSBvbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gSSBzZWUgYSBzaW1pbGFyIHBhdHRlcm4gd2l0aCBgSVBWNmAuICBgSVBWNmAgZW5hYmxlcyBJUHY2IHN1cHBvcnQuIEkgYWxzbyBzZWUgYSBjb25maWcgdmFyaWFibGUsIGBJUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU2AsIGFuZCBpdHMgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBUaGF0IGNvbmZpcm1zIHRoYXQgSVB2NiByb3V0aW5nIGFsc28gcmVsaWVzIG9uIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgpTbywgdG8gYmUgZXhwbGljaXQsIGBDT05GSUdfSU5FVGAgKmlzKiBuZWVkZWQgZm9yIElQdjQgcm91dGUgZnVuY3Rpb25hbGl0eSwgYW5kIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIElQdjYgcm91dGUgZnVuY3Rpb25hbGl0eS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIEFyZSBgSU5FVGAgYW5kIGBJUFY2YCB0cnVseSB0aGUgc3RhbmRhcmQsIGZ1bmRhbWVudGFsIGNvbmZpZ3MgZm9yIElQdjQgYW5kIElQdjYgcmVzcGVjdGl2ZWx5PyBJbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIHR5cGljYWxseSB0aGUgY2FzZSBpbiBhIExpbnV4IGtlcm5lbC4gQnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyB3b3J0aHdoaWxlLgoKVG8gbmFpbCB0aGlzIGRvd24sIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgIGZpbGVzLiBUaGVzZSBNYWtlZmlsZXMgb2Z0ZW4gY29udGFpbiBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3Nlcywgd2hpY2ggc2hvdWxkIGZ1cnRoZXIgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlnIG9wdGlvbnMgYW5kIHRoZSByb3V0aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvdXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC82bG93cGFuL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX0ZSQUcpICYjNDM7PSBuaGNfZ2hjX2V4dF9mcmFnLm9cbm5ldC82bG93cGFuL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX1JPVVRFKSAmIzQzOz0gbmhjX2doY19leHRfcm91dGUub1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MzMxPWJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2OC0gKiBJZiBJUCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZmFpbCwgd2hpbGVcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzY5OiAqIGlwX3JvdXRlX291dHB1dF9rZXkoKSBjYW4gcmV0dXJuIHN1Y2Nlc3MuIFRoZSBzb3VyY2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzcwOiAqIGFkZHJlc3MgZm9yIGlwX3JvdXRlX291dHB1dF9rZXkoKSBpcyBzZXQgdG8gemVybywgc28gaXBfcm91dGVfb3V0cHV0X2tleSgpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3MS0gKiB0aGlua3Mgd2UmIzM5O3JlIGhhbmRsaW5nIGEgbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0IGFuZCB3b24mIzM5O3QgY2FyZVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzczLSAqIGRldmljZSwgd2UgcHJvY2VlZCBhcyBpZiBpcF9yb3V0ZV9pbnB1dCgpIHN1Y2NlZWRlZC4gSWYgaXQgZGlmZmVycyBmcm9tIHRoZVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozNzQ6ICogbG9naWNhbCBicmlkZ2UgcG9ydCBvciBpZiBpcF9yb3V0ZV9vdXRwdXRfa2V5KCkgZmFpbHMgd2UgZHJvcCB0aGUgcGFja2V0LlxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNzUtICovXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kpICYjNDM7PSBlYnRhYmxlcy5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQtIyB0YWJsZXNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgJiM0Mzs9IGVidGFibGVfYnJvdXRlLm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSAmIzQzOz0gZWJ0YWJsZV9maWx0ZXIub1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIzODA9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzOTgtXG5uZXQvY29yZS9maWx0ZXIuYzoyMzk5Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXHUwMDI2Zmw0LCBOVUxMKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MDAtXHRcdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0yMjEtXG5uZXQvY29yZS9sd3RfYnBmLmM6MjIyOlx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xubmV0L2NvcmUvbHd0X2JwZi5jLTIyMy1cdFx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS01LVxubmV0L2lwdjQvTWFrZWZpbGU6NjpvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEzMTQ9aW50IGluZXRfc2tfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xMzI3LVx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBmbDQpO1xubmV0L2lwdjQvYWZfaW5ldC5jOjEzMjg6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTMyOS1cdGlmICghSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY0L2FycC5jPTQ1NT1zdGF0aWMgaW50IGFycF9maWx0ZXIoX19iZTMyIHNpcCwgX19iZTMyIHRpcCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9hcnAuYy00NjEtXG5uZXQvaXB2NC9hcnAuYzo0NjI6XHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIHNpcCwgdGlwLCAwLCBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldiksXG5uZXQvaXB2NC9hcnAuYy00NjMtXHRcdFx0ICAgICBSVF9TQ09QRV9VTklWRVJTRSk7XG4tLVxubmV0L2lwdjQvYXJwLmM9MTAzOD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmFycF9yZXFfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqcilcbi0tXG5uZXQvaXB2NC9hcnAuYy0xMDUxLVxubmV0L2lwdjQvYXJwLmM6MTA1MjpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KG5ldCwgaXAsIDAsIDAsIDAsIFJUX1NDT1BFX0xJTkspO1xubmV0L2lwdjQvYXJwLmMtMTA1My1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2RhdGFncmFtLmM9MTAyPXZvaWQgaXA0X2RhdGFncmFtX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2RhdGFncmFtLmMtMTE3LVx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvZGF0YWdyYW0uYzoxMTg6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgXHUwMDI2Zmw0LCBzayk7XG5uZXQvaXB2NC9kYXRhZ3JhbS5jLTExOS1cdGRzdCA9ICFJU19FUlIocnQpID8gXHUwMDI2cnQtXHUwMDNlZHN0IDogTlVMTDtcbi0tXG5uZXQvaXB2NC9pY21wLmM9NDE2PXN0YXRpYyB2b2lkIGljbXBfcmVwbHkoc3RydWN0IGljbXBfYnhtICppY21wX3BhcmFtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy00NjQtXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXHUwMDI2Zmw0KSk7XG5uZXQvaXB2NC9pY21wLmM6NDY1Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L2ljbXAuYy00NjYtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pY21wLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9pY21wLmMtNTE5LVx0c2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiX2luLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xubmV0L2lwdjQvaWNtcC5jOjUyMDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoKG5ldCwgZmw0LCBza2JfaW4pO1xubmV0L2lwdjQvaWNtcC5jLTUyMS1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy01NDYtXHRcdFx0XHQgICAgIGZsNF9kZWMuc2FkZHIpID09IFJUTl9MT0NBTCkge1xubmV0L2lwdjQvaWNtcC5jOjU0NzpcdFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0X2RlYyk7XG5uZXQvaXB2NC9pY21wLmMtNTQ4LVx0XHRpZiAoSVNfRVJSKHJ0MikpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTU2Ni1cbm5ldC9pcHY0L2ljbXAuYzo1Njc6XHRcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNF8yKTtcbm5ldC9pcHY0L2ljbXAuYy01NjgtXHRcdGlmIChJU19FUlIocnQyKSkge1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy00MjAtXG5uZXQvaXB2NC9pZ21wLmM6NDIxOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcdTAwMjZmbDQsIE5VTEwsIElHTVBWM19BTExfTUNSLCAwLFxubmV0L2lwdjQvaWdtcC5jLTQyMi1cdFx0XHRcdCAgIDAsIDAsXG4tLVxubmV0L2lwdjQvaWdtcC5jPTc4Mj1zdGF0aWMgaW50IGlnbXBfc2VuZF9yZXBvcnQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy04MDctXG5uZXQvaXB2NC9pZ21wLmM6ODA4Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcdTAwMjZmbDQsIE5VTEwsIGRzdCwgMCxcbm5ldC9pcHY0L2lnbXAuYy04MDktXHRcdFx0XHQgICAwLCAwLFxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTg2PXN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDAxLVx0aWYgKCFkZXYpIHtcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dChuZXQsXG5uZXQvaXB2NC9pZ21wLmMtMjAwMy1cdFx0XHRcdFx0XHQgICAgaW1yLVx1MDAzZWltcl9tdWx0aWFkZHIuc19hZGRyLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzU4PXN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NzYtXHRzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc3NzpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzc4LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03OTM9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfY2hpbGRfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MTMtXHRzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgxNDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODE1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNTQxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yZWJ1aWxkX3JvdXRlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpICpmbClcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NDktXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIGZsNCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE1NTA6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NTEtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03Ni0gICAtIHRyYWNlcm91dGUgZG9lcyBub3Qgd29yay4gSSBwbGFubmVkIHRvIHJlbGF5IElDTVAgZnJvbSB0dW5uZWwsXG5uZXQvaXB2NC9pcF9ncmUuYzo3NzogICAgIHNvIHRoYXQgdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHNvbHZlZCBhbmQgdHJhY2Vyb3V0ZSBvdXRwdXRcbm5ldC9pcHY0L2lwX2dyZS5jLTc4LSAgICAgd291bGQgZXZlbiBtb3JlIGluZm9ybWF0aXZlLiBUaGlzIGlkZWEgYXBwZWFyZWQgdG8gYmUgd3Jvbmc6XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NjI1PXN0YXRpYyBpbnQgZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjM5LVx0XHRcdCAgICBza2ItXHUwMDNlbWFyaywgc2tiX2dldF9oYXNoKHNrYiksIGtleS1cdTAwM2VmbG93X2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjY0MDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF9ncmUuYy02NDEtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05NDE9c3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTU2LVxubmV0L2lwdjQvaXBfZ3JlLmM6OTU3Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF9ncmUuYy05NTgtXHRcdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjY5PWlwX3Jjdl9vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDAtXHRcdFx0XHRpZiAoSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpKVxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDE6XHRcdFx0XHRcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3NvdXJjZSByb3V0ZSBvcHRpb24gJXBJNCAtXHUwMDNlICVwSTRcXG5cJiMzNDssXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMwMi1cdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLFxuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy0zNC0gKiBXcml0ZSBvcHRpb25zIHRvIElQIGhlYWRlciwgcmVjb3JkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG9cbm5ldC9pcHY0L2lwX29wdGlvbnMuYzozNTogKiBzb3VyY2Ugcm91dGUgb3B0aW9uLCBhZGRyZXNzIG9mIG91dGdvaW5nIGludGVyZmFjZVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTM2LSAqICh3ZSBzaG91bGQgYWxyZWFkeSBrbm93IGl0LCBzbyB0aGF0IHRoaXMgIGZ1bmN0aW9uIGlzIGFsbG93ZWQgYmVcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz00NjI9aW50IF9faXBfcXVldWVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk0LVx0XHQgKi9cbm5ldC9pcHY0L2lwX291dHB1dC5jOjQ5NTpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk2LVx0XHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNjA1PXZvaWQgaXBfc2VuZF91bmljYXN0X3JlcGx5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKm9yaWdfc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTY0OC1cdHNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcdTAwMjZmbDQpKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NDk6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXHUwMDI2Zmw0LCBzayk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjUwLVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ2LVx0fVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDc6XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ4LVx0XHRyZXR1cm4gaXBfbXJvdXRlX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0MDk9aW50IGlwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyMi1cdFx0XHRvcHRuYW1lICE9IElQX1hGUk1fUE9MSUNZIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDIzOlx0XHRcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDI0LVx0XHRlcnIgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MTctXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1MTg6XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTUxOS1cdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNzYwPWludCBpcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc3MC1cdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFx1MDAyNlx1MDAyNiBvcHRuYW1lICE9IElQX1BLVE9QVElPTlMgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3NzE6XHRcdFx0IWlwX21yb3V0ZV9vcHQob3B0bmFtZSkpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc3Mi1cdFx0aW50IGxlbjtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yOTktXHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZXBhcm1zLmxpbmssIHR1bm5lbC1cdTAwM2Vmd21hcmssIDAsIDApO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzAwOlx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVx1MDAzZW5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMwMS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz01Njk9dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYxMS1cdGlmICghcnQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYxMjpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MTMtXHRcdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjY3PXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03NzktXHRpZiAoIXJ0KSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3ODA6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNzgxLVxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTE2OT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnRpX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy0xODYtXHRcdFx0ZmwtXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xubmV0L2lwdjQvaXBfdnRpLmM6MTg3Olx0XHRcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgXHUwMDI2ZmwtXHUwMDNldS5pcDQpO1xubmV0L2lwdjQvaXBfdnRpLmMtMTg4LVx0XHRcdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvaXBfdnRpLmMtMTk5LVx0XHRcdGZsLVx1MDAzZXUuaXA2LmZsb3dpNl9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcbm5ldC9pcHY0L2lwX3Z0aS5jOjIwMDpcdFx0XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgXHUwMDI2ZmwtXHUwMDNldS5pcDYpO1xubmV0L2lwdjQvaXBfdnRpLmMtMjAxLVx0XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzU2PXN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zNzEtXG5uZXQvaXB2NC9pcGlwLmM6MzcyOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgdGlwaC1cdTAwM2VkYWRkciwgdGlwaC1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L2lwaXAuYy0zNzMtXHRcdFx0ICAgICBpbmV0X2RzZmllbGRfdG9fZHNjcCh0aXBoLVx1MDAzZXRvcyksXG4tLVxubmV0L2lwdjQvaXBtci5jPTE5MDI9c3RhdGljIGludCBpcG1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xOTI1LVx0aWYgKHZpZi1cdTAwM2VmbGFncyBcdTAwMjYgVklGRl9UVU5ORUwpIHtcbm5ldC9pcHY0L2lwbXIuYzoxOTI2Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIFx1MDAyNmZsNCwgTlVMTCxcbm5ldC9pcHY0L2lwbXIuYy0xOTI3LVx0XHRcdFx0XHQgICB2aWYtXHUwMDNlcmVtb3RlLCB2aWYtXHUwMDNlbG9jYWwsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MzQtXHR9IGVsc2Uge1xubmV0L2lwdjQvaXBtci5jOjE5MzU6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXHUwMDI2Zmw0LCBOVUxMLCBpcGgtXHUwMDNlZGFkZHIsIDAsXG5uZXQvaXB2NC9pcG1yLmMtMTkzNi1cdFx0XHRcdFx0ICAgMCwgMCxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz0yMj1pbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgYWRkcl90eXBlKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci5jLTUzLVx0ZmliNF9ydWxlc19lYXJseV9mbG93X2Rpc3NlY3QobmV0LCBza2IsIFx1MDAyNmZsNCwgXHUwMDI2ZmxrZXlzKTtcbm5ldC9pcHY0L25ldGZpbHRlci5jOjU0Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L25ldGZpbHRlci5jLTU1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyLmM9OTE9aW50IG5mX2lwX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy05My17XG5uZXQvaXB2NC9uZXRmaWx0ZXIuYzo5NDpcdHN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsLVx1MDAzZXUuaXA0KTtcbm5ldC9pcHY0L25ldGZpbHRlci5jLTk1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTM4LVx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzozOTpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy00MC1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L3BpbmcuYz02ODg9c3RhdGljIGludCBwaW5nX3Y0X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcGluZy5jLTc4Mi1cdHNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aV9jb21tb24oXHUwMDI2Zmw0KSk7XG5uZXQvaXB2NC9waW5nLmM6NzgzOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIFx1MDAyNmZsNCwgc2spO1xubmV0L2lwdjQvcGluZy5jLTc4NC1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcmF3LmM9NDg5PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcmF3LmMtNjM1LVx0c2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcdTAwMjZmbDQpKTtcbm5ldC9pcHY0L3Jhdy5jOjYzNjpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcdTAwMjZmbDQsIHNrKTtcbm5ldC9pcHY0L3Jhdy5jLTYzNy1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy01MC0gKlx0Vml0YWx5IEUuIExhdnJvdlx0Olx0UmFjZSBjb25kaXRpb24gaW4gaXBfcm91dGVfaW5wdXRfc2xvdy5cbm5ldC9pcHY0L3JvdXRlLmM6NTE6ICpcdFRvYmlhcyBSaW5nc3Ryb21cdDpcdFVuaW5pdGlhbGl6ZWQgcmVzLnR5cGUgaW4gaXBfcm91dGVfb3V0cHV0X3Nsb3cuXG5uZXQvaXB2NC9yb3V0ZS5jLTUyLSAqXHRWbGFkaW1pciBWLiBJdmFub3ZcdDpcdElQIHJ1bGUgaW5mbyAoZmxvd2lkKSBpcyByZWFsbHkgdXNlZnVsLlxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTExNj12b2lkIGlwdjRfdXBkYXRlX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTEyNS1cdFx0XHQgMCk7XG5uZXQvaXB2NC9yb3V0ZS5jOjExMjY6XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTExMjctXHRpZiAoIUlTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTExMzQ9c3RhdGljIHZvaWQgX19pcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExNDQtXG5uZXQvaXB2NC9yb3V0ZS5jOjExNDU6XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTExNDYtXHRpZiAoIUlTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTExNTI9dm9pZCBpcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExNzYtXHRpZiAoUkVBRF9PTkNFKG9kc3QtXHUwMDNlb2Jzb2xldGUpIFx1MDAyNlx1MDAyNiAhb2RzdC1cdTAwM2VvcHMtXHUwMDNlY2hlY2sob2RzdCwgMCkpIHtcbm5ldC9pcHY0L3JvdXRlLmM6MTE3NzpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIFx1MDAyNmZsNCwgc2spO1xubmV0L2lwdjQvcm91dGUuYy0xMTc4LVx0XHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExODktXG5uZXQvaXB2NC9yb3V0ZS5jOjExOTA6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCBcdTAwMjZmbDQsIHNrKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTE5MS1cdFx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xMjA1PXZvaWQgaXB2NF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xMjEyLVx0X19idWlsZF9mbG93X2tleShuZXQsIFx1MDAyNmZsNCwgTlVMTCwgaXBoLCBvaWYsIGlwaC1cdTAwM2V0b3MsIHByb3RvY29sLCAwLCAwKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTIxMzpcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTIxNC1cdGlmICghSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTIyMT12b2lkIGlwdjRfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTIyOC1cdF9fYnVpbGRfZmxvd19rZXkobmV0LCBcdTAwMjZmbDQsIHNrLCBpcGgsIDAsIDAsIDAsIDAsIDApO1xubmV0L2lwdjQvcm91dGUuYzoxMjI5Olx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvcm91dGUuYy0xMjMwLVx0aWYgKCFJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNjA0PUVYUE9SVF9TWU1CT0woaXBfcm91dGVfaW5wdXRfbm9yZWYpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjYwNi0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L3JvdXRlLmM6MjYwNzpzdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxubmV0L2lwdjQvcm91dGUuYy0yNjA4LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9yaWdfb2lmLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjczNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjczNjpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG5uZXQvaXB2NC9yb3V0ZS5jLTI3MzctXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNzQ5LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjQvcm91dGUuYzoyNzUwOlx0cnRoID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShuZXQsIGZsNCwgXHUwMDI2cmVzLCBza2IpO1xubmV0L2lwdjQvcm91dGUuYy0yNzUxLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNzU0LX1cbm5ldC9pcHY0L3JvdXRlLmM6Mjc1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2gpO1xubmV0L2lwdjQvcm91dGUuYy0yNzU2LVxubmV0L2lwdjQvcm91dGUuYzoyNzU3OnN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG5uZXQvaXB2NC9yb3V0ZS5jLTI3NTgtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjkxOS1tYWtlX3JvdXRlOlxubmV0L2lwdjQvcm91dGUuYzoyOTIwOlx0cnRoID0gX19ta3JvdXRlX291dHB1dChyZXMsIGZsNCwgb3JpZ19vaWYsIGRldl9vdXQsIGZsYWdzKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjkyMS1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI5Mzc9c3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NzMtXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NzQ6c3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxubmV0L2lwdjQvcm91dGUuYy0yOTc1LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3JvdXRlLmMtMjk3Ni17XG5uZXQvaXB2NC9yb3V0ZS5jOjI5Nzc6XHRzdHJ1Y3QgcnRhYmxlICpydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZscDQpO1xubmV0L2lwdjQvcm91dGUuYy0yOTc4LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjk5MC19XG5uZXQvaXB2NC9yb3V0ZS5jOjI5OTE6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfb3V0cHV0X2Zsb3cpO1xubmV0L2lwdjQvcm91dGUuYy0yOTkyLVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MzMzNT1zdGF0aWMgaW50IGluZXRfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMzQyMi1cdFx0c2tiLVx1MDAzZWRldiA9IG5ldC1cdTAwM2Vsb29wYmFja19kZXY7XG5uZXQvaXB2NC9yb3V0ZS5jOjM0MjM6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShuZXQsIFx1MDAyNmZsNCwgXHUwMDI2cmVzLCBza2IpO1xubmV0L2lwdjQvcm91dGUuYy0zNDI0LVx0XHRlcnIgPSAwO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MzY5Mj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zNzAxLVxubmV0L2lwdjQvcm91dGUuYzozNzAyOnN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX3JvdXRlX29wcyA9IHtcbm5ldC9pcHY0L3JvdXRlLmMtMzcwMy1cdC5pbml0ID0gc3lzY3RsX3JvdXRlX25ldF9pbml0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mzc2Nz1pbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzItI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC9pcHY0L3JvdXRlLmM6MzgzMzpcdHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2c3lzY3RsX3JvdXRlX29wcyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzQtI2VuZGlmXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDY3LVx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFx1MDAyNmZsNCkpO1xubmV0L2lwdjQvc3luY29va2llcy5jOjQ2ODpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDY5LVx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMjQ2PWludCB1ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvaXB2NC91ZHAuYy0xNDIxLVx0XHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xubmV0L2lwdjQvdWRwLmM6MTQyMjpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xubmV0L2lwdjQvdWRwLmMtMTQyMy1cdFx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz0yMjU9c3RydWN0IHJ0YWJsZSAqdWRwX3R1bm5lbF9kc3RfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtMjU0LVxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmM6MjU1Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTI1Ni1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9MjE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKl9feGZybTRfZHN0X2xvb2t1cChzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMzYtXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzozNzpcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHBhcmFtcy1cdTAwM2VuZXQsIGZsNCk7XG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0zOC1cdGlmICghSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbi0tXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTIxMC1cdCAqL1xubmV0L2lwdjYvaWNtcC5jOjIxMTpcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgZmw2KTtcbm5ldC9pcHY2L2ljbXAuYy0yMTItXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTIzOT1zdGF0aWMgYm9vbCBpY21wdjZfcnRfaGFzX3ByZWZzcmMoc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yNDUtXG5uZXQvaXB2Ni9pY21wLmM6MjQ2Olx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xubmV0L2lwdjYvaWNtcC5jLTI0Ny1cdGlmICghZHN0LVx1MDAzZWVycm9yKSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03Ny1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6Nzg6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03OS1cdFx0aWYgKGRzdC1cdTAwM2VlcnJvcikge1xuLS1cbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM9MzM4PXN0YXRpYyBpbnQgaW9hbTZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNDE2LVxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYzo0MTc6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy00MTgtXHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtOS0gKlx0Q2hhbmdlczpcbm5ldC9pcHY2L2lwNl9maWIuYzoxMDogKlx0WXVqaSBTRUtJWUEgQFVTQUdJOlx0U3VwcG9ydCBkZWZhdWx0IHJvdXRlIG9uIHJvdXRlciBub2RlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTExLSAqXHRcdFx0XHRyZW1vdmUgaXA2X251bGxfZW50cnkgZnJvbSB0aGUgdG9wIG9mXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTExMzc9c3RhdGljIGludCBpcDZfZHN0X2xvb2t1cF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTQ3LVx0LyogVGhlIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRvIGRvXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE0ODpcdCAqIGlwNl9yb3V0ZV9nZXRfc2FkZHIsIGFuZCB0aGVuIGlwNl9yb3V0ZV9vdXRwdXQ7IGhvd2V2ZXIsXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE0OS1cdCAqIHRoZSByb3V0ZS1zcGVjaWZpYyBwcmVmZXJyZWQgc291cmNlIGZvcmNlcyB0aGVcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTUwOlx0ICogaXA2X3JvdXRlX291dHB1dCBjYWxsIF9iZWZvcmVfIGlwNl9yb3V0ZV9nZXRfc2FkZHIuXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1MS1cdCAqXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1Mi1cdCAqIEluIHNvdXJjZSBzcGVjaWZpYyByb3V0aW5nIChubyBzcmM9YW55IGRlZmF1bHQgcm91dGUpLFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTM6XHQgKiBpcDZfcm91dGVfb3V0cHV0IHdpbGwgZmFpbCBnaXZlbiBzcmM9YW55IHNhZGRyLCB0aG91Z2gsIHNvXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1NC1cdCAqIHRoYXQmIzM5O3Mgd2h5IHdlIHRyeSBpdCBhZ2FpbiBsYXRlci5cbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1OS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTYwOlx0XHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNjEtXHRcdHJ0ID0gKCpkc3QpLVx1MDAzZWVycm9yID8gTlVMTCA6IGRzdF9ydDZfaW5mbygqZHN0KTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE4Ny1cdGlmICghKmRzdClcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTg4Olx0XHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dF9mbGFncyhuZXQsIHNrLCBmbDYsIGZsYWdzKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTg5LVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMjI5LVx0XHRcdG1lbXNldChcdTAwMjZmbF9ndzYuZGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMjMwOlx0XHRcdCpkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFx1MDAyNmZsX2d3Nik7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTIzMS1cdFx0XHRlcnIgPSAoKmRzdCktXHUwMDNlZXJyb3I7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTU2Nz1pcDRpcDZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MjItXHQvKiBUcnkgdG8gZ3Vlc3MgaW5jb21pbmcgaW50ZXJmYWNlICovXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjIzOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgXHUwMDI2Zmw0LCBOVUxMLCBlaXBoLVx1MDAzZXNhZGRyLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTYyNC1cdFx0XHRcdCAgIDAsIDAsIDAsIElQUFJPVE9fSVBJUCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjMzLVx0aWYgKHJ0LVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSB7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjM0Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBcdTAwMjZmbDQsIE5VTEwsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjM1LVx0XHRcdFx0XHQgICBlaXBoLVx1MDAzZWRhZGRyLCBlaXBoLVx1MDAzZXNhZGRyLCAwLCAwLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMTc5LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjExODA6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBmbDYpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTExODEtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Mzk9c3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjQtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg2NTpcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODY2LVx0aWYgKCFkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9NDQzPXZ0aTZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmxvd2kgKmZsKVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy00NTktXHRcdFx0ZmwtXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjQ2MDpcdFx0XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksIFx1MDAyNmZsLVx1MDAzZXUuaXA0KTtcbm5ldC9pcHY2L2lwNl92dGkuYy00NjEtXHRcdFx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ2OS1cdFx0XHRmbC1cdTAwM2V1LmlwNi5mbG93aTZfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XG5uZXQvaXB2Ni9pcDZfdnRpLmM6NDcwOlx0XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChkZXYpLCBOVUxMLCBcdTAwMjZmbC1cdTAwM2V1LmlwNik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtNDcxLVx0XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTIwODI9c3RhdGljIGludCBpcDZtcl9wcmVwYXJlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTIxMTItXG5uZXQvaXB2Ni9pcDZtci5jOjIxMTM6XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjExNC1cdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzk2Olx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5Ny1cdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTk9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwNjpcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDA3LVx0XHRyZXR1cm4gaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjY0PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MDEtXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDI6XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTcwMy1cdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz0yND1pbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpza19wYXJ0aWFsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jLTQ5LVx0ZmliNl9ydWxlc19lYXJseV9mbG93X2Rpc3NlY3QobmV0LCBza2IsIFx1MDAyNmZsNiwgXHUwMDI2ZmxrZXlzKTtcbm5ldC9pcHY2L25ldGZpbHRlci5jOjUwOlx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtNTEtXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyLmM9ODk9aW50IF9fbmZfaXA2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy05My1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrIGZha2Vfc2sgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo5NDpcdFx0LyogbWFrZXMgaXA2X3JvdXRlX291dHB1dCBzZXQgUlQ2X0xPT0tVUF9GX0lGQUNFOiAqL1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTUtXHRcdC5zay5za19ib3VuZF9kZXZfaWYgPSAxLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jLTEwMS1cbm5ldC9pcHY2L25ldGZpbHRlci5jOjEwMjpcdHJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgXHUwMDI2ZmwtXHUwMDNldS5pcDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtMTAzLVx0ZXJyID0gcmVzdWx0LVx1MDAzZWVycm9yO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jPTE5PXN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0zMy1cdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IElkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMgYW5kIEVudHJ5cG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIHdpdGhpbiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyByb3V0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBsaXN0cyBmb3IgSVB2NCBhbmQgSVB2Ni4KCkZpcnN0LCBsb29raW5nIGF0IGBuZXQvaXB2NC9yb3V0ZS5jYCwgSSBzZWUgdGhhdCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBub3cgY2FsY3VsYXRlcyB0aGUgaGFzaCBidWNrZXQgdXNpbmcgYGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KWAgYW5kIHN0b3JlcyBpdCBpbiBgcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0YC4gQWxzbywgYHJ0X2ZsdXNoX2RldmAgaXMgbW9kaWZpZWQgdG8gZmx1c2ggZnJvbSBhIHNwZWNpZmljIGJ1Y2tldC4gVGhlbiwgYGlwX3J0X2luaXRgIGlzIGNoYW5nZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIGJ1Y2tldCBpbiB0aGUgdGFibGUgcGVyIENQVS4KCk5leHQsIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgdGhlIGNoYW5nZXMgYXJlIGEgYml0IG1vcmUgaW50cmljYXRlLiBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJvdXRlJiMzOTtzIGludGVyZmFjZSBkZXZpY2UgKGBydC0mZ3Q7cnQ2aV9pZGV2YCkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIHJvdXRlJiMzOTtzIGRldmljZSAoYHJ0X2RldmApLCBwbGFjaW5nIHRoZSByb3V0ZSBpbiBgdGFibGUtJmd0O21pc21hdGNoYCBpZiBpdCBkb2VzbiYjMzk7dC4gT3RoZXJ3aXNlLCBpdCB1c2VzIHRoZSBzdGFuZGFyZCBidWNrZXQuIEEgbmV3IGhlbHBlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSBsYXR0ZXIgaXMgbW9kaWZpZWQgdG8gZmx1c2ggdGhlIG1hdGNoaW5nIGJ1Y2tldCBhbmQgYWxzbyBgdGFibGUtJmd0O21pc21hdGNoYC4gQWxzbywgYGlwNl9yb3V0ZV9pbml0YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgZWFjaCBidWNrZXQgYW5kIHRoZSBtaXNtYXRjaCBsaXN0IHBlciBDUFUuCgpNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGZhY3QgdGhhdCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBpcyBjYWxsZWQgYnkgYHJ0Nl9kaXNhYmxlX2lwYCDigJMgdGhpcyBpcyBhIGtleSBwb2ludCBzaW5jZSB0aGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBJcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBzdGF0aWM/IEkganVzdCBmb3VuZCBvdXQsIHllcywgaXQmIzM5O3Mgc3RhdGljISBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBpcyBzdGF0aWMgYXMgd2VsbC4gQnV0IHdhaXQsIGhlcmUgaXMgYW4gaW1wb3J0YW50IHBvaW50IHRvIGNvbnNpZGVyLiAKCkhvd2V2ZXIsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGlzIG5vbi1zdGF0aWMgKGEgZ29vZCB0aGluZyEpLCBhbmQgc28gaXMgYHJ0Nl9kaXNhYmxlX2lwYC4gU28gaXMgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBhbmQgYHJ0X2ZsdXNoX2RldmAuIEV2ZW4gdGhvdWdoIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIHN0YXRpYywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdm1saW51eCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkIGV4aXN0IGluIGthbGxzeW1zIGlmIG5vdCBpbmxpbmVkLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcyBmcm9tIFNlY3Rpb24gNCwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGxvZ2ljIG9yIGFyZSB0aGUgZW50cnlwb2ludHMgdG8gdGhlIGZlYXR1cmUuIEl0IHNheXMgdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGRpcmVjdGx5IHRhcmdldGFibGUsIGJ1dCB3ZSBzaG91bGQgaWRlbnRpZnkgbm9uLXN0YXRpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhlbS4KClNvLCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YCBhcmUgZXhwb3J0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLiBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgaXMgbm9uLXN0YXRpYyBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIEZpbmFsbHksIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIGNhbGxlZCBieSBgcnQ2X2Rpc2FibGVfaXBgIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNhbGwgc3RydWN0dXJlIGFuZCBlbnRyeSBwb2ludHMgaW4gdGhlIHN5c3RlbS4KCk5vdywgYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZTogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz0xNzc9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjA4LVxubmV0L2lwdjYvcm91dGUuYzoyMDk6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMC17XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzgtXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcbm5ldC9pcHY2L3JvdXRlLmM6NTA3OTpcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihkZXYpO1xubmV0L2lwdjYvcm91dGUuYy01MDgwLVx0bmVpZ2hfaWZkb3duKG5kX3RhYmxlKG5ldCksIGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVbmNhY2hlZCBSb3V0ZSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCB3YXMgZGlyZWN0bHkgYWx0ZXJlZC4gR29vZCwgaXQgd2FzbiYjMzk7dC4gSG93ZXZlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCB3YXMgaW50cm9kdWNlZCBhcyBhIGhlbHBlciBmdW5jdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2AsIGFuZCBpbXBvcnRhbnRseSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgd2FzIG1vZGlmaWVkLCBhbmQgYHJ0Nl9kaXNhYmxlX2lwYCBpcyB0aGUgbm9uLXN0YXRpYyBjYWxsZXIgb2YgaXQuCgpOb3csIGxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBhbmQgYHJ0X2ZsdXNoX2RldmAgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIC0tIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AgaXMgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgpOZXh0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHRlc3Qgc3VpdGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBicmVhayBhbnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIHRlc3QgYHRlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpYCBsb29rcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGxvY2FsIHJvdXRlcyB0aHJvdWdoIGEgVlJGLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgc2NlbmFyaW8gb2YgYSBWUkYgYmVpbmcgdXNlZCBhcyBgZHN0LmRldmAgd2hpbGUgcmV0YWluaW5nIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBgcnQ2aV9pZGV2YC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgcmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIGR1cmluZyBpbnRlcmZhY2UgZGVsZXRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBjaGVjayBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBJIHNlZSB0aGF0IHRoZSBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBjb25maWcgb3B0aW9ucyBleGlzdCBpbiBib3RoIHRoZSBJUHY0IGFuZCBJUHY2IEtjb25maWcgZmlsZXMsIGFuZCBhcmUgY29uZGl0aW9uYWwgb24gYElORVRgIGFuZCBgSVBWNmAsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wbGljaXQgZGVwZW5kZW5jeS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhhdCBJUHY0IGFuZCBJUHY2IHJvdXRlIGhhc2ggY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4gSSB3aWxsIGFsc28gY2hlY2sgd2hlcmUgYElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElQX01VTFRJQ0FTVFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0aW5nXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgaXMgY29kZSBmb3IgYWRkcmVzc2luZyBzZXZlcmFsIG5ldHdvcmtlZCBjb21wdXRlcnMgYXQgb25jZSxcbiAgIDk6XHRcdCAgZW5sYXJnaW5nIHlvdXIga2VybmVsIGJ5IGFib3V0IDIgS0IuIFlvdSBuZWVkIG11bHRpY2FzdGluZyBpZiB5b3VcbiAgMTA6XHRcdCAgaW50ZW5kIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBNQk9ORSwgYSBoaWdoIGJhbmR3aWR0aCBuZXR3b3JrIG9uIHRvcFxuICAxMTpcdFx0ICBvZiB0aGUgSW50ZXJuZXQgd2hpY2ggY2FycmllcyBhdWRpbyBhbmQgdmlkZW8gYnJvYWRjYXN0cy4gTW9yZVxuICAxMjpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTUJPTkUgaXMgb24gdGhlIFdXVyBhdFxuICAxMzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5zYXZldHouY29tL21ib25lL1x1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCYjMzk7cyBzYWZlIHRvIHNheSBOLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBJZiB5b3UgaW50ZW5kIHRvIHJ1biB5b3VyIExpbnV4IGJveCBtb3N0bHkgYXMgYSByb3V0ZXIsIGkuZS4gYXMgYVxuICAxOTpcdFx0ICBjb21wdXRlciB0aGF0IGZvcndhcmRzIGFuZCByZWRpc3RyaWJ1dGVzIG5ldHdvcmsgcGFja2V0cywgc2F5IFk7IHlvdVxuICAyMDpcdFx0ICB3aWxsIHRoZW4gYmUgcHJlc2VudGVkIHdpdGggc2V2ZXJhbCBvcHRpb25zIHRoYXQgYWxsb3cgbW9yZSBwcmVjaXNlXG4gIDIxOlx0XHQgIGNvbnRyb2wgYWJvdXQgdGhlIHJvdXRpbmcgcHJvY2Vzcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcbiAgMjQ6XHRcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDI1Olx0XHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5NgoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAxMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuY2FjaGVkIFJvdXRlIExvZ2ljIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHVuY2FjaGVkIHJvdXRlcywgc3BlY2lmaWNhbGx5IHRoZSByZXN0cnVjdHVyaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb2RlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBmb3IgZnV6emluZy4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCBgbmV0L0tjb25maWdgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgSVB2NCBhbmQgYElQVjZgIGZvciBJUHY2IHJvdXRpbmcuIFRoZXNlIGFyZSB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgYW5kIHRoZSBjb2RlIGRpcmVjdGx5IG1vZGlmaWVzIGZpbGVzIHdpdGhpbiBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgLCBzbyB0aGV5JiMzOTtyZSBlc3NlbnRpYWwuIGBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGFuZCBgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGFyZSBhbHNvIGRlZmluZWQsIGJ1dCB0aGV5IGhhdmUgZGVmYXVsdHMsIHNvIGVuYWJsaW5nIGBJTkVUYCBhbmQgYElQVjZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHZhbGlkYXRlZCBieSBjaGVja2luZyB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoaWNoIGNvbmZpcm1zIHRoYXQgdGhlIGBpcHY0YCBhbmQgYGlwdjZgIHN1YmRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCBiYXNlZCBvbiB0aGVzZSBgQ09ORklHX2AgZmxhZ3MuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBoYW5kbGVkLCBzbyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVpciBhZGRpdGlvbiBhbmQgZmx1c2hpbmcgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAuIEFsdGhvdWdoIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGFyZSBzdGF0aWMsIGBydDZfZGlzYWJsZV9pcGAgdGhhdCBjYWxscyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBpcyBleHBvcnRlZCwgc28gSSBjYW4gaW5jbHVkZSB0aGVtLiBUaGUgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgZnVuY3Rpb24gd2FzbiYjMzk7dCBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIFRoZSBib290LXRpbWUgYF9faW5pdGAgZnVuY3Rpb25zLCBsaWtlIGBpcF9ydF9pbml0YCwgYXJlIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIHRoZSBwYXRjaCB0YXJnZXRzIHJ1bnRpbWUgYmVoYXZpb3IuCgpTbywgaGVyZSYjMzk7cyBteSBsaXN0IG9mIGZvY3VzZWQgc3ltYm9sczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgYW5kIGBydDZfZGlzYWJsZV9pcGAuIE5vbmUgb2YgdGhlc2Ugc2VlbSB0byBiZSBnZW5lcmFsLXB1cnBvc2UgaG90LXBhdGggb3IgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyB0aGV5IHNob3VsZCBiZSByZWxhdGl2ZWx5IHRhcmdldGVkIHRvIHRoZSB1bmNhY2hlZCByb3V0ZSBmdW5jdGlvbmFsaXR5LgoKRmluYWxseSwgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBjb2RlLCBhbHRlcnMgdGhlIGZ1bmRhbWVudGFsIHVuY2FjaGVkIHJvdXRlIGRhdGEgc3RydWN0dXJlIChmcm9tIHBlci1jcHUgbGlzdHMgdG8gcGVyLWNwdSBoYXNoIHRhYmxlcywgd2l0aCBhIHNwZWNpYWwgY2FzZSBmb3IgSVB2NiksIGFuZCB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHZpcnR1YWwgZGV2aWNlIG1hbmlwdWxhdGlvbiAobGlrZSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgaW50ZXJmYWNlcyB3aGlsZSBzZW5kaW5nIHRyYWZmaWMpLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIFRoZSBjb2RlIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgIGFyZToKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7SVBWNiYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCYjMzQ7LCAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBsb2dpYy4gSXQgcmVzdHJ1Y3R1cmVzIHRoZSB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSwgaGFuZGxpbmcgcm91dGUgYWRkaXRpb24sIGhhc2hpbmcsIGFuZCBmbHVzaGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JraW5nIHN5c2NhbGxzIGFuZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBSZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywKICAgICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X2Rpc2FibGVfaXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcblxuQWxsIG5ld2x5IGludHJvZHVjZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgcGVyLUNQVSB0YWJsZXMgd2hvc2UgYnVja2V0cyAobGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QgaW4gaXBfcnRfaW5pdCgpIGFuZCBpcDZfcm91dGVfaW5pdCgpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zIGNoYW5nZXMpLCBhbmQgY29udGFpbnMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBcblxuQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IGxpc3QgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGRldmljZSByZWZlcmVuY2UgdHJhY2tpbmcgKHN1Y2ggYXMgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgdHJhY2tpbmcuIENvbnNlcXVlbnRseSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnCmluZGV4IDMwMWI0NzY2MDMwNWIuLjdkNDBjYTIyZDJiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvS2NvbmZpZwpAQCAtMTAzLDYgJiM0MzsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0UKIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lECiAJYm9vbAogCiYjNDM7Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUwomIzQzOwlpbnQgJiMzNDtJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0cyYjMzQ7CiYjNDM7CXJhbmdlIDEgMTAKJiM0MzsJZGVmYXVsdCA2CiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkCiYjNDM7CSAgcm91dGUgaGFzaCB0YWJsZSB0byAyXklQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGUKJiM0MzsJICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXMKJiM0MzsJICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVQomIzQzOwkgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLgomIzQzOwogY29uZmlnIElQX1BOUAogCWJvb2wgJiMzNDtJUDoga2VybmVsIGxldmVsIGF1dG9jb25maWd1cmF0aW9uJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lnbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tcm91dGUuaCZndDsKQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVF9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCksCiYjNDM7CQkJCSAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKIAogCXJ0LSZndDtkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsOwogCkBAIC0xNTg4LDE0ICYjNDM7MTU5OSwxOSBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlpZiAocnQtJmd0O2RzdC5kZXYgIT0gZGV2KQomIzQzOwkJCWlmIChkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCkgIT0gZGV2KQogCQkJCWNvbnRpbnVlOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7CiAJCQluZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LApAQCAtMzc3MSwxMCAmIzQzOzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpCiAJaXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KIAl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnCmluZGV4IGMzODA2YzZhYzk2ZjkuLjAyNTMxNzg2NjhiZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMTgsNiAmIzQzOzE4LDE5IEBAIG1lbnVjb25maWcgSVBWNgogCiBpZiBJUFY2CiAKJiM0Mztjb25maWcgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMKJiM0MzsJaW50ICYjMzQ7SVB2NiB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwomIzQzOwlyYW5nZSAxIDEwCiYjNDM7CWRlZmF1bHQgNgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZAomIzQzOwkgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGUKJiM0MzsJICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXMKJiM0MzsJICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVQomIzQzOwkgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLgomIzQzOwogY29uZmlnIElQVjZfUk9VVEVSX1BSRUYKIAlib29sICYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0JiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTQwLDYgJiM0Mzs0MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uc3Byb3h5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvamhhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaXBoYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldF9uYW1lc3BhY2UuaCZndDsKQEAgLTEzMywxMSAmIzQzOzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZAloZWFkOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTsKJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTsKJiM0MzsJLyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovCiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTsKIAogdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydCkKIHsKLQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJaWYgKHJ0LSZndDtydDZpX2lkZXYgJmFtcDsmYW1wOyBydC0mZ3Q7cnQ2aV9pZGV2LSZndDtkZXYgIT0gcnRfZGV2KQomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDttaXNtYXRjaDsKJiM0MzsJZWxzZQomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKHJ0X2RldiwKJiM0MzsJCQkJCSAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1Nyw0MCAmIzQzOzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKJiM0MzsJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwomIzQzOwkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7CiYjNDM7CQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKJiM0MzsJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaGFuZGxlZCkKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKLQkJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKIAotCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCQkJYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLQkJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKLQkJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQotCQkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7Ci0JCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKLQkJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwKLQkJCQkJCSAgIEdGUF9BVE9NSUMpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCQkJaWYgKGhhbmRsZWQpCi0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gsIGRldik7CiAJfQogfQogCkBAIC02OTg3LDEwICYjNDM7NzAxNSwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpCiAjZW5kaWYKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2guaGVhZCk7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5sb2NrKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAppbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKQogCWNsZWFudXBfeGZybV9kZXYKIH0KIAomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpCiYjNDM7ewomIzQzOwlsb2NhbCBzZW5kZXJfcGlkCiYjNDM7CWxvY2FsIGJhY2tsb2cKJiM0MzsJbG9jYWwgcmMKJiM0MzsKJiM0MzsJIyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nCiYjNDM7CSMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQKJiM0MzsJIyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLgomIzQzOwlydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzCiYjNDM7CWlwIC02IC1uZXRucyAmIzM0OyRob3N0MSYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgLi9tc2dfemVyb2NvcHkgLTYgXAomIzQzOwkJLVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CXNlbmRlcl9waWQ9JCEKJiM0MzsJd2FpdCAmIzM0OyRzZW5kZXJfcGlkJiMzNDsKJiM0MzsJcmM9JD8KJiM0MzsJbG9nX3Rlc3QgJHJjIDAgJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzOwlbICRyYyAtbmUgMCBdICZhbXA7JmFtcDsgcmV0dXJuCiYjNDM7CiYjNDM7CWJhY2tsb2c9JChpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KQomIzQzOwlpZiAhIGVjaG8gJiMzNDskYmFja2xvZyYjMzQ7IHwgZ3JlcCAtRXEgJiMzOTtiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCYjMzk7OyB0aGVuCiYjNDM7CQlsb2dfdGVzdCAxIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAwIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMAomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO30KJiM0MzsKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHVzYWdlCiAKQEAgLTQyNSw2ICYjNDM7NDU2LDEwIEBAIGVjaG8KIGVjaG8gJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlJiMzNDsKIHJ1bl90ZXN0cwogCiYjNDM7ZWNobwomIzQzO2VjaG8gJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2gKJiM0MzsKIHByaW50ZiAmIzM0O1xuVGVzdHMgcGFzc2VkOiAlM2RcbiYjMzQ7ICR7bnN1Y2Nlc3N9CiBwcmludGYgJiMzNDtUZXN0cyBmYWlsZWQ6ICUzZFxuJiMzNDsgICAke25mYWlsfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBVbmNhY2hlZCBSb3V0ZSBIYXNoaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBjb21taXRtZW50LCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGhhc2hlZCBhcHByb2FjaCB0byBtYW5hZ2luZyAmIzM0O3VuY2FjaGVkJiMzNDsgcm91dGVzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHBlci1DUFUgbGlua2VkIGxpc3QuIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLCBgbmV0L2lwdjYvcm91dGUuY2AsIGFuZCBjb3JyZXNwb25kaW5nIEtjb25maWcgb3B0aW9ucywgcGx1cyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgaWRlYSBpcyB0byBoYXNoIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgcm91dGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBlci1DUFUgYnVja2V0IGl0IGJlbG9uZ3MgdG8sIGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBvcGVyYXRpb25zIGxpa2UgZmx1c2hpbmcuCgpOb3csIEkgaGF2ZSB0byBhcHBseSB0aGUgcnVsZXMgaW4gbXkgaGVhZDogKklzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8qIEkga25vdyB0aGF0JiMzOTtzIHRoZSBvbmx5IGp1c3RpZmljYXRpb24gZm9yIEtNU0FOLiBJIG5lZWQgdG8gbG9vayBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhdGNoIG1pZ2h0IGNyZWF0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd291bGQgb25seSBiZSBjYXVnaHQgYnkgS01TQU4uIFRoaW5ncyBsaWtlOgoKMS4gIFN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlciBzcGFjZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgUG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBvciB1bmluaXRpYWxpemVkIGJ5dGVzIGR1ZSB0byBib3VuZHMgY2hlY2tzLgoKU28sIGxldCYjMzk7cyBnbyBsaW5lIGJ5IGxpbmUsIHRoaW5raW5nIGxpa2UgYSBjb21waWxlciBhbmQgbWVtb3J5IGluc3BlY3Rvci4KKiAgIEFyZSBhbnkgb2YgdGhlc2Ugc3RydWN0dXJlcyAoZS5nLiwgYHJ0X3VuY2FjaGVkX2xpc3RgIG9yIGBydDZfdW5jYWNoZWRfbGlzdGApIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8sIHRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgcm91dGluZyBsaXN0cyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGV5IGFyZSBzdG9yZWQgaW4gcGVyLUNQVSB2YXJpYWJsZXMgYW5kIGVtYmVkZGVkIGludG8gZHN0IGVudHJpZXMuCiogICBBcmUgdGhlIHBlci1DUFUgdmFyaWFibGVzIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkPyBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgaW5kaWNhdGVzICpzdGF0aWMqIHBlci1DUFUgYWxsb2NhdGlvbi4gVGhhdCBtZWFucyB0aGV5IHJlc2lkZSBpbiB0aGUgQlNTIHNlZ21lbnQsIHdoaWNoIGlzICp6ZXJvLWluaXRpYWxpemVkKiBieSB0aGUgbGlua2VyL2xvYWRlci4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLgoqICAgQnV0IGl0JiMzOTtzIG5vdCBlbm91Z2ggdG8gcmVseSBvbiBzdGF0aWMgemVyby1pbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY29kZSBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoaW5ncyBhbnl3YXkuIEFuZCB5ZXMsIGluIGBpcF9ydF9pbml0YCBhbmQgYGlwNl9yb3V0ZV9pbml0YCB0aGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgbGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzIHdpdGhpbiB0aGUgaGFzaCB0YWJsZSBidWNrZXRzLCB1c2luZyBgSU5JVF9MSVNUX0hFQURgIGFuZCBgc3Bpbl9sb2NrX2luaXRgLiBUaGUgSVB2NiB2ZXJzaW9uIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGBtaXNtYXRjaGAgbGlzdC4KClNvLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgaGVyZSB0aGF0IGNyZWF0ZXMgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByaXNrcy4gVGhlc2UgYXJlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZy4gVGhlcmUgaXNuJiMzOTt0IGFueSAmIzM0O2NvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywmIzM0OyBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcywgYW5kIG5vIHN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgYXJlIG1haW5seSBhYm91dCBvcmdhbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5LgoKVGhlcmVmb3JlLCBnaXZlbiBteSBleHBlcnQga25vd2xlZGdlIGFuZCByaWdvcm91cyBldmFsdWF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4tc3BlY2lmaWMgcmlza3MuIEkgd291bGQgKm5vdCogcmVjb21tZW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRfdW5jYWNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcm91dGUuYz0xNTU4PXN0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYxLVxubmV0L2lwdjQvcm91dGUuYzoxNTYyOnN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xubmV0L2lwdjQvcm91dGUuYy0xNTYzLVxubmV0L2lwdjQvcm91dGUuYz0xNTY0PXZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NjUte1xubmV0L2lwdjQvcm91dGUuYzoxNTY2Olx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2Ny1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NzEtXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzI6XHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xubmV0L2lwdjQvcm91dGUuYy0xNTczLVxubmV0L2lwdjQvcm91dGUuYy0xNTc0LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvcm91dGUuYzoxNTc1Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWQsIFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xubmV0L2lwdjQvcm91dGUuYy0xNTc2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTc5PXZvaWQgcnRfZGVsX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODAte1xubmV0L2lwdjQvcm91dGUuYzoxNTgxOlx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3Q7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODItXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTg0LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1ODU6XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU4Ni1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTk2PXZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNjA0LVxubmV0L2lwdjQvcm91dGUuYzoxNjA1Olx0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xubmV0L2lwdjQvcm91dGUuYy0xNjA2LVx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTYxMi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvcm91dGUuYzoxNjEzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xubmV0L2lwdjQvcm91dGUuYy0xNjE0LVx0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTYxOC1cdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTYxOTpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE2MjAtXHRcdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zNzkyLVxubmV0L2lwdjQvcm91dGUuYzozNzkzOlx0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xubmV0L2lwdjQvcm91dGUuYy0zNzk0LVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgcG90ZW50aWFsIHByb2JsZW1zKSByZXNpZGUgd2hlbiByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhlIElQdjYgcm91dGluZyBjYWNoZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVuY2FjaGVkIHJvdXRlIGVudHJpZXMgYXJlIGJlaW5nIGhhbmRsZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLCBhbmQgcGVyaGFwcyBpZGVudGlmeSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBUaGUgZGV0YWlscyBoZXJlIGFyZSBjcml0aWNhbCBmb3IgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBlZmZpY2llbmN5IG9mIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlLCBydDZfdW5jYWNoZWRfdGFibGUpO1xuIDE0NjpcdFxuIDE0NzpcdHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xuIDE1MDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAxNTE6XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiAxNTI6XHRcbiAxNTM6XHRcdGlmIChydC1cdTAwM2VydDZpX2lkZXYgXHUwMDI2XHUwMDI2IHJ0LVx1MDAzZXJ0NmlfaWRldi1cdTAwM2VkZXYgIT0gcnRfZGV2KVxuIDE1NDpcdFx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoO1xuIDE1NTpcdFx0ZWxzZVxuIDE1NjpcdFx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxuIDE1NzpcdFx0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiAxNTg6XHRcbiAxNTk6XHRcdHJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XG4gMTYwOlx0XG4gMTYxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTYyOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCwgXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4gMTYzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiAxNjQ6XHR9XG4gMTY1Olx0XG4gMTY2Olx0dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydClcbiAxNjc6XHR7XG4gMTY4Olx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdDtcbiAxNjk6XHRcbiAxNzA6XHRcdGlmICh1bCkge1xuIDE3MTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTcyOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbiAxNzM6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTc0Olx0XHR9XG4gMTc1Olx0fVxuIDE3NjpcdFxuIDE3NzpcdHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcbiAxNzg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE3OTpcdHtcbiAxODA6XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuIDE4MTpcdFxuIDE4MjpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4gMTgzOlx0XHRcdHJldHVybjtcbiAxODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZXNlIHJvdXRpbmcgdGFibGUgZGVsZXRpb24gZnVuY3Rpb25zLCBgcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0YCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgdG8gYHVsYCBkdXJpbmcgdGhlIGluc2VydGlvbiBwcm9jZXNzLiBTbywgZXZlbiBpZiB0aGUgcm91dGluZyBlbnRyeSBsYW5kcyBpbiBhIGRpZmZlcmVudCBidWNrZXQgdGhhbiBleHBlY3RlZCwgdGhlIGRlbGV0aW9uIGxvZ2ljIHNob3VsZCBzdGlsbCB3b3JrIGZpbmUuIFRoYXQmIzM5O3MgZ29vZC4KClRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYGlwX3J0X2luaXQoKWAgYW5kIGBpcDZfcm91dGVfaW5pdCgpYCwgaGFuZGxlIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIG9mIGFsbCB0aGUgYGhlYWRgIGFuZCBgbG9ja2AgZmllbGRzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGF0aWMsIGJvb3QtdGltZSBzdHJ1Y3R1cmVzIGZvciB0aGUgcGVyLUNQVSB0YWJsZXMsIHNvIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGNsZWFuIGZyb20gdGhlIHN0YXJ0LiBXZSYjMzk7cmUgaGFzaGluZyBgbmV0X2RldmljZWAgcG9pbnRlcnMgaGVyZS4KCkNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgbm8gdW5pbml0aWFsaXplZCByZWFkcyBmcm9tIHRoZSBzdGFjayBvciBoZWFwLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgd2hpY2ggbWVhbnMgbm8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGluIHRoaXMgYXJlYS4KCkxvb2tpbmcgYXQgcG90ZW50aWFsIGJ1ZyB2ZWN0b3JzLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6CiogICBIYXNoIGNvbGxpc2lvbnMgb3IgbG9va3VwIGJ1Z3Mg4oCTIHRoZXNlIHdvdWxkIGJlIGxvZ2ljYWwgaXNzdWVzIGluIGhvdyB3ZSYjMzk7cmUgaGFzaGluZyB0aGluZ3MuCiogICBDb25jdXJyZW5jeSBwcm9ibGVtcyBvciBsb2NraW5nIGlzc3VlcyDigJMgTE9DS0RFUCBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGVzZS4KKiAgIFVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHByb2JsZW1zIG9uIHRoZSBkZXZpY2Ugb3Igcm91dGluZyBlbnRyeSDigJMgdGhlc2UgYXJlIEtBU0FOIGFuZCB0aGUgcmVmY291bnQgc2FuaXRpemVycyYjMzk7IHRlcnJpdG9yeS4KKiAgIE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMg4oCTIHRoZSBrZXJuZWwmIzM5O3Mgc3RhbmRhcmQgY2hlY2tzIHNob3VsZCBoYW5kbGUgdGhlc2UuCgpOb25lIG9mIHRob3NlIGFyZSBzdWJ0bGUgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGV5IGFyZSBhbGwgZGV0ZWN0YWJsZSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMgYW5kIHJlcHJlc2VudCB0aGUgZ2VuZXJhbCBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdHkgdGhlIGV4aXN0aW5nIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGZpbmQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgYHNldC1yZXN1bHRzYCByZXF1aXJlbWVudHMgdG8gY29uZmlybS4KCiogICBgTmVlZHNLTVNBTmA6IGJvb2xlYW4gKGZhbHNlKSAtIENoZWNrLgoqICAgYEtNU0FOUmVhc29uaW5nYDogc3RyaW5nIGV4cGxhaW5pbmcgd2h5IEtNU0FOIGlzIG5vdCBuZWVkZWQgYW5kIGNvbnRyYXN0aW5nIHdpdGggS0FTQU4vTE9DS0RFUCAtIENoZWNrLgoKRXZlcnl0aGluZyBpcyBjbGVhci4gSSYjMzk7bSBjb25maWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHNpbmdsZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyAod2l0aCBhIG1pc21hdGNoIGxpc3QgZm9yIElQdjYpIHRvIG9wdGltaXplIGRldmljZSBmbHVzaGluZyBmb3IgSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxuXG5BbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgbGlzdCBoYW5kbGluZywgbG9ja2luZywgb3IgZGV2aWNlIHJlZmVyZW5jZSB0cmFja2luZyAoc3VjaCBhcyByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZjb3VudCB0cmFja2luZy4gQ29uc2VxdWVudGx5LCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXG5cbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjM3LjU3MzM1MzM0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDg3MTE5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxcblxcbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODozNy41NzMzNTkwMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ3OTM0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjODIyMzQwMjZkY2ExZGNlYjZkZmU3ZjkwMDEwZDY5ZjI3YTA1MjJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE4OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXFxuaW5kZXggMzAxYjQ3NjYwMzA1Yi4uN2Q0MGNhMjJkMmIyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9LY29uZmlnXFxuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xcbkBAIC0xMDMsNiArMTAzLDE5IEBAIGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXFxuIFxcdGJvb2xcXG4gXFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcXG4rXFx0aW50IFxcXCJJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4rXFx0cmFuZ2UgMSAxMFxcbitcXHRkZWZhdWx0IDZcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjQgdW5jYWNoZWRcXG4rXFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZVxcbitcXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xcbitcXHQgIHJlZHVjZSBjb2xsaXNpb25zLCBidXQgZWFjaCBhZGRpdGlvbmFsIGJpdCBkb3VibGVzIHRoZSBwZXItQ1BVXFxuK1xcdCAgbWVtb3J5IHVzZWQgYnkgdGhlIHRhYmxlLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxcbitcXG4gY29uZmlnIElQX1BOUFxcbiBcXHRib29sIFxcXCJJUDoga2VybmVsIGxldmVsIGF1dG9jb25maWd1cmF0aW9uXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC03NCw2ICs3NCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lnbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxuQEAgLTE1NTIsMTEgKzE1NTMsMjEgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTtcXG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcXHRCSVQoQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUylcXG4rXFxuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xcbiBcXG4gdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydClcXG4ge1xcbi1cXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xcbiBcXG4gXFx0cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XFxuIFxcbkBAIC0xNTg4LDE0ICsxNTk5LDE5IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcXG4gXFxuIFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG4tXFx0XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2ICE9IGRldilcXG4rXFx0XFx0XFx0aWYgKGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpICE9IGRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cXHUwMDNlZHN0LmRldl9yY3UsIGJsYWNraG9sZV9uZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbkBAIC0zNzcxLDEwICszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKVxcbiBcXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0aW50IGJ1Y2tldDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2J1Y2tldF07XFxuIFxcbi1cXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dWwtXFx1MDAzZWhlYWQpO1xcbi1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dWwtXFx1MDAzZWhlYWQpO1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXFxuIFxcdGlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xcbmluZGV4IGMzODA2YzZhYzk2ZjkuLjAyNTMxNzg2NjhiZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvS2NvbmZpZ1xcbisrKyBiL25ldC9pcHY2L0tjb25maWdcXG5AQCAtMTgsNiArMTgsMTkgQEAgbWVudWNvbmZpZyBJUFY2XFxuIFxcbiBpZiBJUFY2XFxuIFxcbitjb25maWcgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcXG4rXFx0aW50IFxcXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4rXFx0cmFuZ2UgMSAxMFxcbitcXHRkZWZhdWx0IDZcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjYgdW5jYWNoZWRcXG4rXFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXFxuK1xcdCAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzXFxuK1xcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcXG4rXFx0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXFxuK1xcbiBjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbiBcXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lwaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG5AQCAtMTMzLDExICsxMzQsMjcgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XFxuKyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRVxcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXFxuK1xcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcXG4rXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rXFx0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xcbit9O1xcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4gXFxuIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIHtcXG4tXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcXG4rXFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcXG4gXFxuIFxcdHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xcbiBcXG5AQCAtMTU3LDQwICsxNzQsNTEgQEAgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbitcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG4rXFx0XFx0c3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LVxcdTAwM2VydDZpX2lkZXY7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XFxuK1xcbitcXHRcXHRpZiAocnRfaWRldiBcXHUwMDI2XFx1MDAyNiBydF9pZGV2LVxcdTAwM2VkZXYgPT0gZGV2KSB7XFxuK1xcdFxcdFxcdHJ0LVxcdTAwM2VydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTtcXG4rXFx0XFx0XFx0aW42X2Rldl9wdXQocnRfaWRldik7XFxuK1xcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnRfZGV2ID09IGRldikge1xcbitcXHRcXHRcXHRydC1cXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XFxuK1xcdFxcdFxcdG5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZydC1cXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0XFx0aGFuZGxlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGhhbmRsZWQpXFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4tXFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XFxuK1xcdFxcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xcbitcXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuIFxcbi1cXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cXHUwMDNlcnQ2aV9pZGV2O1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuLVxcdFxcdFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHJ0X2lkZXYgXFx1MDAyNlxcdTAwMjYgcnRfaWRldi1cXHUwMDNlZGV2ID09IGRldikge1xcbi1cXHRcXHRcXHRcXHRydC1cXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XFxuLVxcdFxcdFxcdFxcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xcbi1cXHRcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcXG4tXFx0XFx0XFx0XFx0cnQtXFx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQyk7XFxuLVxcdFxcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChoYW5kbGVkKVxcbi1cXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR0YWJsZSA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XFxuK1xcdFxcdHVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XFxuK1xcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xcbitcXHRcXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLCBkZXYpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0LCBjcHUpO1xcbitcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0aW50IGJ1Y2tldDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcXG4rXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcXG4gXFxuLVxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuLVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRhYmxlLVxcdTAwM2VtaXNtYXRjaC5oZWFkKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRhYmxlLVxcdTAwM2VtaXNtYXRjaC5sb2NrKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcXG5pbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbkBAIC0zODUsNiArMzg1LDM3IEBAIHJ1bl90ZXN0cygpXFxuIFxcdGNsZWFudXBfeGZybV9kZXZcXG4gfVxcbiBcXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcXG4re1xcbitcXHRsb2NhbCBzZW5kZXJfcGlkXFxuK1xcdGxvY2FsIGJhY2tsb2dcXG4rXFx0bG9jYWwgcmNcXG4rXFxuK1xcdCMgQSBsb2NhbCByb3V0ZSB0aHJvdWdoIGEgVlJGIHVzZXMgdGhlIFZSRiBhcyBkc3QuZGV2IHdoaWxlIHJldGFpbmluZ1xcbitcXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXFxuK1xcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cXG4rXFx0cnVuX2NtZF9ob3N0MSB0YyBxZGlzYyByZXBsYWNlIGRldiAke1ZSRn0gcm9vdCBuZXRlbSBsaW1pdCAxIGRlbGF5IDEwc1xcbitcXHRpcCAtNiAtbmV0bnMgXFxcIiRob3N0MVxcXCIgcm91dGUgYWRkIGxvY2FsICR7SE9TVDFfNn0vMTI4IGRldiBldGgwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRob3N0MVxcXCIgLi9tc2dfemVyb2NvcHkgLTYgXFxcXFxcbitcXHRcXHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXFxcXG4rXFx0XFx0XFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXG4rXFx0c2VuZGVyX3BpZD0kIVxcbitcXHR3YWl0IFxcXCIkc2VuZGVyX3BpZFxcXCJcXG4rXFx0cmM9JD9cXG4rXFx0bG9nX3Rlc3QgJHJjIDAgXFxcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rXFx0WyAkcmMgLW5lIDAgXSBcXHUwMDI2XFx1MDAyNiByZXR1cm5cXG4rXFxuK1xcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFxcXCIkaG9zdDFcXFwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcXG4rXFx0aWYgISBlY2hvIFxcXCIkYmFja2xvZ1xcXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXFxuK1xcdFxcdGxvZ190ZXN0IDEgMCBcXFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1xcXCJcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGxvZ190ZXN0IDAgMCBcXFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1xcXCJcXG4rXFxuK1xcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcXG4rXFx0bG9nX3Rlc3QgJD8gMCBcXFwiRmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcXFwiXFxuK31cXG4rXFxuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuICMgdXNhZ2VcXG4gXFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xcbiBlY2hvIFxcXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXFxcIlxcbiBydW5fdGVzdHNcXG4gXFxuK2VjaG9cXG4rZWNobyBcXFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXFxuK1xcbiBwcmludGYgXFxcIlxcXFxuVGVzdHMgcGFzc2VkOiAlM2RcXFxcblxcXCIgJHtuc3VjY2Vzc31cXG4gcHJpbnRmIFxcXCJUZXN0cyBmYWlsZWQ6ICUzZFxcXFxuXFxcIiAgICR7bmZhaWx9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODozOS4yMTg3NTg5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyNzcwNTE3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXG5pbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvS2NvbmZpZ1xuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xuQEAgLTEwMyw2ICsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcbiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRFxuIFx0Ym9vbFxuIFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbitcdGludCBcIklQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCJcbitcdHJhbmdlIDEgMTBcbitcdGRlZmF1bHQgNlxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXG4rXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQX1BOUFxuIFx0Ym9vbCBcIklQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgKzc0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKVxuK1xuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4rXHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1ODgsMTQgKzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuK1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xuaW5kZXggYzM4MDZjNmFjOTZmOS4uMDI1MzE3ODY2OGJkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L0tjb25maWdcbisrKyBiL25ldC9pcHY2L0tjb25maWdcbkBAIC0xOCw2ICsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4rY29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTXG4rXHRpbnQgXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wiXG4rXHRyYW5nZSAxIDEwXG4rXHRkZWZhdWx0IDZcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZFxuK1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTQwLDYgKzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgKzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTtcbisjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuK1x0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0aWYgKHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXYpXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4rXHRlbHNlXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihydF9kZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuK1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdGludCBidWNrZXQ7XG4rXG4rXHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcbitcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0fVxuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gubG9jayk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5AQCAtMzg1LDYgKzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuK3tcbitcdGxvY2FsIHNlbmRlcl9waWRcbitcdGxvY2FsIGJhY2tsb2dcbitcdGxvY2FsIHJjXG4rXG4rXHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbitcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcbitcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbitcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbitcdGlwIC02IC1uZXRucyBcIiRob3N0MVwiIHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIC4vbXNnX3plcm9jb3B5IC02IFxcXG4rXHRcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcbitcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuK1x0c2VuZGVyX3BpZD0kIVxuK1x0d2FpdCBcIiRzZW5kZXJfcGlkXCJcbitcdHJjPSQ/XG4rXHRsb2dfdGVzdCAkcmMgMCBcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rXHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbitcbitcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFwiJGhvc3QxXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuK1x0aWYgISBlY2hvIFwiJGJhY2tsb2dcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cbitcdFx0bG9nX3Rlc3QgMSAwIFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1wiXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGxvZ190ZXN0IDAgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1xuK1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCJcbit9XG4rXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcIlxuIHJ1bl90ZXN0c1xuIFxuK2VjaG9cbitlY2hvIFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXG4rXG4gcHJpbnRmIFwiXFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cIiAke25zdWNjZXNzfVxuIHByaW50ZiBcIlRlc3RzIGZhaWxlZDogJTNkXFxuXCIgICAke25mYWlsfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6MzkuMjE4NzYwNjMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ2Njg3MDY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3k6IFVuY2FjaGVkIFJvdXRlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbCwgc28gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGltcGFjdCBvbiB0aGUga2VybmVsLiBJIHNlZSB0aGF0IGl0IGZvY3VzZXMgb24gSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZSBoYW5kbGluZywgYSBjb3JlIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYSByZWZhY3RvcmluZywgY2hhbmdpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB1bmNhY2hlZCByb3V0ZXMgZnJvbSBwZXItQ1BVIGxpbmtlZCBsaXN0cyB0byBwZXItQ1BVIGhhc2ggdGFibGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICAqKklQdjQ6KiogTW9kaWZpZXMgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjQvcm91dGUuY2AuIFRoZSBgcnRfdW5jYWNoZWRfbGlzdGAgaXMgcmVwbGFjZWQgYnkgYHJ0X3VuY2FjaGVkX3RhYmxlYCwgYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoZSBoYXNoIGZ1bmN0aW9uIHVzZXMgYGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KWAgYW5kIGEgY29uZmlndXJhYmxlIG51bWJlciBvZiBoYXNoIGJpdHMgKGBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCkuIENoYW5nZXMgYXJlIG1hZGUgdG8gYHJ0X2FkZF91bmNhY2hlZF9saXN0YCAod2hpY2ggYWRkcyByb3V0ZXMpLCBgcnRfZmx1c2hfZGV2YCAod2hpY2ggcmVtb3ZlcyByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlKSwgYW5kIGBpcF9ydF9pbml0YCAoaW5pdGlhbGl6YXRpb24pLlxuKiAgICoqSVB2NjoqKiBNb2RpZmllcyBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gVGhlIHBhdHRlcm4gbWlycm9ycyBJUHY0LCB3aXRoIGBydDZfdW5jYWNoZWRfbGlzdGAgYmVjb21pbmcgYHJ0Nl91bmNhY2hlZF90YWJsZWAuIFRoZSBoYXNoIHRhYmxlIHVzZXMgYFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVgIGFuZCBgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYC4gTG9naWMgaXMgYWRkZWQgZm9yIGEgXCJtaXNtYXRjaFwiIGxpc3QgdGhhdCBpcyB1c2VkIHdoZW4gYHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXZgLiBLZXkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgaXA2X3JvdXRlX2luaXRgLlxuKiAgICoqVGVzdGluZzoqKiBUaGVyZSdzIGEgcmVsYXRlZCBtb2RpZmljYXRpb24gdG8gdGhlIGB2cmYteGZybS10ZXN0cy5zaGAgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHNvbWVvbmUncyBhbHJlYWR5IGNvbnNpZGVyaW5nIGhvdyB0byB0ZXN0IHRoaXMgY2hhbmdlLlxuXG5Ob3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGxpa2UgdGhpcywgcGFydGljdWxhcmx5IHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcsIGFyZSBoaWdoLXZhbHVlIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgZnVuY3Rpb25zIChgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgKSB3aXRoaW4gYSBjcml0aWNhbCBwYXRoLiBUaGlzIGNvZGUgcnVucyB3aGVuIHJvdXRlcyBhcmUgY3JlYXRlZCBvciBkZWxldGVkLCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIHRha2VuIGRvd24gb3IgZmx1c2hlZC4gVW5jYWNoZWQgcm91dGVzIGFyZSB1c2VkIHdoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBlLmcuLCB3aXRoIHJhdyBzb2NrZXRzLCBQTVRVLCByZWRpcmVjdHMsIFZSRiwgZXRjLiBUaGUgZmx1c2hpbmcgYXNwZWN0LCB0cmlnZ2VyZWQgYnkgZGV2aWNlIHJlbW92YWwsIGlzIGEgcGFydGljdWxhcmx5IGFwcGVhbGluZyB0YXJnZXQsIHNpbmNlIG5ldHdvcmsgZGV2aWNlcyBjb21lIGFuZCBnbyBjb25zdGFudGx5LCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlci4gVGhlIGNvZGUgcmVmYWN0b3JpbmcsIHBhcnRpY3VsYXJseSBvZiBkYXRhIHN0cnVjdHVyZXMsIGlzIG1lbnRpb25lZCBhcyBhbiBpZGVhbCBjYW5kaWRhdGUuXG5cblRvIGJlIHRob3JvdWdoLCBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb2RlJ3MgcmVhY2ggYW5kIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgZnV6emluZyBoYXJuZXNzZXMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIGNoYW5nZXMgYXJlIHNpZ25pZmljYW50IGFuZCBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgdGhhdCBhcmUgZ29vZCBjYW5kaWRhdGVzIHRvIHJldmVhbCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjUzLjg4NzQ3MDAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjczNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTUzOS1cXHRcXHRpZiAob3JpZykge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTU0MDpcXHRcXHRcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChvcmlnKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNm9yaWctXFx1MDAzZWRzdCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1NjI9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTYzLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2NDp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2NS17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY3Ny1cXHRcXHRcXHR9XFxubmV0L2lwdjQvcm91dGUuYzoxNjc4OlxcdFxcdFxcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzktXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY4MC1cXHR9IGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjMwOD1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTAyLVxcdFxcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjI1MDM6XFx0XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnRoKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDQtXFx0fVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9NjY9c3RhdGljIGludCB4ZnJtNF9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy05MC1cXHR4ZHN0LVxcdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cXHUwMDNlcnRfbXR1X2xvY2tlZDtcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzo5MTpcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydCk7XFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjUzLjk0Mzc1MDcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxODk4OTU1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgcnRfZmx1c2hfZGV2YCBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBgcnRfZmx1c2hfZGV2YCBmdW5jdGlvbi4gV2UndmUgYmVlbiBsb29raW5nIGF0IHNvbWUgcmVsYXRlZCBpc3N1ZXMsIGFuZCBpdCdzIHRpbWUgdG8gbWFwIG91dCB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aG8ncyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgcGljdHVyZS4gSXQncyBub3QgZW5vdWdoIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgd2UgbmVlZCB0byBzZWUgaXRzIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBleHBlY3RlZCBjYWxscywgb3IgYXJlIHRoZXJlIHNvbWUgdW5leHBlY3RlZCBsb2NhdGlvbnMgd2hlcmUgd2UgYXJlIGZsdXNoaW5nPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxzPyBBcmUgdGhlcmUgYW55IGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBpdCB0aGF0IHNob3VsZG4ndCBiZT8gRG9pbmcgdGhpcyB3aWxsIGhlbHAgdXMgaXNvbGF0ZSB0aGUgc291cmNlIG9mIGFueSBpc3N1ZXMgd2UgZmluZC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODo1Ni4xMzM2NDg4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTUwNjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9mbHVzaF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVxcdFxcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XFx0XFx0cnRfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTA9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTUtXFxubmV0L2lwdjQvcm91dGUuYzoxNTk2OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvcm91dGUuYy0xNTk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6NTYuMTg1MTY0MjAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM3NzE3ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzbmlwcGV0cywgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIG5ldHdvcmsgZW5naW5lZXI6XG5cbioqSVB2NiBSb3V0ZSBDYWNoZSBUaGlua2luZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIElQdjYgcm91dGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgXCJ1bmNhY2hlZFwiIHJvdXRlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIHJpZ2h0LCB3ZSdyZSB0YWxraW5nIGFib3V0IHJvdXRlcyB0aGF0IGFyZW4ndCBzaXR0aW5nIGluIHRoZSBmYXN0IHBhdGgsIHByb2JhYmx5IGR1ZSB0byBzb21lIGNvbmRpdGlvbiBvciBiZWNhdXNlIHRoZXkncmUgbGVzcyBmcmVxdWVudGx5IHVzZWQuXCIgSSBzZWUgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLiBUaGUgXCJhZGRcIiBmdW5jdGlvbiBwcm9iYWJseSBhcHBlbmRzIGEgbmV3IHJvdXRlIHRvIGEgbGlzdCBvZiB0aGVzZSB1bmNhY2hlZCBlbnRyaWVzLiBXZSBhcmUgbGlrZWx5IGFkZGluZyB0aGUgcm91dGUgdG8gYSBsaXN0IGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcsIG9yIGZvciBpdCB0byBiZSBjb25zdWx0ZWQgd2hlbiB3ZSBoYXZlIGEgcGFja2V0IHRvIGZvcndhcmQuIFRoZSBcImZsdXNoX2RldlwiIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZSEgVGhhdCBpbmRpY2F0ZXMgd2UgYXJlIGxpa2VseSBmbHVzaGluZywgb3IgcmVtb3ZpbmcsIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBuZXR3b3JrIGRldmljZSwgcHJvYmFibHkgb24gYW4gaW50ZXJmYWNlLiBXZSBtaWdodCBiZSBjbGVhbmluZyB1cCB0aGVzZSB1bmNhY2hlZCBlbnRyaWVzIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biwgaXMgcmVjb25maWd1cmVkLCBvciBtYXliZSBldmVuIHdoZW4gYSBuZXcsIG1vcmUgb3B0aW1hbCByb3V0ZSBpcyBsZWFybmVkLCBhbmQgdGhlIG9sZCBjYWNoZWQgZW50cnkgaXMgbm8gbG9uZ2VyIGFwcGxpY2FibGUuIFRoZSBlZmZpY2llbmN5IG9mIHRoZSBjYWNoZSBhbmQgaG93IHRoZXNlIFwidW5jYWNoZWRcIiByb3V0ZXMgYXJlIG1hbmFnZWQgYXJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgZm9yIGEgcm91dGUgdG8gYmVjb21lIFwidW5jYWNoZWRcIiBhbmQgYWxzbyBob3cgb2Z0ZW4gdGhpcyBsaXN0IGlzIHB1cmdlZC4gSXMgdGhlcmUgYSB0aW1lciwgc29tZSBraW5kIG9mIHVzYWdlIHRocmVzaG9sZCwgb3Igc29tZSBvdGhlciBtZWNoYW5pc20gYXQgcGxheT8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3cgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjU5LjU2MjM0NTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjI0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl91bmNhY2hlZF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9MTQ1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjYvcm91dGUuYy0xNDYtXFxubmV0L2lwdjYvcm91dGUuYzoxNDc6dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OC17XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTE2NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjE2Njp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMTY3LXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMTc2LVxcbm5ldC9pcHY2L3JvdXRlLmM6MTc3OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE3OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjA4LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjA5OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L3JvdXRlLmMtMjEwLXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjE5LVxcdFxcdFxcdFxcdFxcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xcbm5ldC9pcHY2L3JvdXRlLmM6MjIwOlxcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MjIxOlxcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2gsIGRldik7XFxubmV0L2lwdjYvcm91dGUuYy0yMjItXFx0fVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zODI9c3RhdGljIHZvaWQgaXA2X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzg4LVxcdGlwX2RzdF9tZXRyaWNzX3B1dChkc3QpO1xcbm5ldC9pcHY2L3JvdXRlLmM6Mzg5OlxcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChydCk7XFxubmV0L2lwdjYvcm91dGUuYy0zOTAtXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTIzMDE9c3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMzQyLVxcdFxcdFxcdC8qIDEgcmVmY250IGlzIHRha2VuIGR1cmluZyBpcDZfcnRfY2FjaGVfYWxsb2MoKS5cXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDM6XFx0XFx0XFx0ICogQXMgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKCkgZG9lcyBub3QgY29uc3VtZSByZWZjbnQsXFxubmV0L2lwdjYvcm91dGUuYy0yMzQ0LVxcdFxcdFxcdCAqIHRoaXMgcmVmY250IGlzIGFsd2F5cyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGV2ZW5cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjM0Ni1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDc6XFx0XFx0XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDgtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzOTEtXFx0ICovXFxubmV0L2lwdjYvcm91dGUuYzozMzkyOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChydCk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzkzLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDgwLVxcdG5laWdoX2lmZG93bihuZF90YWJsZShuZXQpLCBkZXYpO1xcbi0tXFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9ODA9c3RhdGljIGludCB4ZnJtNl9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDItXFx0eGRzdC1cXHUwMDNldS5ydDYucnQ2aV9zcmMgPSBydC1cXHUwMDNlcnQ2aV9zcmM7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MTAzOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwNC1cXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTEyNz1zdGF0aWMgdm9pZCB4ZnJtNl9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMzEtXFx0ZHN0X2Rlc3Ryb3lfbWV0cmljc19nZW5lcmljKGRzdCk7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MTMyOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEzMy1cXHRpZiAobGlrZWx5KHhkc3QtXFx1MDAzZXUucnQ2LnJ0NmlfaWRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjU5LjYxMTU3NTUxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MjIyNDA5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgSVB2NC9JUHY2IFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaXMgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgc2l0dWF0aW9uIHJpcGUgZm9yIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBhbmQgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGl2ZSBpbi4gRm9jdXNTeW1ib2xzIHdpbGwgYWxzbyBwbGF5IGFuIGltcG9ydGFudCByb2xlLCBzbyBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgZWFybHkgb24uXG5cbkZpcnN0LCBsZXQncyBzdGFydCB3aXRoIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGZvY3VzaW5nIG9uIElQdjQgYW5kIElQdjYgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBkaWcgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHNlZSB0aGlzOlxuXG5gYGBcbmNvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcblx0aW50IFwiSVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHNcIlxuXHRyYW5nZSAxIDEwXG5cdGRlZmF1bHQgNlxuYGBgXG5cbkknbGwgcXVpY2tseSBjaGVjayBpZiB0aGlzIHZhcmlhYmxlIGlzIHVuZGVyIGEgbWVudSwgd2hpY2ggbWlnaHQgcmVzdHJpY3QgaXRzIHZpc2liaWxpdHkgb3IgaW5mbHVlbmNlLiBJJ2xsIHNjYW4gYXJvdW5kIGxpbmUgMTAzIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MTYuODMzOTg3ODA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0aGVscFxcbiAgOTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XFxuICA5NzpcXHRcXHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxcbiAgOTg6XFx0XFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cXG4gIDk5OlxcdFxcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcXG4gMTAwOlxcdFxcdCAgaGFuZGxlZCBieSB0aGUga2xvZ2QgZGFlbW9uIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBrZXJuZWwgbWVzc2FnZXNcXG4gMTAxOlxcdFxcdCAgKFxcXCJtYW4ga2xvZ2RcXFwiKS5cXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIElQX1JPVVRFX0NMQVNTSURcXG4gMTA0OlxcdFxcdGJvb2xcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xcbiAxMDc6XFx0XFx0aW50IFxcXCJJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4gMTA4OlxcdFxcdHJhbmdlIDEgMTBcXG4gMTA5OlxcdFxcdGRlZmF1bHQgNlxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXFxuIDExMjpcXHRcXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXFxuIDExMzpcXHRcXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xcbiAxMTQ6XFx0XFx0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxcbiAxMTU6XFx0XFx0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdCAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0Y29uZmlnIElQX1BOUFxcbiAxMjA6XFx0XFx0Ym9vbCBcXFwiSVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvblxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgVGhpcyBlbmFibGVzIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIG9mIElQIGFkZHJlc3NlcyBvZiBkZXZpY2VzIGFuZFxcbiAxMjM6XFx0XFx0ICBvZiB0aGUgcm91dGluZyB0YWJsZSBkdXJpbmcga2VybmVsIGJvb3QsIGJhc2VkIG9uIGVpdGhlciBpbmZvcm1hdGlvblxcbiAxMjQ6XFx0XFx0ICBzdXBwbGllZCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBvciBieSBCT09UUCBvciBSQVJQIHByb3RvY29scy5cXG4gMTI1OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgb25seSBmb3IgZGlza2xlc3MgbWFjaGluZXMgcmVxdWlyaW5nIG5ldHdvcmtcXG4gMTI2OlxcdFxcdCAgYWNjZXNzIHRvIGJvb3QgKGluIHdoaWNoIGNhc2UgeW91IHdhbnQgdG8gc2F5IFkgdG8gXFxcIlJvb3QgZmlsZSBzeXN0ZW1cXG4gMTI3OlxcdFxcdCAgb24gTkZTXFxcIiBhcyB3ZWxsKSwgYmVjYXVzZSBhbGwgb3RoZXIgbWFjaGluZXMgY29uZmlndXJlIHRoZSBuZXR3b3JrXFxuIDEyODpcXHRcXHQgIGluIHRoZWlyIHN0YXJ0dXAgc2NyaXB0cy5cXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxNi44MzQwNjY2ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDEzNjU4ODc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmU6IElQdjQgYW5kIElQdjYgUm91dGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYG5ldC9pcHY0L0tjb25maWdgIGlzIG5lc3RlZCB1bmRlciB0aGUgYFwiSVA6IFRDUC9JUCBuZXR3b3JraW5nXCJgIG1lbnUsIGFuZCB0aGF0ICptZW51KiBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCBJUHY0IHJvdXRlIG1hbmFnZW1lbnQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGZvciBpdCwgcmVxdWlyZXMgdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuXG5cblRoZW4gSSBtb3ZlIG9udG8gYG5ldC9pcHY2L0tjb25maWdgLiBJIHNlZSBhIHNpbWlsYXIgcGF0dGVybiB3aXRoIGBJUFY2YC4gIGBJUFY2YCBlbmFibGVzIElQdjYgc3VwcG9ydC4gSSBhbHNvIHNlZSBhIGNvbmZpZyB2YXJpYWJsZSwgYElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCwgYW5kIGl0cyBhc3NvY2lhdGVkIHBhcmFtZXRlcnMuIFRoYXQgY29uZmlybXMgdGhhdCBJUHY2IHJvdXRpbmcgYWxzbyByZWxpZXMgb24gYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuU28sIHRvIGJlIGV4cGxpY2l0LCBgQ09ORklHX0lORVRgICppcyogbmVlZGVkIGZvciBJUHY0IHJvdXRlIGZ1bmN0aW9uYWxpdHksIGFuZCBgQ09ORklHX0lQVjZgIGlzIHJlcXVpcmVkIGZvciBJUHY2IHJvdXRlIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gQXJlIGBJTkVUYCBhbmQgYElQVjZgIHRydWx5IHRoZSBzdGFuZGFyZCwgZnVuZGFtZW50YWwgY29uZmlncyBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHk/IEluIG15IGV4cGVyaWVuY2UsIHRoYXQncyB0eXBpY2FsbHkgdGhlIGNhc2UgaW4gYSBMaW51eCBrZXJuZWwuIEJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgd29ydGh3aGlsZS5cblxuVG8gbmFpbCB0aGlzIGRvd24sIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L01ha2VmaWxlYCBmaWxlcy4gVGhlc2UgTWFrZWZpbGVzIG9mdGVuIGNvbnRhaW4gY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzZXMsIHdoaWNoIHNob3VsZCBmdXJ0aGVyIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNvbmZpZyBvcHRpb25zIGFuZCB0aGUgcm91dGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjIwLjk3MDY1Nzc2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjg1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb3V0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MDYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC82bG93cGFuL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX0ZSQUcpICs9IG5oY19naGNfZXh0X2ZyYWcub1xcbm5ldC82bG93cGFuL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX1JPVVRFKSArPSBuaGNfZ2hjX2V4dF9yb3V0ZS5vXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTMzMT1icl9uZl9pcHY0X2RhZGRyX3dhc19jaGFuZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2OC0gKiBJZiBJUCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZmFpbCwgd2hpbGVcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM2OTogKiBpcF9yb3V0ZV9vdXRwdXRfa2V5KCkgY2FuIHJldHVybiBzdWNjZXNzLiBUaGUgc291cmNlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozNzA6ICogYWRkcmVzcyBmb3IgaXBfcm91dGVfb3V0cHV0X2tleSgpIGlzIHNldCB0byB6ZXJvLCBzbyBpcF9yb3V0ZV9vdXRwdXRfa2V5KClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3MS0gKiB0aGlua3Mgd2UncmUgaGFuZGxpbmcgYSBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXQgYW5kIHdvbid0IGNhcmVcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzczLSAqIGRldmljZSwgd2UgcHJvY2VlZCBhcyBpZiBpcF9yb3V0ZV9pbnB1dCgpIHN1Y2NlZWRlZC4gSWYgaXQgZGlmZmVycyBmcm9tIHRoZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzc0OiAqIGxvZ2ljYWwgYnJpZGdlIHBvcnQgb3IgaWYgaXBfcm91dGVfb3V0cHV0X2tleSgpIGZhaWxzIHdlIGRyb3AgdGhlIHBhY2tldC5cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3NS0gKi9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19CUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZKSArPSBlYnRhYmxlcy5vXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xNC0jIHRhYmxlc1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgKz0gZWJ0YWJsZV9icm91dGUub1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSArPSBlYnRhYmxlX2ZpbHRlci5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMzgwPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjM5OTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXFx1MDAyNmZsNCwgTlVMTCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjQwMC1cXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTIyMS1cXG5uZXQvY29yZS9sd3RfYnBmLmM6MjIyOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9jb3JlL2x3dF9icGYuYy0yMjMtXFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTUtXFxubmV0L2lwdjQvTWFrZWZpbGU6NjpvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTMxND1pbnQgaW5ldF9za19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTMyNy1cXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIGZsNCk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjEzMjg6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIGZsNCwgc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzI5LVxcdGlmICghSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9NDU1PXN0YXRpYyBpbnQgYXJwX2ZpbHRlcihfX2JlMzIgc2lwLCBfX2JlMzIgdGlwLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtNDYxLVxcbm5ldC9pcHY0L2FycC5jOjQ2MjpcXHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIHNpcCwgdGlwLCAwLCBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldiksXFxubmV0L2lwdjQvYXJwLmMtNDYzLVxcdFxcdFxcdCAgICAgUlRfU0NPUEVfVU5JVkVSU0UpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTAzOD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmFycF9yZXFfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqcilcXG4tLVxcbm5ldC9pcHY0L2FycC5jLTEwNTEtXFxubmV0L2lwdjQvYXJwLmM6MTA1MjpcXHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIGlwLCAwLCAwLCAwLCBSVF9TQ09QRV9MSU5LKTtcXG5uZXQvaXB2NC9hcnAuYy0xMDUzLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvZGF0YWdyYW0uYz0xMDI9dm9pZCBpcDRfZGF0YWdyYW1fcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9kYXRhZ3JhbS5jLTExNy1cXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L2RhdGFncmFtLmM6MTE4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvZGF0YWdyYW0uYy0xMTktXFx0ZHN0ID0gIUlTX0VSUihydCkgPyBcXHUwMDI2cnQtXFx1MDAzZWRzdCA6IE5VTEw7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9NDE2PXN0YXRpYyB2b2lkIGljbXBfcmVwbHkoc3RydWN0IGljbXBfYnhtICppY21wX3BhcmFtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTQ2NC1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXFx1MDAyNmZsNCkpO1xcbm5ldC9pcHY0L2ljbXAuYzo0NjU6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaWNtcC5jLTQ2Ni1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz00OTQ9c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTUxOS1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2JfaW4sIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XFxubmV0L2lwdjQvaWNtcC5jOjUyMDpcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaChuZXQsIGZsNCwgc2tiX2luKTtcXG5uZXQvaXB2NC9pY21wLmMtNTIxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTU0Ni1cXHRcXHRcXHRcXHQgICAgIGZsNF9kZWMuc2FkZHIpID09IFJUTl9MT0NBTCkge1xcbm5ldC9pcHY0L2ljbXAuYzo1NDc6XFx0XFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNF9kZWMpO1xcbm5ldC9pcHY0L2ljbXAuYy01NDgtXFx0XFx0aWYgKElTX0VSUihydDIpKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTU2Ni1cXG5uZXQvaXB2NC9pY21wLmM6NTY3OlxcdFxcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDRfMik7XFxubmV0L2lwdjQvaWNtcC5jLTU2OC1cXHRcXHRpZiAoSVNfRVJSKHJ0MikpIHtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTQyMC1cXG5uZXQvaXB2NC9pZ21wLmM6NDIxOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgSUdNUFYzX0FMTF9NQ1IsIDAsXFxubmV0L2lwdjQvaWdtcC5jLTQyMi1cXHRcXHRcXHRcXHQgICAwLCAwLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTc4Mj1zdGF0aWMgaW50IGlnbXBfc2VuZF9yZXBvcnQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTgwNy1cXG5uZXQvaXB2NC9pZ21wLmM6ODA4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgZHN0LCAwLFxcbm5ldC9pcHY0L2lnbXAuYy04MDktXFx0XFx0XFx0XFx0ICAgMCwgMCxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTg2PXN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXFx0aWYgKCFkZXYpIHtcXG5uZXQvaXB2NC9pZ21wLmM6MjAwMjpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dChuZXQsXFxubmV0L2lwdjQvaWdtcC5jLTIwMDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGltci1cXHUwMDNlaW1yX211bHRpYWRkci5zX2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc1OD1zdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NzYtXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6Nzc3OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc3OC1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzkzPXN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MTMtXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODE0OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgxNS1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTU0MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcmVidWlsZF9yb3V0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NDktXFx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBmbDQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTU1MDpcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNTUxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzYtICAgLSB0cmFjZXJvdXRlIGRvZXMgbm90IHdvcmsuIEkgcGxhbm5lZCB0byByZWxheSBJQ01QIGZyb20gdHVubmVsLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjc3OiAgICAgc28gdGhhdCB0aGlzIHByb2JsZW0gd291bGQgYmUgc29sdmVkIGFuZCB0cmFjZXJvdXRlIG91dHB1dFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc4LSAgICAgd291bGQgZXZlbiBtb3JlIGluZm9ybWF0aXZlLiBUaGlzIGlkZWEgYXBwZWFyZWQgdG8gYmUgd3Jvbmc6XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzOS1cXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwga2V5LVxcdTAwM2VmbG93X2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDA6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNjQxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTQxPXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTU2LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjk1NzpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy05NTgtXFx0XFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDAtXFx0XFx0XFx0XFx0aWYgKElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KSlcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjMwMTpcXHRcXHRcXHRcXHRcXHRuZXRfaW5mb19yYXRlbGltaXRlZChcXFwic291cmNlIHJvdXRlIG9wdGlvbiAlcEk0IC1cXHUwMDNlICVwSTRcXFxcblxcXCIsXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy0zNC0gKiBXcml0ZSBvcHRpb25zIHRvIElQIGhlYWRlciwgcmVjb3JkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG9cXG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6MzU6ICogc291cmNlIHJvdXRlIG9wdGlvbiwgYWRkcmVzcyBvZiBvdXRnb2luZyBpbnRlcmZhY2VcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtMzYtICogKHdlIHNob3VsZCBhbHJlYWR5IGtub3cgaXQsIHNvIHRoYXQgdGhpcyAgZnVuY3Rpb24gaXMgYWxsb3dlZCBiZVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NDYyPWludCBfX2lwX3F1ZXVlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk0LVxcdFxcdCAqL1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjQ5NTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk2LVxcdFxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTYwNT12b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvcmlnX3NrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTY0OC1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXFx1MDAyNmZsNCkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NDk6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIFxcdTAwMjZmbDQsIHNrKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjUwLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDYtXFx0fVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTQ3OlxcdGlmIChpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ4LVxcdFxcdHJldHVybiBpcF9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDA5PWludCBpcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyMi1cXHRcXHRcXHRvcHRuYW1lICE9IElQX1hGUk1fUE9MSUNZIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDIzOlxcdFxcdFxcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyNC1cXHRcXHRlcnIgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTE3LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTUxODpcXHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MTktXFx0XFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE3NjA9aW50IGlwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NzAtXFx0aWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSAhPSBJUF9QS1RPUFRJT05TIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzcxOlxcdFxcdFxcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzcyLVxcdFxcdGludCBsZW47XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI5OS1cXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5saW5rLCB0dW5uZWwtXFx1MDAzZWZ3bWFyaywgMCwgMCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzAwOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NTY5PXZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYxMS1cXHRpZiAoIXJ0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjEyOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjEzLVxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz02Njc9dm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNzc5LVxcdGlmICghcnQpIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3ODA6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03ODEtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz0xNjk9c3RhdGljIG5ldGRldl90eF90IHZ0aV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYy0xODYtXFx0XFx0XFx0ZmwtXFx1MDAzZXUuaXA0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcXG5uZXQvaXB2NC9pcF92dGkuYzoxODc6XFx0XFx0XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCBcXHUwMDI2ZmwtXFx1MDAzZXUuaXA0KTtcXG5uZXQvaXB2NC9pcF92dGkuYy0xODgtXFx0XFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTE5OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDYuZmxvd2k2X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY0L2lwX3Z0aS5jOjIwMDpcXHRcXHRcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgXFx1MDAyNmZsLVxcdTAwM2V1LmlwNik7XFxubmV0L2lwdjQvaXBfdnRpLmMtMjAxLVxcdFxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzU2PXN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM3MS1cXG5uZXQvaXB2NC9pcGlwLmM6MzcyOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KGRldl9uZXQoY3R4LVxcdTAwM2VkZXYpLCB0aXBoLVxcdTAwM2VkYWRkciwgdGlwaC1cXHUwMDNlc2FkZHIsXFxubmV0L2lwdjQvaXBpcC5jLTM3My1cXHRcXHRcXHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXFx1MDAzZXRvcyksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwMj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cXHRpZiAodmlmLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfVFVOTkVMKSB7XFxubmV0L2lwdjQvaXBtci5jOjE5MjY6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcXHUwMDI2Zmw0LCBOVUxMLFxcbm5ldC9pcHY0L2lwbXIuYy0xOTI3LVxcdFxcdFxcdFxcdFxcdCAgIHZpZi1cXHUwMDNlcmVtb3RlLCB2aWYtXFx1MDAzZWxvY2FsLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTE5MzQtXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcG1yLmM6MTkzNTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIFxcdTAwMjZmbDQsIE5VTEwsIGlwaC1cXHUwMDNlZGFkZHIsIDAsXFxubmV0L2lwdjQvaXBtci5jLTE5MzYtXFx0XFx0XFx0XFx0XFx0ICAgMCwgMCxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci5jPTIyPWludCBpcF9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhZGRyX3R5cGUpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy01My1cXHRmaWI0X3J1bGVzX2Vhcmx5X2Zsb3dfZGlzc2VjdChuZXQsIHNrYiwgXFx1MDAyNmZsNCwgXFx1MDAyNmZsa2V5cyk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmM6NTQ6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtNTUtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz05MT1pbnQgbmZfaXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtOTMte1xcbm5ldC9pcHY0L25ldGZpbHRlci5jOjk0OlxcdHN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbC1cXHUwMDNldS5pcDQpO1xcbm5ldC9pcHY0L25ldGZpbHRlci5jLTk1LVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMzgtXFx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6Mzk6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNDAtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9waW5nLmM9Njg4PXN0YXRpYyBpbnQgcGluZ192NF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvcGluZy5jLTc4Mi1cXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFxcdTAwMjZmbDQpKTtcXG5uZXQvaXB2NC9waW5nLmM6NzgzOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvcGluZy5jLTc4NC1cXHRpZiAoSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9NDg5PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy02MzUtXFx0c2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcXHUwMDI2Zmw0KSk7XFxubmV0L2lwdjQvcmF3LmM6NjM2OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvcmF3LmMtNjM3LVxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTUwLSAqXFx0Vml0YWx5IEUuIExhdnJvdlxcdDpcXHRSYWNlIGNvbmRpdGlvbiBpbiBpcF9yb3V0ZV9pbnB1dF9zbG93Llxcbm5ldC9pcHY0L3JvdXRlLmM6NTE6ICpcXHRUb2JpYXMgUmluZ3N0cm9tXFx0OlxcdFVuaW5pdGlhbGl6ZWQgcmVzLnR5cGUgaW4gaXBfcm91dGVfb3V0cHV0X3Nsb3cuXFxubmV0L2lwdjQvcm91dGUuYy01Mi0gKlxcdFZsYWRpbWlyIFYuIEl2YW5vdlxcdDpcXHRJUCBydWxlIGluZm8gKGZsb3dpZCkgaXMgcmVhbGx5IHVzZWZ1bC5cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTExNj12b2lkIGlwdjRfdXBkYXRlX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR1LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMTI1LVxcdFxcdFxcdCAwKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjExMjY6XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExMjctXFx0aWYgKCFJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTExMzQ9c3RhdGljIHZvaWQgX19pcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE0NC1cXG5uZXQvaXB2NC9yb3V0ZS5jOjExNDU6XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoc29ja19uZXQoc2spLCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExNDYtXFx0aWYgKCFJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTExNTI9dm9pZCBpcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE3Ni1cXHRpZiAoUkVBRF9PTkNFKG9kc3QtXFx1MDAzZW9ic29sZXRlKSBcXHUwMDI2XFx1MDAyNiAhb2RzdC1cXHUwMDNlb3BzLVxcdTAwM2VjaGVjayhvZHN0LCAwKSkge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTE3NzpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgXFx1MDAyNmZsNCwgc2spO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTE3OC1cXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE4OS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjExOTA6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIFxcdTAwMjZmbDQsIHNrKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExOTEtXFx0XFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTEyMDU9dm9pZCBpcHY0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTIxMi1cXHRfX2J1aWxkX2Zsb3dfa2V5KG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgaXBoLCBvaWYsIGlwaC1cXHUwMDNldG9zLCBwcm90b2NvbCwgMCwgMCk7XFxubmV0L2lwdjQvcm91dGUuYzoxMjEzOlxcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvcm91dGUuYy0xMjE0LVxcdGlmICghSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMjIxPXZvaWQgaXB2NF9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEyMjgtXFx0X19idWlsZF9mbG93X2tleShuZXQsIFxcdTAwMjZmbDQsIHNrLCBpcGgsIDAsIDAsIDAsIDAsIDApO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTIyOTpcXHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTIzMC1cXHRpZiAoIUlTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjYwND1FWFBPUlRfU1lNQk9MKGlwX3JvdXRlX2lucHV0X25vcmVmKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjYwNi0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2NC9yb3V0ZS5jOjI2MDc6c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI2MDgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9yaWdfb2lmLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNzM1LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjczNjpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvcm91dGUuYy0yNzM3LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI3NDktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY0L3JvdXRlLmM6Mjc1MDpcXHRydGggPSBpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KG5ldCwgZmw0LCBcXHUwMDI2cmVzLCBza2IpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjc1MS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjc1NC19XFxubmV0L2lwdjQvcm91dGUuYzoyNzU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaCk7XFxubmV0L2lwdjQvcm91dGUuYy0yNzU2LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjc1NzpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L3JvdXRlLmMtMjc1OC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjkxOS1tYWtlX3JvdXRlOlxcbm5ldC9pcHY0L3JvdXRlLmM6MjkyMDpcXHRydGggPSBfX21rcm91dGVfb3V0cHV0KHJlcywgZmw0LCBvcmlnX29pZiwgZGV2X291dCwgZmxhZ3MpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjkyMS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjkzNz1zdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yOTczLVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk3NDpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscDQsXFxubmV0L2lwdjQvcm91dGUuYy0yOTc1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvcm91dGUuYy0yOTc2LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjI5Nzc6XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbHA0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NzgtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI5OTAtfVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk5MTpFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XFxubmV0L2lwdjQvcm91dGUuYy0yOTkyLVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0zMzM1PXN0YXRpYyBpbnQgaW5ldF9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM0MjItXFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBuZXQtXFx1MDAzZWxvb3BiYWNrX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjM0MjM6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KG5ldCwgXFx1MDAyNmZsNCwgXFx1MDAyNnJlcywgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTM0MjQtXFx0XFx0ZXJyID0gMDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzY5Mj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MDEtXFxubmV0L2lwdjQvcm91dGUuYzozNzAyOnN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX3JvdXRlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MDMtXFx0LmluaXQgPSBzeXNjdGxfcm91dGVfbmV0X2luaXQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzItI2lmZGVmIENPTkZJR19TWVNDVExcXG5uZXQvaXB2NC9yb3V0ZS5jOjM4MzM6XFx0cmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2c3lzY3RsX3JvdXRlX29wcyk7XFxubmV0L2lwdjQvcm91dGUuYy0zODM0LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00NjctXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFxcdTAwMjZmbDQpKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NDY4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00NjktXFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTEyNDY9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQyMS1cXHRcXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L3VkcC5jOjE0MjI6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xcbm5ldC9pcHY0L3VkcC5jLTE0MjMtXFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jPTIyNT1zdHJ1Y3QgcnRhYmxlICp1ZHBfdHVubmVsX2RzdF9sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTI1NC1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYzoyNTU6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtMjU2LVxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0yMT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqX194ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTM2LVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jOjM3OlxcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHBhcmFtcy1cXHUwMDNlbmV0LCBmbDQpO1xcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTM4LVxcdGlmICghSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTIxMC1cXHQgKi9cXG5uZXQvaXB2Ni9pY21wLmM6MjExOlxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgZmw2KTtcXG5uZXQvaXB2Ni9pY21wLmMtMjEyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0yMzk9c3RhdGljIGJvb2wgaWNtcHY2X3J0X2hhc19wcmVmc3JjKHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0yNDUtXFxubmV0L2lwdjYvaWNtcC5jOjI0NjpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIGZsNik7XFxubmV0L2lwdjYvaWNtcC5jLTI0Ny1cXHRpZiAoIWRzdC1cXHUwMDNlZXJyb3IpIHtcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9Mzg9c3RhdGljIGludCBpbGFfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03Ny1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjc4OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTc5LVxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTMzOD1zdGF0aWMgaW50IGlvYW02X291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNDE2LVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NDE3OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTQxOC1cXHRcXHRpZiAoZHN0LVxcdTAwM2VlcnJvcikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTktICpcXHRDaGFuZ2VzOlxcbm5ldC9pcHY2L2lwNl9maWIuYzoxMDogKlxcdFl1amkgU0VLSVlBIEBVU0FHSTpcXHRTdXBwb3J0IGRlZmF1bHQgcm91dGUgb24gcm91dGVyIG5vZGU7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExLSAqXFx0XFx0XFx0XFx0cmVtb3ZlIGlwNl9udWxsX2VudHJ5IGZyb20gdGhlIHRvcCBvZlxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTExMzc9c3RhdGljIGludCBpcDZfZHN0X2xvb2t1cF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNDctXFx0LyogVGhlIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRvIGRvXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNDg6XFx0ICogaXA2X3JvdXRlX2dldF9zYWRkciwgYW5kIHRoZW4gaXA2X3JvdXRlX291dHB1dDsgaG93ZXZlcixcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE0OS1cXHQgKiB0aGUgcm91dGUtc3BlY2lmaWMgcHJlZmVycmVkIHNvdXJjZSBmb3JjZXMgdGhlXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTA6XFx0ICogaXA2X3JvdXRlX291dHB1dCBjYWxsIF9iZWZvcmVfIGlwNl9yb3V0ZV9nZXRfc2FkZHIuXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNTEtXFx0ICpcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1Mi1cXHQgKiBJbiBzb3VyY2Ugc3BlY2lmaWMgcm91dGluZyAobm8gc3JjPWFueSBkZWZhdWx0IHJvdXRlKSxcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE1MzpcXHQgKiBpcDZfcm91dGVfb3V0cHV0IHdpbGwgZmFpbCBnaXZlbiBzcmM9YW55IHNhZGRyLCB0aG91Z2gsIHNvXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNTQtXFx0ICogdGhhdCdzIHdoeSB3ZSB0cnkgaXQgYWdhaW4gbGF0ZXIuXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1OS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE2MDpcXHRcXHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTYxLVxcdFxcdHJ0ID0gKCpkc3QpLVxcdTAwM2VlcnJvciA/IE5VTEwgOiBkc3RfcnQ2X2luZm8oKmRzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE4Ny1cXHRpZiAoISpkc3QpXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExODg6XFx0XFx0KmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCBmbGFncyk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExODktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTIyOS1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmZsX2d3Ni5kYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMjMwOlxcdFxcdFxcdCpkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFxcdTAwMjZmbF9ndzYpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMjMxLVxcdFxcdFxcdGVyciA9ICgqZHN0KS1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9NTY3PWlwNGlwNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjIyLVxcdC8qIFRyeSB0byBndWVzcyBpbmNvbWluZyBpbnRlcmZhY2UgKi9cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjIzOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBcXHUwMDI2Zmw0LCBOVUxMLCBlaXBoLVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjI0LVxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIElQUFJPVE9fSVBJUCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MzMtXFx0aWYgKHJ0LVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpIHtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjM0OlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBcXHUwMDI2Zmw0LCBOVUxMLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MzUtXFx0XFx0XFx0XFx0XFx0ICAgZWlwaC1cXHUwMDNlZGFkZHIsIGVpcGgtXFx1MDAzZXNhZGRyLCAwLCAwLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTE3OS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTE4MDpcXHRcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgZmw2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTE4MS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODM5PXN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjQtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NjU6XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC1cXHUwMDNlZGV2KSwgTlVMTCwgXFx1MDAyNmZsNik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjYtXFx0aWYgKCFkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9NDQzPXZ0aTZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ1OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY2L2lwNl92dGkuYzo0NjA6XFx0XFx0XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCBcXHUwMDI2ZmwtXFx1MDAzZXUuaXA0KTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtNDYxLVxcdFxcdFxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ2OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDYuZmxvd2k2X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY2L2lwNl92dGkuYzo0NzA6XFx0XFx0XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KGRldiksIE5VTEwsIFxcdTAwMjZmbC1cXHUwMDNldS5pcDYpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy00NzEtXFx0XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MjA4Mj1zdGF0aWMgaW50IGlwNm1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yMTEyLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjExMzpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXFx1MDAyNmZsNik7XFxubmV0L2lwdjYvaXA2bXIuYy0yMTE0LVxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5NS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzk2OlxcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzk3LVxcdFxcdHJldHVybiBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTk9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwNS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwNjpcXHRpZiAoaXA2X21yb3V0ZV9vcHQob3B0bmFtZSkpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDctXFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xNjY0PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTcwMS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDI6XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFxcdTAwMjZmbDYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTcwMy1cXHRpZiAoZHN0LVxcdTAwM2VlcnJvcikge1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM9MjQ9aW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2tfcGFydGlhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci5jLTQ5LVxcdGZpYjZfcnVsZXNfZWFybHlfZmxvd19kaXNzZWN0KG5ldCwgc2tiLCBcXHUwMDI2Zmw2LCBcXHUwMDI2ZmxrZXlzKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo1MDpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFxcdTAwMjZmbDYpO1xcbm5ldC9pcHY2L25ldGZpbHRlci5jLTUxLVxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz04OT1pbnQgX19uZl9pcDZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTMtXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgZmFrZV9zayA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo5NDpcXHRcXHQvKiBtYWtlcyBpcDZfcm91dGVfb3V0cHV0IHNldCBSVDZfTE9PS1VQX0ZfSUZBQ0U6ICovXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTUtXFx0XFx0LnNrLnNrX2JvdW5kX2Rldl9pZiA9IDEsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy0xMDEtXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM6MTAyOlxcdHJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgXFx1MDAyNmZsLVxcdTAwM2V1LmlwNik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtMTAzLVxcdGVyciA9IHJlc3VsdC1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYz0xOT1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0zMy1cXHRmbDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjEuOTk3NTIxMzkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2ODIzNTU3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSWRlbnRpZnlpbmcgS2V5IEZ1bmN0aW9ucyBhbmQgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIHdpdGhpbiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyByb3V0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBsaXN0cyBmb3IgSVB2NCBhbmQgSVB2Ni5cblxuRmlyc3QsIGxvb2tpbmcgYXQgYG5ldC9pcHY0L3JvdXRlLmNgLCBJIHNlZSB0aGF0IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IG5vdyBjYWxjdWxhdGVzIHRoZSBoYXNoIGJ1Y2tldCB1c2luZyBgZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpYCBhbmQgc3RvcmVzIGl0IGluIGBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdGAuIEFsc28sIGBydF9mbHVzaF9kZXZgIGlzIG1vZGlmaWVkIHRvIGZsdXNoIGZyb20gYSBzcGVjaWZpYyBidWNrZXQuIFRoZW4sIGBpcF9ydF9pbml0YCBpcyBjaGFuZ2VkIHRvIGluaXRpYWxpemUgZWFjaCBidWNrZXQgaW4gdGhlIHRhYmxlIHBlciBDUFUuXG5cbk5leHQsIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgdGhlIGNoYW5nZXMgYXJlIGEgYml0IG1vcmUgaW50cmljYXRlLiBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJvdXRlJ3MgaW50ZXJmYWNlIGRldmljZSAoYHJ0LVx1MDAzZXJ0NmlfaWRldmApIGRvZXNuJ3QgbWF0Y2ggdGhlIHJvdXRlJ3MgZGV2aWNlIChgcnRfZGV2YCksIHBsYWNpbmcgdGhlIHJvdXRlIGluIGB0YWJsZS1cdTAwM2VtaXNtYXRjaGAgaWYgaXQgZG9lc24ndC4gT3RoZXJ3aXNlLCBpdCB1c2VzIHRoZSBzdGFuZGFyZCBidWNrZXQuIEEgbmV3IGhlbHBlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSBsYXR0ZXIgaXMgbW9kaWZpZWQgdG8gZmx1c2ggdGhlIG1hdGNoaW5nIGJ1Y2tldCBhbmQgYWxzbyBgdGFibGUtXHUwMDNlbWlzbWF0Y2hgLiBBbHNvLCBgaXA2X3JvdXRlX2luaXRgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIGJ1Y2tldCBhbmQgdGhlIG1pc21hdGNoIGxpc3QgcGVyIENQVS5cblxuTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBmYWN0IHRoYXQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgY2FsbGVkIGJ5IGBydDZfZGlzYWJsZV9pcGAg4oCTIHRoaXMgaXMgYSBrZXkgcG9pbnQgc2luY2UgdGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZzogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgc3RhdGljPyBJIGp1c3QgZm91bmQgb3V0LCB5ZXMsIGl0J3Mgc3RhdGljISBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBpcyBzdGF0aWMgYXMgd2VsbC4gQnV0IHdhaXQsIGhlcmUgaXMgYW4gaW1wb3J0YW50IHBvaW50IHRvIGNvbnNpZGVyLiBcblxuSG93ZXZlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgaXMgbm9uLXN0YXRpYyAoYSBnb29kIHRoaW5nISksIGFuZCBzbyBpcyBgcnQ2X2Rpc2FibGVfaXBgLiBTbyBpcyBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YC4gRXZlbiB0aG91Z2ggYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgc3RhdGljLCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB2bWxpbnV4IHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IGlubGluZWQgZXhpc3QgaW4ga2FsbHN5bXMgaWYgbm90IGlubGluZWQuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGd1aWRlbGluZXMgZnJvbSBTZWN0aW9uIDQsIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBvciBhcmUgdGhlIGVudHJ5cG9pbnRzIHRvIHRoZSBmZWF0dXJlLiBJdCBzYXlzIHRoYXQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlbid0IGRpcmVjdGx5IHRhcmdldGFibGUsIGJ1dCB3ZSBzaG91bGQgaWRlbnRpZnkgbm9uLXN0YXRpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhlbS5cblxuU28sIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgYW5kIGBydF9mbHVzaF9kZXZgIGFyZSBleHBvcnRlZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvcm91dGUuY2AuIEFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBub24tc3RhdGljIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gRmluYWxseSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgY2FsbGVkIGJ5IGBydDZfZGlzYWJsZV9pcGAgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBJdCdzIGltcG9ydGFudCB0byBrbm93IHRoZSBjYWxsIHN0cnVjdHVyZSBhbmQgZW50cnkgcG9pbnRzIGluIHRoZSBzeXN0ZW0uXG5cbk5vdywgYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZTogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjguNjc5ODc5MDI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwMDg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0xNzc9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMDgtXFxubmV0L2lwdjYvcm91dGUuYzoyMDk6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvcm91dGUuYy0yMTAte1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDgwLVxcdG5laWdoX2lmZG93bihuZF90YWJsZShuZXQpLCBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOC43Mjc0ODc0NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5MDY5MjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVW5jYWNoZWQgUm91dGUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCB3YXMgZGlyZWN0bHkgYWx0ZXJlZC4gR29vZCwgaXQgd2Fzbid0LiBIb3dldmVyLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hgIHdhcyBpbnRyb2R1Y2VkIGFzIGEgaGVscGVyIGZ1bmN0aW9uIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgYW5kIGltcG9ydGFudGx5LCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3YXMgbW9kaWZpZWQsIGFuZCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBub24tc3RhdGljIGNhbGxlciBvZiBpdC5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gIEknbGwgcXVpY2tseSBjaGVjayBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YCBpbiBgbmV0L2lwdjQvcm91dGUuY2AgLS0gdGhleSdyZSBub24tc3RhdGljLiBBbmQgd2hpbGUgSSdtIGF0IGl0LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AgaXMgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuXG5cbk5leHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdGVzdCBzdWl0ZS4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBicmVhayBhbnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIHRlc3QgYHRlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpYCBsb29rcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGl0J3MgZm9jdXNpbmcgb24gbG9jYWwgcm91dGVzIHRocm91Z2ggYSBWUkYsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHRoZSBzY2VuYXJpbyBvZiBhIFZSRiBiZWluZyB1c2VkIGFzIGBkc3QuZGV2YCB3aGlsZSByZXRhaW5pbmcgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIGBydDZpX2lkZXZgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSByYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZCByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgZHVyaW5nIGludGVyZmFjZSBkZWxldGlvbi5cblxuRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBjaGVjayBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBJIHNlZSB0aGF0IHRoZSBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBjb25maWcgb3B0aW9ucyBleGlzdCBpbiBib3RoIHRoZSBJUHY0IGFuZCBJUHY2IEtjb25maWcgZmlsZXMsIGFuZCBhcmUgY29uZGl0aW9uYWwgb24gYElORVRgIGFuZCBgSVBWNmAsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBkZXBlbmRlbmN5LiBJdCdzIGltcG9ydGFudCB0byBjb25maXJtIHRoYXQgSVB2NCBhbmQgSVB2NiByb3V0ZSBoYXNoIGNvbmZpZ3VyYXRpb25zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuIEkgd2lsbCBhbHNvIGNoZWNrIHdoZXJlIGBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGlzIGRlZmluZWQgaW4gYG5ldC9pcHY0L0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTozMy4zMTgxODM0NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSVBfTVVMVElDQVNUXFxuICAgNjpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvZGUgZm9yIGFkZHJlc3Npbmcgc2V2ZXJhbCBuZXR3b3JrZWQgY29tcHV0ZXJzIGF0IG9uY2UsXFxuICAgOTpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyIEtCLiBZb3UgbmVlZCBtdWx0aWNhc3RpbmcgaWYgeW91XFxuICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG4gIDIxOlxcdFxcdCAgY29udHJvbCBhYm91dCB0aGUgcm91dGluZyBwcm9jZXNzLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24ndCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcXG4gIDI0OlxcdFxcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAyNTpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTozMy4zMTgyNzIyNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU5MTQyNTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBVbmNhY2hlZCBSb3V0ZSBMb2dpYyBDaGFuZ2VzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gZXhhbWluaW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZXMsIHNwZWNpZmljYWxseSB0aGUgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBhbmQgZm9jdXMgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCBgbmV0L0tjb25maWdgLCBpdCdzIGNsZWFyIHRoYXQgYElORVRgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBJUHY0IGFuZCBgSVBWNmAgZm9yIElQdjYgcm91dGluZy4gVGhlc2UgYXJlIHRoZSB0b3AtbGV2ZWwgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGNvZGUgZGlyZWN0bHkgbW9kaWZpZXMgZmlsZXMgd2l0aGluIGBuZXQvaXB2NGAgYW5kIGBuZXQvaXB2NmAsIHNvIHRoZXkncmUgZXNzZW50aWFsLiBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBhbmQgYElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBhcmUgYWxzbyBkZWZpbmVkLCBidXQgdGhleSBoYXZlIGRlZmF1bHRzLCBzbyBlbmFibGluZyBgSU5FVGAgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB2YWxpZGF0ZWQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvTWFrZWZpbGVgLCB3aGljaCBjb25maXJtcyB0aGF0IHRoZSBgaXB2NGAgYW5kIGBpcHY2YCBzdWJkaXJlY3RvcmllcyBhcmUgaW5jbHVkZWQgYmFzZWQgb24gdGhlc2UgYENPTkZJR19gIGZsYWdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBoYW5kbGVkLCBzbyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVpciBhZGRpdGlvbiBhbmQgZmx1c2hpbmcgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYC4gQWx0aG91Z2ggYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgYXJlIHN0YXRpYywgYHJ0Nl9kaXNhYmxlX2lwYCB0aGF0IGNhbGxzIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIGV4cG9ydGVkLCBzbyBJIGNhbiBpbmNsdWRlIHRoZW0uIFRoZSBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCBmdW5jdGlvbiB3YXNuJ3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgYm9vdC10aW1lIGBfX2luaXRgIGZ1bmN0aW9ucywgbGlrZSBgaXBfcnRfaW5pdGAsIGFyZSBsZXNzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB0aGUgcGF0Y2ggdGFyZ2V0cyBydW50aW1lIGJlaGF2aW9yLlxuXG5TbywgaGVyZSdzIG15IGxpc3Qgb2YgZm9jdXNlZCBzeW1ib2xzOiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hgLCBhbmQgYHJ0Nl9kaXNhYmxlX2lwYC4gTm9uZSBvZiB0aGVzZSBzZWVtIHRvIGJlIGdlbmVyYWwtcHVycG9zZSBob3QtcGF0aCBvciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgdG8gdGhlIHVuY2FjaGVkIHJvdXRlIGZ1bmN0aW9uYWxpdHkuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIuIENvbnNpZGVyaW5nIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVB2NC9JUHY2IG5ldHdvcmtpbmcgY29kZSwgYWx0ZXJzIHRoZSBmdW5kYW1lbnRhbCB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSAoZnJvbSBwZXItY3B1IGxpc3RzIHRvIHBlci1jcHUgaGFzaCB0YWJsZXMsIHdpdGggYSBzcGVjaWFsIGNhc2UgZm9yIElQdjYpLCBhbmQgdGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCB2aXJ0dWFsIGRldmljZSBtYW5pcHVsYXRpb24gKGxpa2UgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGludGVyZmFjZXMgd2hpbGUgc2VuZGluZyB0cmFmZmljKSwgaXQncyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIFRoZSBjb2RlIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgYXJlOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSU5FVFwiLCBcIklQVjZcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLCBcInJ0X2ZsdXNoX2RldlwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsIFwicnQ2X2Rpc2FibGVfaXBcIl1gXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBsb2dpYy4gSXQgcmVzdHJ1Y3R1cmVzIHRoZSB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSwgaGFuZGxpbmcgcm91dGUgYWRkaXRpb24sIGhhc2hpbmcsIGFuZCBmbHVzaGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JraW5nIHN5c2NhbGxzIGFuZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDk2LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo0MS45MDk3MDA0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU3MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjQxLjk4OTI4MTI2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NzExNzk2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo0MS45ODk4MDMyNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzY3MDY1MjgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgcGVyLUNQVSB0YWJsZXMgd2hvc2UgYnVja2V0cyAobGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QgaW4gaXBfcnRfaW5pdCgpIGFuZCBpcDZfcm91dGVfaW5pdCgpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zIGNoYW5nZXMpLCBhbmQgY29udGFpbnMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBcXG5cXG5BbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgbGlzdCBoYW5kbGluZywgbG9ja2luZywgb3IgZGV2aWNlIHJlZmVyZW5jZSB0cmFja2luZyAoc3VjaCBhcyByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZjb3VudCB0cmFja2luZy4gQ29uc2VxdWVudGx5LCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXG5pbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvS2NvbmZpZ1xuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xuQEAgLTEwMyw2ICsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcbiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRFxuIFx0Ym9vbFxuIFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbitcdGludCBcIklQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCJcbitcdHJhbmdlIDEgMTBcbitcdGRlZmF1bHQgNlxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXG4rXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQX1BOUFxuIFx0Ym9vbCBcIklQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgKzc0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKVxuK1xuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4rXHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1ODgsMTQgKzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuK1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xuaW5kZXggYzM4MDZjNmFjOTZmOS4uMDI1MzE3ODY2OGJkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L0tjb25maWdcbisrKyBiL25ldC9pcHY2L0tjb25maWdcbkBAIC0xOCw2ICsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4rY29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTXG4rXHRpbnQgXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wiXG4rXHRyYW5nZSAxIDEwXG4rXHRkZWZhdWx0IDZcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZFxuK1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTQwLDYgKzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgKzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTtcbisjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuK1x0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0aWYgKHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXYpXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4rXHRlbHNlXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihydF9kZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuK1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdGludCBidWNrZXQ7XG4rXG4rXHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcbitcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0fVxuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gubG9jayk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5AQCAtMzg1LDYgKzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuK3tcbitcdGxvY2FsIHNlbmRlcl9waWRcbitcdGxvY2FsIGJhY2tsb2dcbitcdGxvY2FsIHJjXG4rXG4rXHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbitcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcbitcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbitcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbitcdGlwIC02IC1uZXRucyBcIiRob3N0MVwiIHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIC4vbXNnX3plcm9jb3B5IC02IFxcXG4rXHRcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcbitcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuK1x0c2VuZGVyX3BpZD0kIVxuK1x0d2FpdCBcIiRzZW5kZXJfcGlkXCJcbitcdHJjPSQ/XG4rXHRsb2dfdGVzdCAkcmMgMCBcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rXHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbitcbitcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFwiJGhvc3QxXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuK1x0aWYgISBlY2hvIFwiJGJhY2tsb2dcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cbitcdFx0bG9nX3Rlc3QgMSAwIFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1wiXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGxvZ190ZXN0IDAgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1xuK1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCJcbit9XG4rXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcIlxuIHJ1bl90ZXN0c1xuIFxuK2VjaG9cbitlY2hvIFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXG4rXG4gcHJpbnRmIFwiXFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cIiAke25zdWNjZXNzfVxuIHByaW50ZiBcIlRlc3RzIGZhaWxlZDogJTNkXFxuXCIgICAke25mYWlsfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDEuOTg5ODA0NDQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MDA4MTY1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogVW5jYWNoZWQgUm91dGUgSGFzaGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoYXQncyBhIHNlcmlvdXMgY29tbWl0bWVudCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgaGFzaGVkIGFwcHJvYWNoIHRvIG1hbmFnaW5nIFwidW5jYWNoZWRcIiByb3V0ZXMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgcGVyLUNQVSBsaW5rZWQgbGlzdC4gVGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBgbmV0L2lwdjQvcm91dGUuY2AsIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgYW5kIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBvcHRpb25zLCBwbHVzIGEgbmV3IHNlbGZ0ZXN0LiBUaGUgY29yZSBpZGVhIGlzIHRvIGhhc2ggdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSByb3V0ZSB0byBkZXRlcm1pbmUgd2hpY2ggcGVyLUNQVSBidWNrZXQgaXQgYmVsb25ncyB0bywgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIG9wZXJhdGlvbnMgbGlrZSBmbHVzaGluZy5cblxuTm93LCBJIGhhdmUgdG8gYXBwbHkgdGhlIHJ1bGVzIGluIG15IGhlYWQ6ICpJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/KiBJIGtub3cgdGhhdCdzIHRoZSBvbmx5IGp1c3RpZmljYXRpb24gZm9yIEtNU0FOLiBJIG5lZWQgdG8gbG9vayBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhdGNoIG1pZ2h0IGNyZWF0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd291bGQgb25seSBiZSBjYXVnaHQgYnkgS01TQU4uIFRoaW5ncyBsaWtlOlxuXG4xLiAgU3RydWN0dXJlcyBnb2luZyB0byB1c2VyIHNwYWNlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBQb3RlbnRpYWwgYnVmZmVyIG92ZXJydW5zIG9yIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuXG5cblNvLCBsZXQncyBnbyBsaW5lIGJ5IGxpbmUsIHRoaW5raW5nIGxpa2UgYSBjb21waWxlciBhbmQgbWVtb3J5IGluc3BlY3Rvci5cbiogICBBcmUgYW55IG9mIHRoZXNlIHN0cnVjdHVyZXMgKGUuZy4sIGBydF91bmNhY2hlZF9saXN0YCBvciBgcnQ2X3VuY2FjaGVkX2xpc3RgKSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGVzZSBhcmUgYWxsIGludGVybmFsIHJvdXRpbmcgbGlzdHMgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhleSBhcmUgc3RvcmVkIGluIHBlci1DUFUgdmFyaWFibGVzIGFuZCBlbWJlZGRlZCBpbnRvIGRzdCBlbnRyaWVzLlxuKiAgIEFyZSB0aGUgcGVyLUNQVSB2YXJpYWJsZXMgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCBpbmRpY2F0ZXMgKnN0YXRpYyogcGVyLUNQVSBhbGxvY2F0aW9uLiBUaGF0IG1lYW5zIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VnbWVudCwgd2hpY2ggaXMgKnplcm8taW5pdGlhbGl6ZWQqIGJ5IHRoZSBsaW5rZXIvbG9hZGVyLiBTbywgbm8gY29uY2VybnMgdGhlcmUuXG4qICAgQnV0IGl0J3Mgbm90IGVub3VnaCB0byByZWx5IG9uIHN0YXRpYyB6ZXJvLWluaXRpYWxpemF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGluZ3MgYW55d2F5LiBBbmQgeWVzLCBpbiBgaXBfcnRfaW5pdGAgYW5kIGBpcDZfcm91dGVfaW5pdGAgdGhlIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcyB3aXRoaW4gdGhlIGhhc2ggdGFibGUgYnVja2V0cywgdXNpbmcgYElOSVRfTElTVF9IRUFEYCBhbmQgYHNwaW5fbG9ja19pbml0YC4gVGhlIElQdjYgdmVyc2lvbiBhbHNvIGluaXRpYWxpemVzIHRoZSBgbWlzbWF0Y2hgIGxpc3QuXG5cblNvLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCB0aGVyZSBpc24ndCBhbnl0aGluZyBoZXJlIHRoYXQgY3JlYXRlcyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJpc2tzLiBUaGVzZSBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyBldmVyeXRoaW5nLiBUaGVyZSBpc24ndCBhbnkgXCJjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsXCIgbm8gcG90ZW50aWFsIGluZm8gbGVha3MsIGFuZCBubyBzdHJ1Y3R1cmVzIGdvaW5nIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgYWJvdXQgb3JnYW5pemF0aW9uIGFuZCBjb25jdXJyZW5jeS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBleHBlcnQga25vd2xlZGdlIGFuZCByaWdvcm91cyBldmFsdWF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTi1zcGVjaWZpYyByaXNrcy4gSSB3b3VsZCAqbm90KiByZWNvbW1lbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjUxLjU5MDYyNDA3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Nzc4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRfdW5jYWNoZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTU1OD1zdHJ1Y3QgdW5jYWNoZWRfdGFibGUge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNTYxLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2MjpzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NjMtXFxubmV0L2lwdjQvcm91dGUuYz0xNTY0PXZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXFxubmV0L2lwdjQvcm91dGUuYy0xNTY1LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NjY6XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFxcdTAwMjZydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTY3LVxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU3MS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzI6XFx0cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XFxubmV0L2lwdjQvcm91dGUuYy0xNTczLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU3NC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzU6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NzYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU3OT12b2lkIHJ0X2RlbF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU4MC17XFxubmV0L2lwdjQvcm91dGUuYzoxNTgxOlxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdDtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODItXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODQtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvcm91dGUuYzoxNTg1OlxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTU4Ni1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNTk2PXZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MDQtXFxubmV0L2lwdjQvcm91dGUuYzoxNjA1OlxcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTYwNi1cXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MTItXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvcm91dGUuYzoxNjEzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MTQtXFx0XFx0XFx0aWYgKGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpICE9IGRldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTYxOC1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvcm91dGUuYzoxNjE5OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTYyMC1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM3OTItXFxubmV0L2lwdjQvcm91dGUuYzozNzkzOlxcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMzc5NC1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTEuNjM5MjA5Nzk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MDAwNjY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgcHJvYmxlbXMpIHJlc2lkZSB3aGVuIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgSVB2NiByb3V0aW5nIGNhY2hlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdW5jYWNoZWQgcm91dGUgZW50cmllcyBhcmUgYmVpbmcgaGFuZGxlZCB0byBlbnN1cmUgY29ycmVjdG5lc3MsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFRoZSBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGVmZmljaWVuY3kgb2YgSVB2NiByb3V0aW5nIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo1My4zMzkyNzk4MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xcbiAxNTA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiAxNTE6XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbiAxNTQ6XFx0XFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoO1xcbiAxNTU6XFx0XFx0ZWxzZVxcbiAxNTY6XFx0XFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4gMTYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuIDE2MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHR2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0O1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRpZiAodWwpIHtcXG4gMTcxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNzI6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XFxuIDE3MzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNzQ6XFx0XFx0fVxcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXFxuIDE3ODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMTc5OlxcdHtcXG4gMTgwOlxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbiAxODM6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjUzLjMzOTUwOTg4M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjMyMDkwMjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlc2Ugcm91dGluZyB0YWJsZSBkZWxldGlvbiBmdW5jdGlvbnMsIGBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdGAgaXMgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGB1bGAgZHVyaW5nIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gU28sIGV2ZW4gaWYgdGhlIHJvdXRpbmcgZW50cnkgbGFuZHMgaW4gYSBkaWZmZXJlbnQgYnVja2V0IHRoYW4gZXhwZWN0ZWQsIHRoZSBkZWxldGlvbiBsb2dpYyBzaG91bGQgc3RpbGwgd29yayBmaW5lLiBUaGF0J3MgZ29vZC5cblxuVGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBgaXBfcnRfaW5pdCgpYCBhbmQgYGlwNl9yb3V0ZV9pbml0KClgLCBoYW5kbGUgdGhlIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gb2YgYWxsIHRoZSBgaGVhZGAgYW5kIGBsb2NrYCBmaWVsZHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhdGljLCBib290LXRpbWUgc3RydWN0dXJlcyBmb3IgdGhlIHBlci1DUFUgdGFibGVzLCBzbyBldmVyeXRoaW5nIHNob3VsZCBiZSBjbGVhbiBmcm9tIHRoZSBzdGFydC4gV2UncmUgaGFzaGluZyBgbmV0X2RldmljZWAgcG9pbnRlcnMgaGVyZS5cblxuQ3JpdGljYWxseSwgdGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLCBubyB1bmluaXRpYWxpemVkIHJlYWRzIGZyb20gdGhlIHN0YWNrIG9yIGhlYXAsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCB3aGljaCBtZWFucyBubyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaW4gdGhpcyBhcmVhLlxuXG5Mb29raW5nIGF0IHBvdGVudGlhbCBidWcgdmVjdG9ycywgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6XG4qICAgSGFzaCBjb2xsaXNpb25zIG9yIGxvb2t1cCBidWdzIOKAkyB0aGVzZSB3b3VsZCBiZSBsb2dpY2FsIGlzc3VlcyBpbiBob3cgd2UncmUgaGFzaGluZyB0aGluZ3MuXG4qICAgQ29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbG9ja2luZyBpc3N1ZXMg4oCTIExPQ0tERVAgc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhlc2UuXG4qICAgVXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgcHJvYmxlbXMgb24gdGhlIGRldmljZSBvciByb3V0aW5nIGVudHJ5IOKAkyB0aGVzZSBhcmUgS0FTQU4gYW5kIHRoZSByZWZjb3VudCBzYW5pdGl6ZXJzJyB0ZXJyaXRvcnkuXG4qICAgTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyDigJMgdGhlIGtlcm5lbCdzIHN0YW5kYXJkIGNoZWNrcyBzaG91bGQgaGFuZGxlIHRoZXNlLlxuXG5Ob25lIG9mIHRob3NlIGFyZSBzdWJ0bGUgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGV5IGFyZSBhbGwgZGV0ZWN0YWJsZSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMgYW5kIHJlcHJlc2VudCB0aGUgZ2VuZXJhbCBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdHkgdGhlIGV4aXN0aW5nIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGZpbmQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgYHNldC1yZXN1bHRzYCByZXF1aXJlbWVudHMgdG8gY29uZmlybS5cblxuKiAgIGBOZWVkc0tNU0FOYDogYm9vbGVhbiAoZmFsc2UpIC0gQ2hlY2suXG4qICAgYEtNU0FOUmVhc29uaW5nYDogc3RyaW5nIGV4cGxhaW5pbmcgd2h5IEtNU0FOIGlzIG5vdCBuZWVkZWQgYW5kIGNvbnRyYXN0aW5nIHdpdGggS0FTQU4vTE9DS0RFUCAtIENoZWNrLlxuXG5FdmVyeXRoaW5nIGlzIGNsZWFyLiBJJ20gY29uZmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxMCwiT3V0cHV0VG9rZW5zIjoyMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoyMDowNS42NjA0MTQ4MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHNpbmdsZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyAod2l0aCBhIG1pc21hdGNoIGxpc3QgZm9yIElQdjYpIHRvIG9wdGltaXplIGRldmljZSBmbHVzaGluZyBmb3IgSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXFxuXFxuQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IGxpc3QgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGRldmljZSByZWZlcmVuY2UgdHJhY2tpbmcgKHN1Y2ggYXMgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgdHJhY2tpbmcuIENvbnNlcXVlbnRseSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxcblxcbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwmj7c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 02:14:45 +0000 UTC FinishedAt: 2026-09-15 02:20:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "IPV6" ], "series_id": "b8feef7f-ae2b-4258-ac17-b8349622dc25" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rt_add_uncached_list", "rt_flush_dev", "rt6_uncached_list_add", "rt6_uncached_list_flush", "rt6_uncached_list_flush_dev", "rt6_disable_ip" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "879e280b8486d4612ad1aa050d6fada2dd80cf1c", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0X2FkZF91bmNhY2hlZF9saXN0JiMzNDssCiAgICAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2gmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXG5cbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFsdGVycyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb2RlIChuZXQvaXB2NC9yb3V0ZS5jIGFuZCBuZXQvaXB2Ni9yb3V0ZS5jKSBieSBjb252ZXJ0aW5nIHRoZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyBrZXllZCBieSBuZXRfZGV2aWNlIHBvaW50ZXJzIHRvIG9wdGltaXplIGRldmljZSBmbHVzaCBvcGVyYXRpb25zLiBJdCBhbHNvIGFkZHMgYSBtaXNtYXRjaCBsaXN0IGluIElQdjYgdG8gaGFuZGxlIHJvdXRlcyB3aGVyZSBydDZpX2lkZXYgZGlmZmVycyBmcm9tIGRzdC5kZXYgKGUuZy4sIFZSRiBjb25maWd1cmF0aW9ucykuIFRoZXNlIGNvZGUgcGF0aHMgYXJlIGV4ZXJjaXNlZCB3aGVuIHVuY2FjaGVkIHJvdXRlcyBhcmUgZ2VuZXJhdGVkIGFuZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgZGlzYWJsZWQgb3IgdW5yZWdpc3RlcmVkLCBtYWtpbmcgdGhlbSByZWFjaGFibGUgYW5kIHdlbGwgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZ1xuaW5kZXggMzAxYjQ3NjYwMzA1Yi4uN2Q0MGNhMjJkMmIyMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L0tjb25maWdcbkBAIC0xMDMsNiAmIzQzOzEwMywxOSBAQCBjb25maWcgSVBfUk9VVEVfVkVSQk9TRVxuIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXG4gXHRib29sXG4gXG4mIzQzO2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbiYjNDM7XHRpbnQgXCYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHNcJiMzNDtcbiYjNDM7XHRyYW5nZSAxIDEwXG4mIzQzO1x0ZGVmYXVsdCA2XG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZFxuJiM0MztcdCAgcm91dGUgaGFzaCB0YWJsZSB0byAyXklQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGVcbiYjNDM7XHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuJiM0MztcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcbiYjNDM7XHQgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxuJiM0MztcbiBjb25maWcgSVBfUE5QXG4gXHRib29sIFwmIzM0O0lQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cJiMzNDtcbiBcdGhlbHBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC03NCw2ICYjNDM7NzQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW5ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICYjNDM7MTU1MywyMSBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpO1xuJiM0MzsjZGVmaW5lIFJUX1VOQ0FDSEVEX0hBU0hfU0laRVx0QklUKENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdW5jYWNoZWRfdGFibGUge1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xuIFxuIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG4ge1xuLVx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XG4mIzQzO1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4mIzQzO1xuJiM0MztcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4mIzQzO1x0XHRcdFx0ICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTg4LDE0ICYjNDM7MTU5OSwxOSBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiYjNDM7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiBcbiBcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbi1cdFx0XHRpZiAocnQtXHUwMDNlZHN0LmRldiAhPSBkZXYpXG4mIzQzO1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgJiM0MzszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKVxuIFx0aXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuJiM0MztcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdGludCBidWNrZXQ7XG4mIzQzO1xuJiM0MztcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydF91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdGZvciAoYnVja2V0ID0gMDsgYnVja2V0IFx1MDAzYyBSVF9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1tidWNrZXRdO1xuIFxuLVx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbi1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSURcbiBcdGlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnXG5pbmRleCBjMzgwNmM2YWM5NmY5Li4wMjUzMTc4NjY4YmRmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvS2NvbmZpZ1xuQEAgLTE4LDYgJiM0MzsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4mIzQzO2NvbmZpZyBJUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xuJiM0MztcdGludCBcJiMzNDtJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wmIzM0O1xuJiM0MztcdHJhbmdlIDEgMTBcbiYjNDM7XHRkZWZhdWx0IDZcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY2IHVuY2FjaGVkXG4mIzQzO1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4mIzQzO1x0ICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXNcbiYjNDM7XHQgIHJlZHVjZSBjb2xsaXNpb25zLCBidXQgZWFjaCBhZGRpdGlvbmFsIGJpdCBkb3VibGVzIHRoZSBwZXItQ1BVXG4mIzQzO1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS5cbiYjNDM7XG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4gXHRoZWxwXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDc1MzViMDkwNjhhMDYuLjA4MGRjZTMyOTE2ODIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtNDAsNiAmIzQzOzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2poYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaXBoYXNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlXG5AQCAtMTMzLDExICYjNDM7MTM0LDI3IEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnQ2X3VuY2FjaGVkX2xpc3QpO1xuJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuJiM0MztcdC8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqL1xuJiM0MztcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2FkZChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcbiYjNDM7XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiYjNDM7XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XG4mIzQzO1xuJiM0MztcdGlmIChydC1cdTAwM2VydDZpX2lkZXYgXHUwMDI2XHUwMDI2IHJ0LVx1MDAzZXJ0NmlfaWRldi1cdTAwM2VkZXYgIT0gcnRfZGV2KVxuJiM0MztcdFx0dWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1Nyw0MCAmIzQzOzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XG4mIzQzO1xuJiM0MztcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbiYjNDM7XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuJiM0MztcdFx0XHRydC1cdTAwM2VydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTtcbiYjNDM7XHRcdFx0aW42X2Rldl9wdXQocnRfaWRldik7XG4mIzQzO1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4mIzQzO1x0XHRcdHJ0LVx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xuJiM0MztcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRcdFx0aGFuZGxlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoaGFuZGxlZClcbiYjNDM7XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xuJiM0MztcdH1cbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRpbnQgY3B1O1xuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbi1cdFx0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XG4mIzQzO1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiBcbi1cdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCBcdTAwMjZ1bC1cdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcbi1cdFx0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuLVx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuLVx0XHRcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xuLVxuLVx0XHRcdGlmIChydF9pZGV2IFx1MDAyNlx1MDAyNiBydF9pZGV2LVx1MDAzZWRldiA9PSBkZXYpIHtcbi1cdFx0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuLVx0XHRcdFx0aW42X2Rldl9wdXQocnRfaWRldik7XG4tXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcbi1cdFx0XHRcdHJ0LVx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xuLVx0XHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbi1cdFx0XHRcdFx0XHQgICBcdTAwMjZydC1cdTAwM2Vkc3QuZGV2X3RyYWNrZXIsXG4tXHRcdFx0XHRcdFx0ICAgR0ZQX0FUT01JQyk7XG4tXHRcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKGhhbmRsZWQpXG4tXHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcbiYjNDM7XHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiYjNDM7XHRcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xuJiM0MztcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgJiM0Mzs3MDE1LDE4IEBAIGludCBfX2luaXQgaXA2X3JvdXRlX2luaXQodm9pZClcbiAjZW5kaWZcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4mIzQzO1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbiYjNDM7XHRcdGludCBidWNrZXQ7XG4mIzQzO1xuJiM0MztcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4mIzQzO1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2guaGVhZCk7XG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5sb2NrKTtcbiBcdH1cbiBcbiBvdXQ6XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5pbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcbkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcbiYjNDM7e1xuJiM0MztcdGxvY2FsIHNlbmRlcl9waWRcbiYjNDM7XHRsb2NhbCBiYWNrbG9nXG4mIzQzO1x0bG9jYWwgcmNcbiYjNDM7XG4mIzQzO1x0IyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nXG4mIzQzO1x0IyB0aGUgVlJGIG1lbWJlciBpbnRlcmZhY2UgaW4gcnQ2aV9pZGV2LiBSYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZFxuJiM0MztcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbiYjNDM7XHRydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzXG4mIzQzO1x0aXAgLTYgLW5ldG5zIFwmIzM0OyRob3N0MVwmIzM0OyByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDBcbiYjNDM7XHRpcCBuZXRucyBleGVjIFwmIzM0OyRob3N0MVwmIzM0OyAuL21zZ196ZXJvY29weSAtNiBcXFxuJiM0MztcdFx0LVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcXFxuJiM0MztcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuJiM0MztcdHNlbmRlcl9waWQ9JCFcbiYjNDM7XHR3YWl0IFwmIzM0OyRzZW5kZXJfcGlkXCYjMzQ7XG4mIzQzO1x0cmM9JD9cbiYjNDM7XHRsb2dfdGVzdCAkcmMgMCBcJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcJiMzNDtcbiYjNDM7XHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbiYjNDM7XG4mIzQzO1x0YmFja2xvZz0kKGlwIG5ldG5zIGV4ZWMgXCYjMzQ7JGhvc3QxXCYjMzQ7IHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcbiYjNDM7XHRpZiAhIGVjaG8gXCYjMzQ7JGJhY2tsb2dcJiMzNDsgfCBncmVwIC1FcSAmIzM5O2JhY2tsb2cgLiogWzEtOV1bMC05XSpwJiMzOTs7IHRoZW5cbiYjNDM7XHRcdGxvZ190ZXN0IDEgMCBcJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCYjMzQ7XG4mIzQzO1x0XHRyZXR1cm5cbiYjNDM7XHRmaVxuJiM0MztcdGxvZ190ZXN0IDAgMCBcJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcbiYjNDM7XHRsb2dfdGVzdCAkPyAwIFwmIzM0O0ZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCYjMzQ7XG4mIzQzO31cbiYjNDM7XG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgJiM0Mzs0NTYsMTAgQEAgZWNob1xuIGVjaG8gXCYjMzQ7bmV0ZW0gcWRpc2Mgb24gVlJGIGRldmljZVwmIzM0O1xuIHJ1bl90ZXN0c1xuIFxuJiM0MztlY2hvXG4mIzQzO2VjaG8gXCYjMzQ7VW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wmIzM0O1xuJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2hcbiYjNDM7XG4gcHJpbnRmIFwmIzM0O1xcblRlc3RzIHBhc3NlZDogJTNkXFxuXCYjMzQ7ICR7bnN1Y2Nlc3N9XG4gcHJpbnRmIFwmIzM0O1Rlc3RzIGZhaWxlZDogJTNkXFxuXCYjMzQ7ICAgJHtuZmFpbH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjODIyMzQwMjZkY2ExZGNlYjZkZmU3ZjkwMDEwZDY5ZjI3YTA1MjJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMDI6MTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTEwMyw2ICYjNDM7MTAzLDE5IEBAIGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFCiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRAogCWJvb2wKIAomIzQzO2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMKJiM0MzsJaW50ICYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwomIzQzOwlyYW5nZSAxIDEwCiYjNDM7CWRlZmF1bHQgNgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZAomIzQzOwkgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlCiYjNDM7CSAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzCiYjNDM7CSAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFUKJiM0MzsJICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS4KJiM0MzsKIGNvbmZpZyBJUF9QTlAKIAlib29sICYjMzQ7SVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvbiYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC03NCw2ICYjNDM7NzQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2hhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZ21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGt0X3NjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbXJvdXRlLmgmZ3Q7CkBAIC0xNTUyLDExICYjNDM7MTU1MywyMSBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZAloZWFkOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpOwomIzQzOyNkZWZpbmUgUlRfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKQomIzQzOwomIzQzO3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpOwogCiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KQogewotCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cigmYW1wO3J0X3VuY2FjaGVkX3RhYmxlKTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsOwomIzQzOwomIzQzOwl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZHN0X2RldigmYW1wO3J0LSZndDtkc3QpLAomIzQzOwkJCQkgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiAKIAlydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDsKIApAQCAtMTU4OCwxNCAmIzQzOzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpbnQgY3B1OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3Blcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LAomIzQzOwkJCQkJICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldOwogCiAJCWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsICZhbXA7dWwtJmd0O2hlYWQsIGRzdC5ydF91bmNhY2hlZCkgewotCQkJaWYgKHJ0LSZndDtkc3QuZGV2ICE9IGRldikKJiM0MzsJCQlpZiAoZHN0X2RldigmYW1wO3J0LSZndDtkc3QpICE9IGRldikKIAkJCQljb250aW51ZTsKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihydC0mZ3Q7ZHN0LmRldl9yY3UsIGJsYWNraG9sZV9uZXRkZXYpOwogCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKGRldiwgYmxhY2tob2xlX25ldGRldiwKQEAgLTM3NzEsMTAgJiM0MzszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKQogCWlwX3RzdGFtcHMgPSBpZGVudHNfaGFzaCAmIzQzOyAoaXBfaWRlbnRzX21hc2sgJiM0MzsgMSkgKiBzaXplb2YoKmlwX2lkZW50cyk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCWludCBidWNrZXQ7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0JiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbYnVja2V0XTsKIAotCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKLQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7CiYjNDM7CQkJc3Bpbl9sb2NrX2luaXQoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CQl9CiAJfQogI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lECiAJaXBfcnRfYWNjdCA9IF9fYWxsb2NfcGVyY3B1KDI1NiAqIHNpemVvZihzdHJ1Y3QgaXBfcnRfYWNjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBpcF9ydF9hY2N0KSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZwppbmRleCBjMzgwNmM2YWM5NmY5Li4wMjUzMTc4NjY4YmRmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L0tjb25maWcKQEAgLTE4LDYgJiM0MzsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjYKIAogaWYgSVBWNgogCiYjNDM7Y29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTCiYjNDM7CWludCAmIzM0O0lQdjYgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzJiMzNDsKJiM0MzsJcmFuZ2UgMSAxMAomIzQzOwlkZWZhdWx0IDYKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjYgdW5jYWNoZWQKJiM0MzsJICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlCiYjNDM7CSAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzCiYjNDM7CSAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFUKJiM0MzsJICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS4KJiM0MzsKIGNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGCiAJYm9vbCAmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCYjMzQ7CiAJaGVscApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggNzUzNWIwOTA2OGEwNi4uMDgwZGNlMzI5MTY4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00MCw2ICYjNDM7NDAsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbnNwcm94eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2poYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2lwaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRfbmFtZXNwYWNlLmgmZ3Q7CkBAIC0xMzMsMTEgJiM0MzsxMzQsMjcgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3QgewogCXN0cnVjdCBsaXN0X2hlYWQJaGVhZDsKIH07CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVDZfVU5DQUNIRURfSEFTSF9TSVpFCUJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRV07CiYjNDM7CS8qIFJvdXRlcyB0aGF0IG11c3QgYmUgZGlzY292ZXJhYmxlIHRocm91Z2ggdHdvIGRpZmZlcmVudCBkZXZpY2VzLiAqLwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCk7CiYjNDM7CXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlID0gcmF3X2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldigmYW1wO3J0LSZndDtkc3QpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CWlmIChydC0mZ3Q7cnQ2aV9pZGV2ICZhbXA7JmFtcDsgcnQtJmd0O3J0NmlfaWRldi0mZ3Q7ZGV2ICE9IHJ0X2RldikKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2g7CiYjNDM7CWVsc2UKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihydF9kZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKIAogCXJ0LSZndDtkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsOwogCkBAIC0xNTcsNDAgJiM0MzsxNzQsNTEgQEAgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7dWwtJmd0O2hlYWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7CiYjNDM7CQlzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtJmd0O3J0NmlfaWRldjsKJiM0MzsJCXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CQlib29sIGhhbmRsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewomIzQzOwkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKJiM0MzsJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKJiM0MzsJCQloYW5kbGVkID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChydF9kZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O2RzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2OwomIzQzOwkJCW5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsCiYjNDM7CQkJCQkgICAmYW1wO3J0LSZndDtkc3QuZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwkJaWYgKGhhbmRsZWQpCiYjNDM7CQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7Ci0JCXN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlOwomIzQzOwkJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiAKLQkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtJmd0O3J0NmlfaWRldjsKLQkJCXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBydC0mZ3Q7ZHN0LmRldjsKLQkJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwotCi0JCQlpZiAocnRfaWRldiAmYW1wOyZhbXA7IHJ0X2lkZXYtJmd0O2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7Ci0JCQkJaW42X2Rldl9wdXQocnRfaWRldik7Ci0JCQkJaGFuZGxlZCA9IHRydWU7Ci0JCQl9Ci0KLQkJCWlmIChydF9kZXYgPT0gZGV2KSB7Ci0JCQkJcnQtJmd0O2RzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2OwotCQkJCW5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsCi0JCQkJCQkgICAmYW1wO3J0LSZndDtkc3QuZGV2X3RyYWNrZXIsCi0JCQkJCQkgICBHRlBfQVRPTUlDKTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQkJCWlmIChoYW5kbGVkKQotCQkJCWxpc3RfZGVsX2luaXQoJmFtcDtydC0mZ3Q7ZHN0LnJ0X3VuY2FjaGVkKTsKLQkJfQotCQlzcGluX3VubG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQl1bCA9ICZhbXA7dGFibGUtJmd0O2J1Y2tldHNbaGFzaF9wdHIoZGV2LAomIzQzOwkJCQkJICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiYjNDM7CQlydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKCZhbXA7dGFibGUtJmd0O21pc21hdGNoLCBkZXYpOwogCX0KIH0KIApAQCAtNjk4NywxMCAmIzQzOzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKQogI2VuZGlmCiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCWludCBidWNrZXQ7CiYjNDM7CiYjNDM7CQl0YWJsZSA9IHBlcl9jcHVfcHRyKCZhbXA7cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpOwomIzQzOwkJZm9yIChidWNrZXQgPSAwOyBidWNrZXQgJmx0OyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KJiM0MzsJCUlOSVRfTElTVF9IRUFEKCZhbXA7dGFibGUtJmd0O21pc21hdGNoLmhlYWQpOwomIzQzOwkJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gubG9jayk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaApAQCAtMzg1LDYgJiM0MzszODUsMzcgQEAgcnVuX3Rlc3RzKCkKIAljbGVhbnVwX3hmcm1fZGV2CiB9CiAKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKQomIzQzO3sKJiM0MzsJbG9jYWwgc2VuZGVyX3BpZAomIzQzOwlsb2NhbCBiYWNrbG9nCiYjNDM7CWxvY2FsIHJjCiYjNDM7CiYjNDM7CSMgQSBsb2NhbCByb3V0ZSB0aHJvdWdoIGEgVlJGIHVzZXMgdGhlIFZSRiBhcyBkc3QuZGV2IHdoaWxlIHJldGFpbmluZwomIzQzOwkjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkCiYjNDM7CSMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC4KJiM0MzsJcnVuX2NtZF9ob3N0MSB0YyBxZGlzYyByZXBsYWNlIGRldiAke1ZSRn0gcm9vdCBuZXRlbSBsaW1pdCAxIGRlbGF5IDEwcwomIzQzOwlpcCAtNiAtbmV0bnMgJiMzNDskaG9zdDEmIzM0OyByb3V0ZSBhZGQgbG9jYWwgJHtIT1NUMV82fS8xMjggZGV2IGV0aDAKJiM0MzsJaXAgbmV0bnMgZXhlYyAmIzM0OyRob3N0MSYjMzQ7IC4vbXNnX3plcm9jb3B5IC02IFwKJiM0MzsJCS1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXAomIzQzOwkJJmd0Oy9kZXYvbnVsbCAyJmd0OyZhbXA7MSAmYW1wOwomIzQzOwlzZW5kZXJfcGlkPSQhCiYjNDM7CXdhaXQgJiMzNDskc2VuZGVyX3BpZCYjMzQ7CiYjNDM7CXJjPSQ/CiYjNDM7CWxvZ190ZXN0ICRyYyAwICYjMzQ7Q3JlYXRlIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0MzsJWyAkcmMgLW5lIDAgXSAmYW1wOyZhbXA7IHJldHVybgomIzQzOwomIzQzOwliYWNrbG9nPSQoaXAgbmV0bnMgZXhlYyAmIzM0OyRob3N0MSYjMzQ7IHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSkKJiM0MzsJaWYgISBlY2hvICYjMzQ7JGJhY2tsb2cmIzM0OyB8IGdyZXAgLUVxICYjMzk7YmFja2xvZyAuKiBbMS05XVswLTldKnAmIzM5OzsgdGhlbgomIzQzOwkJbG9nX3Rlc3QgMSAwICYjMzQ7UmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzYyYjMzQ7CiYjNDM7CQlyZXR1cm4KJiM0MzsJZmkKJiM0MzsJbG9nX3Rlc3QgMCAwICYjMzQ7UmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzYyYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDAKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt9CiYjNDM7CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyB1c2FnZQogCkBAIC00MjUsNiAmIzQzOzQ1NiwxMCBAQCBlY2hvCiBlY2hvICYjMzQ7bmV0ZW0gcWRpc2Mgb24gVlJGIGRldmljZSYjMzQ7CiBydW5fdGVzdHMKIAomIzQzO2VjaG8KJiM0MztlY2hvICYjMzQ7VW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlcyYjMzQ7CiYjNDM7dGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoCiYjNDM7CiBwcmludGYgJiMzNDtcblRlc3RzIHBhc3NlZDogJTNkXG4mIzM0OyAke25zdWNjZXNzfQogcHJpbnRmICYjMzQ7VGVzdHMgZmFpbGVkOiAlM2RcbiYjMzQ7ICAgJHtuZmFpbH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODAyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneTogVW5jYWNoZWQgUm91dGUgTWFuYWdlbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIFRoZSB0YXNrIGlzIHRvIGRldGVybWluZSBpdHMgZnV6emluZyBwb3RlbnRpYWwsIHNvIEkgbmVlZCB0byBhbmFseXplIGl0cyBpbXBhY3Qgb24gdGhlIGtlcm5lbC4gSSBzZWUgdGhhdCBpdCBmb2N1c2VzIG9uIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGUgaGFuZGxpbmcsIGEgY29yZSBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHJlZmFjdG9yaW5nLCBjaGFuZ2luZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gbWFuYWdlIHVuY2FjaGVkIHJvdXRlcyBmcm9tIHBlci1DUFUgbGlua2VkIGxpc3RzIHRvIHBlci1DUFUgaGFzaCB0YWJsZXMuIFNwZWNpZmljYWxseToKCiogICAqKklQdjQ6KiogTW9kaWZpZXMgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjQvcm91dGUuY2AuIFRoZSBgcnRfdW5jYWNoZWRfbGlzdGAgaXMgcmVwbGFjZWQgYnkgYHJ0X3VuY2FjaGVkX3RhYmxlYCwgYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoZSBoYXNoIGZ1bmN0aW9uIHVzZXMgYGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KWAgYW5kIGEgY29uZmlndXJhYmxlIG51bWJlciBvZiBoYXNoIGJpdHMgKGBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCkuIENoYW5nZXMgYXJlIG1hZGUgdG8gYHJ0X2FkZF91bmNhY2hlZF9saXN0YCAod2hpY2ggYWRkcyByb3V0ZXMpLCBgcnRfZmx1c2hfZGV2YCAod2hpY2ggcmVtb3ZlcyByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlKSwgYW5kIGBpcF9ydF9pbml0YCAoaW5pdGlhbGl6YXRpb24pLgoqICAgKipJUHY2OioqIE1vZGlmaWVzIGBuZXQvaXB2Ni9LY29uZmlnYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGUgcGF0dGVybiBtaXJyb3JzIElQdjQsIHdpdGggYHJ0Nl91bmNhY2hlZF9saXN0YCBiZWNvbWluZyBgcnQ2X3VuY2FjaGVkX3RhYmxlYC4gVGhlIGhhc2ggdGFibGUgdXNlcyBgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRWAgYW5kIGBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgLiBMb2dpYyBpcyBhZGRlZCBmb3IgYSAmIzM0O21pc21hdGNoJiMzNDsgbGlzdCB0aGF0IGlzIHVzZWQgd2hlbiBgcnQtJmd0O3J0NmlfaWRldiAmYW1wOyZhbXA7IHJ0LSZndDtydDZpX2lkZXYtJmd0O2RldiAhPSBydF9kZXZgLiBLZXkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgaXA2X3JvdXRlX2luaXRgLgoqICAgKipUZXN0aW5nOioqIFRoZXJlJiMzOTtzIGEgcmVsYXRlZCBtb2RpZmljYXRpb24gdG8gdGhlIGB2cmYteGZybS10ZXN0cy5zaGAgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHNvbWVvbmUmIzM5O3MgYWxyZWFkeSBjb25zaWRlcmluZyBob3cgdG8gdGVzdCB0aGlzIGNoYW5nZS4KCk5vdywgbXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNoYW5nZXMgbGlrZSB0aGlzLCBwYXJ0aWN1bGFybHkgd2l0aGluIGNvcmUgbmV0d29ya2luZywgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGtleSBmdW5jdGlvbnMgKGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmApIHdpdGhpbiBhIGNyaXRpY2FsIHBhdGguIFRoaXMgY29kZSBydW5zIHdoZW4gcm91dGVzIGFyZSBjcmVhdGVkIG9yIGRlbGV0ZWQsIGFuZCB3aGVuIG5ldHdvcmsgZGV2aWNlcyBhcmUgdGFrZW4gZG93biBvciBmbHVzaGVkLiBVbmNhY2hlZCByb3V0ZXMgYXJlIHVzZWQgd2hlbiBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGUuZy4sIHdpdGggcmF3IHNvY2tldHMsIFBNVFUsIHJlZGlyZWN0cywgVlJGLCBldGMuIFRoZSBmbHVzaGluZyBhc3BlY3QsIHRyaWdnZXJlZCBieSBkZXZpY2UgcmVtb3ZhbCwgaXMgYSBwYXJ0aWN1bGFybHkgYXBwZWFsaW5nIHRhcmdldCwgc2luY2UgbmV0d29yayBkZXZpY2VzIGNvbWUgYW5kIGdvIGNvbnN0YW50bHksIGVzcGVjaWFsbHkgaW4gZW52aXJvbm1lbnRzIGxpa2Ugc3l6a2FsbGVyLiBUaGUgY29kZSByZWZhY3RvcmluZywgcGFydGljdWxhcmx5IG9mIGRhdGEgc3RydWN0dXJlcywgaXMgbWVudGlvbmVkIGFzIGFuIGlkZWFsIGNhbmRpZGF0ZS4KClRvIGJlIHRob3JvdWdoLCBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb2RlJiMzOTtzIHJlYWNoIGFuZCBkZXRlcm1pbmUgdGhlIGVudHJ5IHBvaW50cyBmb3IgcG90ZW50aWFsIGZ1enppbmcgaGFybmVzc2VzLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2dpYyBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBhbmQgaW50cm9kdWNlIG5ldyBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvb2QgY2FuZGlkYXRlcyB0byByZXZlYWwgYnVncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1MzktXHRcdGlmIChvcmlnKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1NDA6XHRcdFx0cnRfYWRkX3VuY2FjaGVkX2xpc3Qob3JpZyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXHRcdFx0ZHN0X3JlbGVhc2UoXHUwMDI2b3JpZy1cdTAwM2Vkc3QpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU2Mj1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2My1cbm5ldC9pcHY0L3JvdXRlLmM6MTU2NDp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxubmV0L2lwdjQvcm91dGUuYy0xNTY1LXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzctXHRcdFx0fVxubmV0L2lwdjQvcm91dGUuYzoxNjc4Olx0XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY3OS1cdFx0fVxubmV0L2lwdjQvcm91dGUuYy0xNjgwLVx0fSBlbHNlXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XHRcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTIzMDg9aXBfcm91dGVfaW5wdXRfc2xvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDItXHRcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcbm5ldC9pcHY0L3JvdXRlLmM6MjUwMzpcdFx0XHRydF9hZGRfdW5jYWNoZWRfbGlzdChydGgpO1xubmV0L2lwdjQvcm91dGUuYy0yNTA0LVx0fVxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jPTY2PXN0YXRpYyBpbnQgeGZybTRfZmlsbF9kc3Qoc3RydWN0IHhmcm1fZHN0ICp4ZHN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTkwLVx0eGRzdC1cdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cdTAwM2VydF9tdHVfbG9ja2VkO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmM6OTE6XHRydF9hZGRfdW5jYWNoZWRfbGlzdChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQpO1xubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgcnRfZmx1c2hfZGV2YCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBjaXJjbGUgYmFjayB0byB0aGF0IGBydF9mbHVzaF9kZXZgIGZ1bmN0aW9uLiBXZSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHNvbWUgcmVsYXRlZCBpc3N1ZXMsIGFuZCBpdCYjMzk7cyB0aW1lIHRvIG1hcCBvdXQgdGhlIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgd2hvJiMzOTtzIGNhbGxpbmcgaXQgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgd2UgbmVlZCB0byBzZWUgaXRzIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBleHBlY3RlZCBjYWxscywgb3IgYXJlIHRoZXJlIHNvbWUgdW5leHBlY3RlZCBsb2NhdGlvbnMgd2hlcmUgd2UgYXJlIGZsdXNoaW5nPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxzPyBBcmUgdGhlcmUgYW55IGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBpdCB0aGF0IHNob3VsZG4mIzM5O3QgYmU/IERvaW5nIHRoaXMgd2lsbCBoZWxwIHVzIGlzb2xhdGUgdGhlIHNvdXJjZSBvZiBhbnkgaXNzdWVzIHdlIGZpbmQuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0X2ZsdXNoX2RldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jPTE1MDY9c3RhdGljIGludCBmaWJfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jLTE1MTctXHRcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xubmV0L2lwdjQvZmliX2Zyb250ZW5kLmM6MTUxODpcdFx0cnRfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE5LVx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTkwPXN0YXRpYyB2b2lkIGlwdjRfZHN0X2Rlc3Ryb3koc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTU5NS1cbm5ldC9pcHY0L3JvdXRlLmM6MTU5Njp2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvcm91dGUuYy0xNTk3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjU0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIHNuaXBwZXRzLCB0aGlua2luZyBsaWtlIGEgc2Vhc29uZWQgbmV0d29yayBlbmdpbmVlcjoKCioqSVB2NiBSb3V0ZSBDYWNoZSBUaGlua2luZyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gSVB2NiByb3V0ZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSAmIzM0O3VuY2FjaGVkJiMzNDsgcm91dGVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgcmlnaHQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHJvdXRlcyB0aGF0IGFyZW4mIzM5O3Qgc2l0dGluZyBpbiB0aGUgZmFzdCBwYXRoLCBwcm9iYWJseSBkdWUgdG8gc29tZSBjb25kaXRpb24gb3IgYmVjYXVzZSB0aGV5JiMzOTtyZSBsZXNzIGZyZXF1ZW50bHkgdXNlZC4mIzM0OyBJIHNlZSBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSAmIzM0O2FkZCYjMzQ7IGZ1bmN0aW9uIHByb2JhYmx5IGFwcGVuZHMgYSBuZXcgcm91dGUgdG8gYSBsaXN0IG9mIHRoZXNlIHVuY2FjaGVkIGVudHJpZXMuIFdlIGFyZSBsaWtlbHkgYWRkaW5nIHRoZSByb3V0ZSB0byBhIGxpc3QgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywgb3IgZm9yIGl0IHRvIGJlIGNvbnN1bHRlZCB3aGVuIHdlIGhhdmUgYSBwYWNrZXQgdG8gZm9yd2FyZC4gVGhlICYjMzQ7Zmx1c2hfZGV2JiMzNDsgZnVuY3Rpb24gaXMgdGhlIGtleSBoZXJlISBUaGF0IGluZGljYXRlcyB3ZSBhcmUgbGlrZWx5IGZsdXNoaW5nLCBvciByZW1vdmluZywgdGhlc2UgdW5jYWNoZWQgcm91dGVzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIG5ldHdvcmsgZGV2aWNlLCBwcm9iYWJseSBvbiBhbiBpbnRlcmZhY2UuIFdlIG1pZ2h0IGJlIGNsZWFuaW5nIHVwIHRoZXNlIHVuY2FjaGVkIGVudHJpZXMgd2hlbiBhbiBpbnRlcmZhY2UgZ29lcyBkb3duLCBpcyByZWNvbmZpZ3VyZWQsIG9yIG1heWJlIGV2ZW4gd2hlbiBhIG5ldywgbW9yZSBvcHRpbWFsIHJvdXRlIGlzIGxlYXJuZWQsIGFuZCB0aGUgb2xkIGNhY2hlZCBlbnRyeSBpcyBubyBsb25nZXIgYXBwbGljYWJsZS4gVGhlIGVmZmljaWVuY3kgb2YgdGhlIGNhY2hlIGFuZCBob3cgdGhlc2UgJiMzNDt1bmNhY2hlZCYjMzQ7IHJvdXRlcyBhcmUgbWFuYWdlZCBhcmUgY3JpdGljYWwuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjcml0ZXJpYSBmb3IgYSByb3V0ZSB0byBiZWNvbWUgJiMzNDt1bmNhY2hlZCYjMzQ7IGFuZCBhbHNvIGhvdyBvZnRlbiB0aGlzIGxpc3QgaXMgcHVyZ2VkLiBJcyB0aGVyZSBhIHRpbWVyLCBzb21lIGtpbmQgb2YgdXNhZ2UgdGhyZXNob2xkLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGtub3cgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydDZfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9MTQ1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTE0Ni1cbm5ldC9pcHY2L3JvdXRlLmM6MTQ3OnZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OC17XG4tLVxubmV0L2lwdjYvcm91dGUuYy0xNjUtXG5uZXQvaXB2Ni9yb3V0ZS5jOjE2Njp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxubmV0L2lwdjYvcm91dGUuYy0xNjcte1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMTc2LVxubmV0L2lwdjYvcm91dGUuYzoxNzc6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxubmV0L2lwdjYvcm91dGUuYy0xNzgtXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTIwOC1cbm5ldC9pcHY2L3JvdXRlLmM6MjA5OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjYvcm91dGUuYy0yMTAte1xuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjE5LVx0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbm5ldC9pcHY2L3JvdXRlLmM6MjIwOlx0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmM6MjIxOlx0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaCwgZGV2KTtcbm5ldC9pcHY2L3JvdXRlLmMtMjIyLVx0fVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MzgyPXN0YXRpYyB2b2lkIGlwNl9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjYvcm91dGUuYy0zODgtXHRpcF9kc3RfbWV0cmljc19wdXQoZHN0KTtcbm5ldC9pcHY2L3JvdXRlLmM6Mzg5Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZGVsKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMzkwLVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjMwMT1zdHJ1Y3QgcnQ2X2luZm8gKmlwNl9wb2xfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMzQyLVx0XHRcdC8qIDEgcmVmY250IGlzIHRha2VuIGR1cmluZyBpcDZfcnRfY2FjaGVfYWxsb2MoKS5cbm5ldC9pcHY2L3JvdXRlLmM6MjM0MzpcdFx0XHQgKiBBcyBydDZfdW5jYWNoZWRfbGlzdF9hZGQoKSBkb2VzIG5vdCBjb25zdW1lIHJlZmNudCxcbm5ldC9pcHY2L3JvdXRlLmMtMjM0NC1cdFx0XHQgKiB0aGlzIHJlZmNudCBpcyBhbHdheXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBldmVuXG4tLVxubmV0L2lwdjYvcm91dGUuYy0yMzQ2LVx0XHRcdCAqL1xubmV0L2lwdjYvcm91dGUuYzoyMzQ3Olx0XHRcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChydCk7XG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDgtXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMzYzPXN0cnVjdCBkc3RfZW50cnkgKmljbXA2X2RzdF9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzM5MS1cdCAqL1xubmV0L2lwdjYvcm91dGUuYzozMzkyOlx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcbm5ldC9pcHY2L3JvdXRlLmMtMzM5My1cbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTUwNzQ9dm9pZCBydDZfZGlzYWJsZV9pcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cdHJ0Nl9zeW5jX2Rvd25fZGV2KGRldiwgZXZlbnQpO1xubmV0L2lwdjYvcm91dGUuYzo1MDc5Olx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XG5uZXQvaXB2Ni9yb3V0ZS5jLTUwODAtXHRuZWlnaF9pZmRvd24obmRfdGFibGUobmV0KSwgZGV2KTtcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYz04MD1zdGF0aWMgaW50IHhmcm02X2ZpbGxfZHN0KHN0cnVjdCB4ZnJtX2RzdCAqeGRzdCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDItXHR4ZHN0LVx1MDAzZXUucnQ2LnJ0Nmlfc3JjID0gcnQtXHUwMDNlcnQ2aV9zcmM7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYzoxMDM6XHRydDZfdW5jYWNoZWRfbGlzdF9hZGQoXHUwMDI2eGRzdC1cdTAwM2V1LnJ0Nik7XG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDQtXG4tLVxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9MTI3PXN0YXRpYyB2b2lkIHhmcm02X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMzEtXHRkc3RfZGVzdHJveV9tZXRyaWNzX2dlbmVyaWMoZHN0KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jOjEzMjpcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChcdTAwMjZ4ZHN0LVx1MDAzZXUucnQ2KTtcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEzMy1cdGlmIChsaWtlbHkoeGRzdC1cdTAwM2V1LnJ0Ni5ydDZpX2lkZXYpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgSVB2NC9JUHY2IFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCB0aGlzIGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNpdHVhdGlvbiByaXBlIGZvciBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaC4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgc3BlY2lmaWMgY3JpdGVyaWEgYW5kIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBJIGRpdmUgaW4uIEZvY3VzU3ltYm9scyB3aWxsIGFsc28gcGxheSBhbiBpbXBvcnRhbnQgcm9sZSwgc28gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aG9zZSBlYXJseSBvbi4KCkZpcnN0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgYEtjb25maWdgIGZpbGVzLCBmb2N1c2luZyBvbiBJUHY0IGFuZCBJUHY2IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIEkgc2VlIHRoaXM6CgpgYGAKY29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUwoJaW50ICYjMzQ7SVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwoJcmFuZ2UgMSAxMAoJZGVmYXVsdCA2CmBgYAoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiB0aGlzIHZhcmlhYmxlIGlzIHVuZGVyIGEgbWVudSwgd2hpY2ggbWlnaHQgcmVzdHJpY3QgaXRzIHZpc2liaWxpdHkgb3IgaW5mbHVlbmNlLiBJJiMzOTtsbCBzY2FuIGFyb3VuZCBsaW5lIDEwMyBpbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGhlbHBcbiAgOTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHdoaWNoIGlzIHJlY29tbWVuZGVkLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBwcmludFxuICA5NzpcdFx0ICB2ZXJib3NlIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgcm91dGluZywgZm9yIGV4YW1wbGUgd2FybmluZ3MgYWJvdXRcbiAgOTg6XHRcdCAgcmVjZWl2ZWQgcGFja2V0cyB3aGljaCBsb29rIHN0cmFuZ2UgYW5kIGNvdWxkIGJlIGV2aWRlbmNlIG9mIGFuXG4gIDk5Olx0XHQgIGF0dGFjayBvciBhIG1pc2NvbmZpZ3VyZWQgc3lzdGVtIHNvbWV3aGVyZS4gVGhlIGluZm9ybWF0aW9uIGlzXG4gMTAwOlx0XHQgIGhhbmRsZWQgYnkgdGhlIGtsb2dkIGRhZW1vbiB3aGljaCBpcyByZXNwb25zaWJsZSBmb3Iga2VybmVsIG1lc3NhZ2VzXG4gMTAxOlx0XHQgIChcJiMzNDttYW4ga2xvZ2RcJiMzNDspLlxuIDEwMjpcdFxuIDEwMzpcdGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXG4gMTA0Olx0XHRib29sXG4gMTA1Olx0XG4gMTA2Olx0Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xuIDEwNzpcdFx0aW50IFwmIzM0O0lQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCYjMzQ7XG4gMTA4Olx0XHRyYW5nZSAxIDEwXG4gMTA5Olx0XHRkZWZhdWx0IDZcbiAxMTA6XHRcdGhlbHBcbiAxMTE6XHRcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NCB1bmNhY2hlZFxuIDExMjpcdFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZVxuIDExMzpcdFx0ICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXNcbiAxMTQ6XHRcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcbiAxMTU6XHRcdCAgbWVtb3J5IHVzZWQgYnkgdGhlIHRhYmxlLlxuIDExNjpcdFxuIDExNzpcdFx0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxuIDExODpcdFxuIDExOTpcdGNvbmZpZyBJUF9QTlBcbiAxMjA6XHRcdGJvb2wgXCYjMzQ7SVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvblwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBUaGlzIGVuYWJsZXMgYXV0b21hdGljIGNvbmZpZ3VyYXRpb24gb2YgSVAgYWRkcmVzc2VzIG9mIGRldmljZXMgYW5kXG4gMTIzOlx0XHQgIG9mIHRoZSByb3V0aW5nIHRhYmxlIGR1cmluZyBrZXJuZWwgYm9vdCwgYmFzZWQgb24gZWl0aGVyIGluZm9ybWF0aW9uXG4gMTI0Olx0XHQgIHN1cHBsaWVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIG9yIGJ5IEJPT1RQIG9yIFJBUlAgcHJvdG9jb2xzLlxuIDEyNTpcdFx0ICBZb3UgbmVlZCB0byBzYXkgWSBvbmx5IGZvciBkaXNrbGVzcyBtYWNoaW5lcyByZXF1aXJpbmcgbmV0d29ya1xuIDEyNjpcdFx0ICBhY2Nlc3MgdG8gYm9vdCAoaW4gd2hpY2ggY2FzZSB5b3Ugd2FudCB0byBzYXkgWSB0byBcJiMzNDtSb290IGZpbGUgc3lzdGVtXG4gMTI3Olx0XHQgIG9uIE5GU1wmIzM0OyBhcyB3ZWxsKSwgYmVjYXVzZSBhbGwgb3RoZXIgbWFjaGluZXMgY29uZmlndXJlIHRoZSBuZXR3b3JrXG4gMTI4Olx0XHQgIGluIHRoZWlyIHN0YXJ0dXAgc2NyaXB0cy5cbiAxMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlOiBJUHY0IGFuZCBJUHY2IFJvdXRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYG5ldC9pcHY0L0tjb25maWdgIGlzIG5lc3RlZCB1bmRlciB0aGUgYCYjMzQ7SVA6IFRDUC9JUCBuZXR3b3JraW5nJiMzNDtgIG1lbnUsIGFuZCB0aGF0ICptZW51KiBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCBJUHY0IHJvdXRlIG1hbmFnZW1lbnQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGZvciBpdCwgcmVxdWlyZXMgdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuCgpUaGVuIEkgbW92ZSBvbnRvIGBuZXQvaXB2Ni9LY29uZmlnYC4gSSBzZWUgYSBzaW1pbGFyIHBhdHRlcm4gd2l0aCBgSVBWNmAuICBgSVBWNmAgZW5hYmxlcyBJUHY2IHN1cHBvcnQuIEkgYWxzbyBzZWUgYSBjb25maWcgdmFyaWFibGUsIGBJUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU2AsIGFuZCBpdHMgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiBUaGF0IGNvbmZpcm1zIHRoYXQgSVB2NiByb3V0aW5nIGFsc28gcmVsaWVzIG9uIGEgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgpTbywgdG8gYmUgZXhwbGljaXQsIGBDT05GSUdfSU5FVGAgKmlzKiBuZWVkZWQgZm9yIElQdjQgcm91dGUgZnVuY3Rpb25hbGl0eSwgYW5kIGBDT05GSUdfSVBWNmAgaXMgcmVxdWlyZWQgZm9yIElQdjYgcm91dGUgZnVuY3Rpb25hbGl0eS4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMuIEFyZSBgSU5FVGAgYW5kIGBJUFY2YCB0cnVseSB0aGUgc3RhbmRhcmQsIGZ1bmRhbWVudGFsIGNvbmZpZ3MgZm9yIElQdjQgYW5kIElQdjYgcmVzcGVjdGl2ZWx5PyBJbiBteSBleHBlcmllbmNlLCB0aGF0JiMzOTtzIHR5cGljYWxseSB0aGUgY2FzZSBpbiBhIExpbnV4IGtlcm5lbC4gQnV0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyB3b3J0aHdoaWxlLgoKVG8gbmFpbCB0aGlzIGRvd24sIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbmV0L2lwdjYvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgIGZpbGVzLiBUaGVzZSBNYWtlZmlsZXMgb2Z0ZW4gY29udGFpbiBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3Nlcywgd2hpY2ggc2hvdWxkIGZ1cnRoZXIgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgY29uZmlnIG9wdGlvbnMgYW5kIHRoZSByb3V0aW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JvdXRlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC82bG93cGFuL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX0ZSQUcpICYjNDM7PSBuaGNfZ2hjX2V4dF9mcmFnLm9cbm5ldC82bG93cGFuL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX1JPVVRFKSAmIzQzOz0gbmhjX2doY19leHRfcm91dGUub1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MzMxPWJyX25mX2lwdjRfZGFkZHJfd2FzX2NoYW5nZWQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2OC0gKiBJZiBJUCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZmFpbCwgd2hpbGVcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzY5OiAqIGlwX3JvdXRlX291dHB1dF9rZXkoKSBjYW4gcmV0dXJuIHN1Y2Nlc3MuIFRoZSBzb3VyY2Vcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MzcwOiAqIGFkZHJlc3MgZm9yIGlwX3JvdXRlX291dHB1dF9rZXkoKSBpcyBzZXQgdG8gemVybywgc28gaXBfcm91dGVfb3V0cHV0X2tleSgpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3MS0gKiB0aGlua3Mgd2UmIzM5O3JlIGhhbmRsaW5nIGEgbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0IGFuZCB3b24mIzM5O3QgY2FyZVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzczLSAqIGRldmljZSwgd2UgcHJvY2VlZCBhcyBpZiBpcF9yb3V0ZV9pbnB1dCgpIHN1Y2NlZWRlZC4gSWYgaXQgZGlmZmVycyBmcm9tIHRoZVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozNzQ6ICogbG9naWNhbCBicmlkZ2UgcG9ydCBvciBpZiBpcF9yb3V0ZV9vdXRwdXRfa2V5KCkgZmFpbHMgd2UgZHJvcCB0aGUgcGFja2V0LlxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNzUtICovXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGU9MTI9b2JqLSQoQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1kpICYjNDM7PSBlYnRhYmxlcy5vXG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQtIyB0YWJsZXNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgJiM0Mzs9IGVidGFibGVfYnJvdXRlLm9cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSAmIzQzOz0gZWJ0YWJsZV9maWx0ZXIub1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTIzODA9c3RhdGljIGludCBfX2JwZl9yZWRpcmVjdF9uZWlnaF92NChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTIzOTgtXG5uZXQvY29yZS9maWx0ZXIuYzoyMzk5Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXHUwMDI2Zmw0LCBOVUxMKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTI0MDAtXHRcdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9jb3JlL2x3dF9icGYuYy0yMjEtXG5uZXQvY29yZS9sd3RfYnBmLmM6MjIyOlx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xubmV0L2NvcmUvbHd0X2JwZi5jLTIyMy1cdFx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS01LVxubmV0L2lwdjQvTWFrZWZpbGU6NjpvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTEzMTQ9aW50IGluZXRfc2tfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2FmX2luZXQuYy0xMzI3LVx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBmbDQpO1xubmV0L2lwdjQvYWZfaW5ldC5jOjEzMjg6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XG5uZXQvaXB2NC9hZl9pbmV0LmMtMTMyOS1cdGlmICghSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY0L2FycC5jPTQ1NT1zdGF0aWMgaW50IGFycF9maWx0ZXIoX19iZTMyIHNpcCwgX19iZTMyIHRpcCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9hcnAuYy00NjEtXG5uZXQvaXB2NC9hcnAuYzo0NjI6XHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIHNpcCwgdGlwLCAwLCBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldiksXG5uZXQvaXB2NC9hcnAuYy00NjMtXHRcdFx0ICAgICBSVF9TQ09QRV9VTklWRVJTRSk7XG4tLVxubmV0L2lwdjQvYXJwLmM9MTAzOD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmFycF9yZXFfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqcilcbi0tXG5uZXQvaXB2NC9hcnAuYy0xMDUxLVxubmV0L2lwdjQvYXJwLmM6MTA1MjpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KG5ldCwgaXAsIDAsIDAsIDAsIFJUX1NDT1BFX0xJTkspO1xubmV0L2lwdjQvYXJwLmMtMTA1My1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2RhdGFncmFtLmM9MTAyPXZvaWQgaXA0X2RhdGFncmFtX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L2RhdGFncmFtLmMtMTE3LVx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvZGF0YWdyYW0uYzoxMTg6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgXHUwMDI2Zmw0LCBzayk7XG5uZXQvaXB2NC9kYXRhZ3JhbS5jLTExOS1cdGRzdCA9ICFJU19FUlIocnQpID8gXHUwMDI2cnQtXHUwMDNlZHN0IDogTlVMTDtcbi0tXG5uZXQvaXB2NC9pY21wLmM9NDE2PXN0YXRpYyB2b2lkIGljbXBfcmVwbHkoc3RydWN0IGljbXBfYnhtICppY21wX3BhcmFtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy00NjQtXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXHUwMDI2Zmw0KSk7XG5uZXQvaXB2NC9pY21wLmM6NDY1Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L2ljbXAuYy00NjYtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pY21wLmM9NDk0PXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICppY21wX3JvdXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZsNCxcbi0tXG5uZXQvaXB2NC9pY21wLmMtNTE5LVx0c2VjdXJpdHlfc2tiX2NsYXNzaWZ5X2Zsb3coc2tiX2luLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xubmV0L2lwdjQvaWNtcC5jOjUyMDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoKG5ldCwgZmw0LCBza2JfaW4pO1xubmV0L2lwdjQvaWNtcC5jLTUyMS1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2ljbXAuYy01NDYtXHRcdFx0XHQgICAgIGZsNF9kZWMuc2FkZHIpID09IFJUTl9MT0NBTCkge1xubmV0L2lwdjQvaWNtcC5jOjU0NzpcdFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0X2RlYyk7XG5uZXQvaXB2NC9pY21wLmMtNTQ4LVx0XHRpZiAoSVNfRVJSKHJ0MikpXG4tLVxubmV0L2lwdjQvaWNtcC5jLTU2Ni1cbm5ldC9pcHY0L2ljbXAuYzo1Njc6XHRcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNF8yKTtcbm5ldC9pcHY0L2ljbXAuYy01NjgtXHRcdGlmIChJU19FUlIocnQyKSkge1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy00MjAtXG5uZXQvaXB2NC9pZ21wLmM6NDIxOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcdTAwMjZmbDQsIE5VTEwsIElHTVBWM19BTExfTUNSLCAwLFxubmV0L2lwdjQvaWdtcC5jLTQyMi1cdFx0XHRcdCAgIDAsIDAsXG4tLVxubmV0L2lwdjQvaWdtcC5jPTc4Mj1zdGF0aWMgaW50IGlnbXBfc2VuZF9yZXBvcnQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy04MDctXG5uZXQvaXB2NC9pZ21wLmM6ODA4Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcdTAwMjZmbDQsIE5VTEwsIGRzdCwgMCxcbm5ldC9pcHY0L2lnbXAuYy04MDktXHRcdFx0XHQgICAwLCAwLFxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTg2PXN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMDAxLVx0aWYgKCFkZXYpIHtcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOlx0XHRzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dChuZXQsXG5uZXQvaXB2NC9pZ21wLmMtMjAwMy1cdFx0XHRcdFx0XHQgICAgaW1yLVx1MDAzZWltcl9tdWx0aWFkZHIuc19hZGRyLFxuLS1cbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzU4PXN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX3JlcShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NzYtXHRzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjc3NzpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtNzc4LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz03OTM9c3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcm91dGVfY2hpbGRfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MTMtXHRzZWN1cml0eV9yZXFfY2xhc3NpZnlfZmxvdyhyZXEsIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjgxNDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMtODE1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYz0xNTQxPXN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yZWJ1aWxkX3JvdXRlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGZsb3dpICpmbClcbi0tXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NDktXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIGZsNCk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jOjE1NTA6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NTEtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03Ni0gICAtIHRyYWNlcm91dGUgZG9lcyBub3Qgd29yay4gSSBwbGFubmVkIHRvIHJlbGF5IElDTVAgZnJvbSB0dW5uZWwsXG5uZXQvaXB2NC9pcF9ncmUuYzo3NzogICAgIHNvIHRoYXQgdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHNvbHZlZCBhbmQgdHJhY2Vyb3V0ZSBvdXRwdXRcbm5ldC9pcHY0L2lwX2dyZS5jLTc4LSAgICAgd291bGQgZXZlbiBtb3JlIGluZm9ybWF0aXZlLiBUaGlzIGlkZWEgYXBwZWFyZWQgdG8gYmUgd3Jvbmc6XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NjI1PXN0YXRpYyBpbnQgZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjM5LVx0XHRcdCAgICBza2ItXHUwMDNlbWFyaywgc2tiX2dldF9oYXNoKHNrYiksIGtleS1cdTAwM2VmbG93X2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjY0MDpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF9ncmUuYy02NDEtXHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz05NDE9c3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTU2LVxubmV0L2lwdjQvaXBfZ3JlLmM6OTU3Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF9ncmUuYy05NTgtXHRcdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L2lwX2lucHV0LmM9MjY5PWlwX3Jjdl9vcHRpb25zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDAtXHRcdFx0XHRpZiAoSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpKVxubmV0L2lwdjQvaXBfaW5wdXQuYzozMDE6XHRcdFx0XHRcdG5ldF9pbmZvX3JhdGVsaW1pdGVkKFwmIzM0O3NvdXJjZSByb3V0ZSBvcHRpb24gJXBJNCAtXHUwMDNlICVwSTRcXG5cJiMzNDssXG5uZXQvaXB2NC9pcF9pbnB1dC5jLTMwMi1cdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2aXBoLVx1MDAzZXNhZGRyLFxuLS1cbm5ldC9pcHY0L2lwX29wdGlvbnMuYy0zNC0gKiBXcml0ZSBvcHRpb25zIHRvIElQIGhlYWRlciwgcmVjb3JkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG9cbm5ldC9pcHY0L2lwX29wdGlvbnMuYzozNTogKiBzb3VyY2Ugcm91dGUgb3B0aW9uLCBhZGRyZXNzIG9mIG91dGdvaW5nIGludGVyZmFjZVxubmV0L2lwdjQvaXBfb3B0aW9ucy5jLTM2LSAqICh3ZSBzaG91bGQgYWxyZWFkeSBrbm93IGl0LCBzbyB0aGF0IHRoaXMgIGZ1bmN0aW9uIGlzIGFsbG93ZWQgYmVcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz00NjI9aW50IF9faXBfcXVldWVfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwsXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk0LVx0XHQgKi9cbm5ldC9pcHY0L2lwX291dHB1dC5jOjQ5NTpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk2LVx0XHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9pcF9vdXRwdXQuYz0xNjA1PXZvaWQgaXBfc2VuZF91bmljYXN0X3JlcGx5KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKm9yaWdfc2ssXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTY0OC1cdHNlY3VyaXR5X3NrYl9jbGFzc2lmeV9mbG93KHNrYiwgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcdTAwMjZmbDQpKTtcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NDk6XHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXHUwMDI2Zmw0LCBzayk7XG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjUwLVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ2LVx0fVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzo5NDc6XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ4LVx0XHRyZXR1cm4gaXBfbXJvdXRlX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0MDk9aW50IGlwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyMi1cdFx0XHRvcHRuYW1lICE9IElQX1hGUk1fUE9MSUNZIFx1MDAyNlx1MDAyNlxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDIzOlx0XHRcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDI0LVx0XHRlcnIgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNTA3PWludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MTctXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1MTg6XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTUxOS1cdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNzYwPWludCBpcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc3MC1cdGlmIChlcnIgPT0gLUVOT1BST1RPT1BUIFx1MDAyNlx1MDAyNiBvcHRuYW1lICE9IElQX1BLVE9QVElPTlMgXHUwMDI2XHUwMDI2XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3NzE6XHRcdFx0IWlwX21yb3V0ZV9vcHQob3B0bmFtZSkpIHtcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc3Mi1cdFx0aW50IGxlbjtcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0yOTktXHRcdFx0XHQgICAgdHVubmVsLVx1MDAzZXBhcm1zLmxpbmssIHR1bm5lbC1cdTAwM2Vmd21hcmssIDAsIDApO1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzAwOlx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVx1MDAzZW5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTMwMS1cbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYz01Njk9dm9pZCBpcF9tZF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYxMS1cdGlmICghcnQpIHtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jOjYxMjpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy02MTMtXHRcdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9NjY3PXZvaWQgaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03NzktXHRpZiAoIXJ0KSB7XG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3ODA6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvaXBfdHVubmVsLmMtNzgxLVxuLS1cbm5ldC9pcHY0L2lwX3Z0aS5jPTE2OT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnRpX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF92dGkuYy0xODYtXHRcdFx0ZmwtXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xubmV0L2lwdjQvaXBfdnRpLmM6MTg3Olx0XHRcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgXHUwMDI2ZmwtXHUwMDNldS5pcDQpO1xubmV0L2lwdjQvaXBfdnRpLmMtMTg4LVx0XHRcdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvaXBfdnRpLmMtMTk5LVx0XHRcdGZsLVx1MDAzZXUuaXA2LmZsb3dpNl9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcbm5ldC9pcHY0L2lwX3Z0aS5jOjIwMDpcdFx0XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgXHUwMDI2ZmwtXHUwMDNldS5pcDYpO1xubmV0L2lwdjQvaXBfdnRpLmMtMjAxLVx0XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzU2PXN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zNzEtXG5uZXQvaXB2NC9pcGlwLmM6MzcyOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgdGlwaC1cdTAwM2VkYWRkciwgdGlwaC1cdTAwM2VzYWRkcixcbm5ldC9pcHY0L2lwaXAuYy0zNzMtXHRcdFx0ICAgICBpbmV0X2RzZmllbGRfdG9fZHNjcCh0aXBoLVx1MDAzZXRvcyksXG4tLVxubmV0L2lwdjQvaXBtci5jPTE5MDI9c3RhdGljIGludCBpcG1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xOTI1LVx0aWYgKHZpZi1cdTAwM2VmbGFncyBcdTAwMjYgVklGRl9UVU5ORUwpIHtcbm5ldC9pcHY0L2lwbXIuYzoxOTI2Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIFx1MDAyNmZsNCwgTlVMTCxcbm5ldC9pcHY0L2lwbXIuYy0xOTI3LVx0XHRcdFx0XHQgICB2aWYtXHUwMDNlcmVtb3RlLCB2aWYtXHUwMDNlbG9jYWwsXG4tLVxubmV0L2lwdjQvaXBtci5jLTE5MzQtXHR9IGVsc2Uge1xubmV0L2lwdjQvaXBtci5jOjE5MzU6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXHUwMDI2Zmw0LCBOVUxMLCBpcGgtXHUwMDNlZGFkZHIsIDAsXG5uZXQvaXB2NC9pcG1yLmMtMTkzNi1cdFx0XHRcdFx0ICAgMCwgMCxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz0yMj1pbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgYWRkcl90eXBlKVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci5jLTUzLVx0ZmliNF9ydWxlc19lYXJseV9mbG93X2Rpc3NlY3QobmV0LCBza2IsIFx1MDAyNmZsNCwgXHUwMDI2ZmxrZXlzKTtcbm5ldC9pcHY0L25ldGZpbHRlci5jOjU0Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L25ldGZpbHRlci5jLTU1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyLmM9OTE9aW50IG5mX2lwX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy05My17XG5uZXQvaXB2NC9uZXRmaWx0ZXIuYzo5NDpcdHN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsLVx1MDAzZXUuaXA0KTtcbm5ldC9pcHY0L25ldGZpbHRlci5jLTk1LVx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTM4LVx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzozOTpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy00MC1cdGlmIChJU19FUlIocnQpKVxuLS1cbm5ldC9pcHY0L3BpbmcuYz02ODg9c3RhdGljIGludCBwaW5nX3Y0X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcGluZy5jLTc4Mi1cdHNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssIGZsb3dpNF90b19mbG93aV9jb21tb24oXHUwMDI2Zmw0KSk7XG5uZXQvaXB2NC9waW5nLmM6NzgzOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIFx1MDAyNmZsNCwgc2spO1xubmV0L2lwdjQvcGluZy5jLTc4NC1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcmF3LmM9NDg5PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L2lwdjQvcmF3LmMtNjM1LVx0c2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcdTAwMjZmbDQpKTtcbm5ldC9pcHY0L3Jhdy5jOjYzNjpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcdTAwMjZmbDQsIHNrKTtcbm5ldC9pcHY0L3Jhdy5jLTYzNy1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy01MC0gKlx0Vml0YWx5IEUuIExhdnJvdlx0Olx0UmFjZSBjb25kaXRpb24gaW4gaXBfcm91dGVfaW5wdXRfc2xvdy5cbm5ldC9pcHY0L3JvdXRlLmM6NTE6ICpcdFRvYmlhcyBSaW5nc3Ryb21cdDpcdFVuaW5pdGlhbGl6ZWQgcmVzLnR5cGUgaW4gaXBfcm91dGVfb3V0cHV0X3Nsb3cuXG5uZXQvaXB2NC9yb3V0ZS5jLTUyLSAqXHRWbGFkaW1pciBWLiBJdmFub3ZcdDpcdElQIHJ1bGUgaW5mbyAoZmxvd2lkKSBpcyByZWFsbHkgdXNlZnVsLlxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTExNj12b2lkIGlwdjRfdXBkYXRlX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTEyNS1cdFx0XHQgMCk7XG5uZXQvaXB2NC9yb3V0ZS5jOjExMjY6XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTExMjctXHRpZiAoIUlTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTExMzQ9c3RhdGljIHZvaWQgX19pcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExNDQtXG5uZXQvaXB2NC9yb3V0ZS5jOjExNDU6XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShzb2NrX25ldChzayksIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTExNDYtXHRpZiAoIUlTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTExNTI9dm9pZCBpcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExNzYtXHRpZiAoUkVBRF9PTkNFKG9kc3QtXHUwMDNlb2Jzb2xldGUpIFx1MDAyNlx1MDAyNiAhb2RzdC1cdTAwM2VvcHMtXHUwMDNlY2hlY2sob2RzdCwgMCkpIHtcbm5ldC9pcHY0L3JvdXRlLmM6MTE3NzpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIFx1MDAyNmZsNCwgc2spO1xubmV0L2lwdjQvcm91dGUuYy0xMTc4LVx0XHRpZiAoSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTExODktXG5uZXQvaXB2NC9yb3V0ZS5jOjExOTA6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCBcdTAwMjZmbDQsIHNrKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTE5MS1cdFx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjQvcm91dGUuYz0xMjA1PXZvaWQgaXB2NF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xMjEyLVx0X19idWlsZF9mbG93X2tleShuZXQsIFx1MDAyNmZsNCwgTlVMTCwgaXBoLCBvaWYsIGlwaC1cdTAwM2V0b3MsIHByb3RvY29sLCAwLCAwKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTIxMzpcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L3JvdXRlLmMtMTIxNC1cdGlmICghSVNfRVJSKHJ0KSkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTIyMT12b2lkIGlwdjRfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTIyOC1cdF9fYnVpbGRfZmxvd19rZXkobmV0LCBcdTAwMjZmbDQsIHNrLCBpcGgsIDAsIDAsIDAsIDAsIDApO1xubmV0L2lwdjQvcm91dGUuYzoxMjI5Olx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcdTAwMjZmbDQpO1xubmV0L2lwdjQvcm91dGUuYy0xMjMwLVx0aWYgKCFJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNjA0PUVYUE9SVF9TWU1CT0woaXBfcm91dGVfaW5wdXRfbm9yZWYpO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjYwNi0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cbm5ldC9pcHY0L3JvdXRlLmM6MjYwNzpzdGF0aWMgc3RydWN0IHJ0YWJsZSAqX19ta3JvdXRlX291dHB1dChjb25zdCBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxubmV0L2lwdjQvcm91dGUuYy0yNjA4LVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9yaWdfb2lmLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjczNS1cbm5ldC9pcHY0L3JvdXRlLmM6MjczNjpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG5uZXQvaXB2NC9yb3V0ZS5jLTI3MzctXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNzQ5LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjQvcm91dGUuYzoyNzUwOlx0cnRoID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShuZXQsIGZsNCwgXHUwMDI2cmVzLCBza2IpO1xubmV0L2lwdjQvcm91dGUuYy0yNzUxLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNzU0LX1cbm5ldC9pcHY0L3JvdXRlLmM6Mjc1NTpFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2gpO1xubmV0L2lwdjQvcm91dGUuYy0yNzU2LVxubmV0L2lwdjQvcm91dGUuYzoyNzU3OnN0cnVjdCBydGFibGUgKmlwX3JvdXRlX291dHB1dF9rZXlfaGFzaF9yY3Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXG5uZXQvaXB2NC9yb3V0ZS5jLTI3NTgtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjkxOS1tYWtlX3JvdXRlOlxubmV0L2lwdjQvcm91dGUuYzoyOTIwOlx0cnRoID0gX19ta3JvdXRlX291dHB1dChyZXMsIGZsNCwgb3JpZ19vaWYsIGRldl9vdXQsIGZsYWdzKTtcbm5ldC9pcHY0L3JvdXRlLmMtMjkyMS1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI5Mzc9c3RydWN0IGRzdF9lbnRyeSAqaXB2NF9ibGFja2hvbGVfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Rfb3JpZylcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NzMtXG5uZXQvaXB2NC9yb3V0ZS5jOjI5NzQ6c3RydWN0IHJ0YWJsZSAqaXBfcm91dGVfb3V0cHV0X2Zsb3coc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbHA0LFxubmV0L2lwdjQvcm91dGUuYy0yOTc1LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3JvdXRlLmMtMjk3Ni17XG5uZXQvaXB2NC9yb3V0ZS5jOjI5Nzc6XHRzdHJ1Y3QgcnRhYmxlICpydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIGZscDQpO1xubmV0L2lwdjQvcm91dGUuYy0yOTc4LVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMjk5MC19XG5uZXQvaXB2NC9yb3V0ZS5jOjI5OTE6RVhQT1JUX1NZTUJPTF9HUEwoaXBfcm91dGVfb3V0cHV0X2Zsb3cpO1xubmV0L2lwdjQvcm91dGUuYy0yOTkyLVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MzMzNT1zdGF0aWMgaW50IGluZXRfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMzQyMi1cdFx0c2tiLVx1MDAzZWRldiA9IG5ldC1cdTAwM2Vsb29wYmFja19kZXY7XG5uZXQvaXB2NC9yb3V0ZS5jOjM0MjM6XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleV9oYXNoX3JjdShuZXQsIFx1MDAyNmZsNCwgXHUwMDI2cmVzLCBza2IpO1xubmV0L2lwdjQvcm91dGUuYy0zNDI0LVx0XHRlcnIgPSAwO1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MzY5Mj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zNzAxLVxubmV0L2lwdjQvcm91dGUuYzozNzAyOnN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX3JvdXRlX29wcyA9IHtcbm5ldC9pcHY0L3JvdXRlLmMtMzcwMy1cdC5pbml0ID0gc3lzY3RsX3JvdXRlX25ldF9pbml0LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mzc2Nz1pbnQgX19pbml0IGlwX3J0X2luaXQodm9pZClcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzItI2lmZGVmIENPTkZJR19TWVNDVExcbm5ldC9pcHY0L3JvdXRlLmM6MzgzMzpcdHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2c3lzY3RsX3JvdXRlX29wcyk7XG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzQtI2VuZGlmXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDY3LVx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFx1MDAyNmZsNCkpO1xubmV0L2lwdjQvc3luY29va2llcy5jOjQ2ODpcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFx1MDAyNmZsNCk7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtNDY5LVx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC91ZHAuYz0xMjQ2PWludCB1ZHBfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbilcbi0tXG5uZXQvaXB2NC91ZHAuYy0xNDIxLVx0XHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xubmV0L2lwdjQvdWRwLmM6MTQyMjpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xubmV0L2lwdjQvdWRwLmMtMTQyMy1cdFx0aWYgKElTX0VSUihydCkpIHtcbi0tXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYz0yMjU9c3RydWN0IHJ0YWJsZSAqdWRwX3R1bm5lbF9kc3RfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtMjU0LVxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmM6MjU1Olx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTI1Ni1cdGlmIChJU19FUlIocnQpKSB7XG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9MjE9c3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKl9feGZybTRfZHN0X2xvb2t1cChzdHJ1Y3QgZmxvd2k0ICpmbDQsXG4tLVxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtMzYtXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzozNzpcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHBhcmFtcy1cdTAwM2VuZXQsIGZsNCk7XG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy0zOC1cdGlmICghSVNfRVJSKHJ0KSlcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXHRcdGFkZHJsYWJlbC5vIFxcXG5uZXQvaXB2Ni9NYWtlZmlsZToxMDpcdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTExLVx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbi0tXG5uZXQvaXB2Ni9pY21wLmM9MTk1PXN0YXRpYyBib29sIGljbXB2Nl94cmxpbV9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsXG4tLVxubmV0L2lwdjYvaWNtcC5jLTIxMC1cdCAqL1xubmV0L2lwdjYvaWNtcC5jOjIxMTpcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgZmw2KTtcbm5ldC9pcHY2L2ljbXAuYy0yMTItXHRyY3VfcmVhZF9sb2NrKCk7XG4tLVxubmV0L2lwdjYvaWNtcC5jPTIzOT1zdGF0aWMgYm9vbCBpY21wdjZfcnRfaGFzX3ByZWZzcmMoc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxuLS1cbm5ldC9pcHY2L2ljbXAuYy0yNDUtXG5uZXQvaXB2Ni9pY21wLmM6MjQ2Olx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xubmV0L2lwdjYvaWNtcC5jLTI0Ny1cdGlmICghZHN0LVx1MDAzZWVycm9yKSB7XG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYz0zOD1zdGF0aWMgaW50IGlsYV9vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03Ny1cbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM6Nzg6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03OS1cdFx0aWYgKGRzdC1cdTAwM2VlcnJvcikge1xuLS1cbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM9MzM4PXN0YXRpYyBpbnQgaW9hbTZfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNDE2LVxubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYzo0MTc6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvaW9hbTZfaXB0dW5uZWwuYy00MTgtXHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtOS0gKlx0Q2hhbmdlczpcbm5ldC9pcHY2L2lwNl9maWIuYzoxMDogKlx0WXVqaSBTRUtJWUEgQFVTQUdJOlx0U3VwcG9ydCBkZWZhdWx0IHJvdXRlIG9uIHJvdXRlciBub2RlO1xubmV0L2lwdjYvaXA2X2ZpYi5jLTExLSAqXHRcdFx0XHRyZW1vdmUgaXA2X251bGxfZW50cnkgZnJvbSB0aGUgdG9wIG9mXG4tLVxubmV0L2lwdjYvaXA2X291dHB1dC5jPTExMzc9c3RhdGljIGludCBpcDZfZHN0X2xvb2t1cF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTQ3LVx0LyogVGhlIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRvIGRvXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE0ODpcdCAqIGlwNl9yb3V0ZV9nZXRfc2FkZHIsIGFuZCB0aGVuIGlwNl9yb3V0ZV9vdXRwdXQ7IGhvd2V2ZXIsXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE0OS1cdCAqIHRoZSByb3V0ZS1zcGVjaWZpYyBwcmVmZXJyZWQgc291cmNlIGZvcmNlcyB0aGVcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTUwOlx0ICogaXA2X3JvdXRlX291dHB1dCBjYWxsIF9iZWZvcmVfIGlwNl9yb3V0ZV9nZXRfc2FkZHIuXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1MS1cdCAqXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1Mi1cdCAqIEluIHNvdXJjZSBzcGVjaWZpYyByb3V0aW5nIChubyBzcmM9YW55IGRlZmF1bHQgcm91dGUpLFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTM6XHQgKiBpcDZfcm91dGVfb3V0cHV0IHdpbGwgZmFpbCBnaXZlbiBzcmM9YW55IHNhZGRyLCB0aG91Z2gsIHNvXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1NC1cdCAqIHRoYXQmIzM5O3Mgd2h5IHdlIHRyeSBpdCBhZ2FpbiBsYXRlci5cbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1OS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTYwOlx0XHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNjEtXHRcdHJ0ID0gKCpkc3QpLVx1MDAzZWVycm9yID8gTlVMTCA6IGRzdF9ydDZfaW5mbygqZHN0KTtcbi0tXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE4Ny1cdGlmICghKmRzdClcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMTg4Olx0XHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dF9mbGFncyhuZXQsIHNrLCBmbDYsIGZsYWdzKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTg5LVxuLS1cbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMjI5LVx0XHRcdG1lbXNldChcdTAwMjZmbF9ndzYuZGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTtcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMjMwOlx0XHRcdCpkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFx1MDAyNmZsX2d3Nik7XG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTIzMS1cdFx0XHRlcnIgPSAoKmRzdCktXHUwMDNlZXJyb3I7XG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTU2Nz1pcDRpcDZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MjItXHQvKiBUcnkgdG8gZ3Vlc3MgaW5jb21pbmcgaW50ZXJmYWNlICovXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjIzOlx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMoZGV2X25ldChza2ItXHUwMDNlZGV2KSwgXHUwMDI2Zmw0LCBOVUxMLCBlaXBoLVx1MDAzZXNhZGRyLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTYyNC1cdFx0XHRcdCAgIDAsIDAsIDAsIElQUFJPVE9fSVBJUCxcbi0tXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjMzLVx0aWYgKHJ0LVx1MDAzZXJ0X2ZsYWdzIFx1MDAyNiBSVENGX0xPQ0FMKSB7XG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjM0Olx0XHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhkZXZfbmV0KHNrYi1cdTAwM2VkZXYpLCBcdTAwMjZmbDQsIE5VTEwsXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjM1LVx0XHRcdFx0XHQgICBlaXBoLVx1MDAzZWRhZGRyLCBlaXBoLVx1MDAzZXNhZGRyLCAwLCAwLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xMTAwPWludCBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX191OCBkc2ZpZWxkLFxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xMTc5LVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjExODA6XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBmbDYpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTExODEtXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Mzk9c3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjQtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg2NTpcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChjdHgtXHUwMDNlZGV2KSwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODY2LVx0aWYgKCFkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZfdnRpLmM9NDQzPXZ0aTZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmxvd2kgKmZsKVxuLS1cbm5ldC9pcHY2L2lwNl92dGkuYy00NTktXHRcdFx0ZmwtXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xubmV0L2lwdjYvaXA2X3Z0aS5jOjQ2MDpcdFx0XHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShkZXZfbmV0KGRldiksIFx1MDAyNmZsLVx1MDAzZXUuaXA0KTtcbm5ldC9pcHY2L2lwNl92dGkuYy00NjEtXHRcdFx0aWYgKElTX0VSUihydCkpXG4tLVxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ2OS1cdFx0XHRmbC1cdTAwM2V1LmlwNi5mbG93aTZfZmxhZ3MgfD0gRkxPV0lfRkxBR19BTllTUkM7XG5uZXQvaXB2Ni9pcDZfdnRpLmM6NDcwOlx0XHRcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChkZXYpLCBOVUxMLCBcdTAwMjZmbC1cdTAwM2V1LmlwNik7XG5uZXQvaXB2Ni9pcDZfdnRpLmMtNDcxLVx0XHRcdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTIwODI9c3RhdGljIGludCBpcDZtcl9wcmVwYXJlX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTIxMTItXG5uZXQvaXB2Ni9pcDZtci5jOjIxMTM6XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjExNC1cdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0zOTUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzk2Olx0aWYgKGlwNl9tcm91dGVfb3B0KG9wdG5hbWUpKVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5Ny1cdFx0cmV0dXJuIGlwNl9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTk9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDUtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwNjpcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDA3LVx0XHRyZXR1cm4gaXA2X21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4tLVxubmV0L2lwdjYvbmRpc2MuYz0xNjY0PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTE3MDEtXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDI6XHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXHUwMDI2Zmw2KTtcbm5ldC9pcHY2L25kaXNjLmMtMTcwMy1cdGlmIChkc3QtXHUwMDNlZXJyb3IpIHtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz0yND1pbnQgaXA2X3JvdXRlX21lX2hhcmRlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpza19wYXJ0aWFsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jLTQ5LVx0ZmliNl9ydWxlc19lYXJseV9mbG93X2Rpc3NlY3QobmV0LCBza2IsIFx1MDAyNmZsNiwgXHUwMDI2ZmxrZXlzKTtcbm5ldC9pcHY2L25ldGZpbHRlci5jOjUwOlx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBcdTAwMjZmbDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtNTEtXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyLmM9ODk9aW50IF9fbmZfaXA2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCxcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy05My1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9zb2NrIGZha2Vfc2sgPSB7XG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo5NDpcdFx0LyogbWFrZXMgaXA2X3JvdXRlX291dHB1dCBzZXQgUlQ2X0xPT0tVUF9GX0lGQUNFOiAqL1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTUtXHRcdC5zay5za19ib3VuZF9kZXZfaWYgPSAxLFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci5jLTEwMS1cbm5ldC9pcHY2L25ldGZpbHRlci5jOjEwMjpcdHJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgXHUwMDI2ZmwtXHUwMDNldS5pcDYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyLmMtMTAzLVx0ZXJyID0gcmVzdWx0LVx1MDAzZWVycm9yO1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jPTE5PXN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0zMy1cdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDgyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IElkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMgYW5kIEVudHJ5cG9pbnRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIHdpdGhpbiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyByb3V0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBsaXN0cyBmb3IgSVB2NCBhbmQgSVB2Ni4KCkZpcnN0LCBsb29raW5nIGF0IGBuZXQvaXB2NC9yb3V0ZS5jYCwgSSBzZWUgdGhhdCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGhhcyBiZWVuIG1vZGlmaWVkLiBJdCBub3cgY2FsY3VsYXRlcyB0aGUgaGFzaCBidWNrZXQgdXNpbmcgYGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KWAgYW5kIHN0b3JlcyBpdCBpbiBgcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0YC4gQWxzbywgYHJ0X2ZsdXNoX2RldmAgaXMgbW9kaWZpZWQgdG8gZmx1c2ggZnJvbSBhIHNwZWNpZmljIGJ1Y2tldC4gVGhlbiwgYGlwX3J0X2luaXRgIGlzIGNoYW5nZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIGJ1Y2tldCBpbiB0aGUgdGFibGUgcGVyIENQVS4KCk5leHQsIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgdGhlIGNoYW5nZXMgYXJlIGEgYml0IG1vcmUgaW50cmljYXRlLiBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJvdXRlJiMzOTtzIGludGVyZmFjZSBkZXZpY2UgKGBydC0mZ3Q7cnQ2aV9pZGV2YCkgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIHJvdXRlJiMzOTtzIGRldmljZSAoYHJ0X2RldmApLCBwbGFjaW5nIHRoZSByb3V0ZSBpbiBgdGFibGUtJmd0O21pc21hdGNoYCBpZiBpdCBkb2VzbiYjMzk7dC4gT3RoZXJ3aXNlLCBpdCB1c2VzIHRoZSBzdGFuZGFyZCBidWNrZXQuIEEgbmV3IGhlbHBlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSBsYXR0ZXIgaXMgbW9kaWZpZWQgdG8gZmx1c2ggdGhlIG1hdGNoaW5nIGJ1Y2tldCBhbmQgYWxzbyBgdGFibGUtJmd0O21pc21hdGNoYC4gQWxzbywgYGlwNl9yb3V0ZV9pbml0YCBoYXMgYmVlbiB1cGRhdGVkIHRvIGluaXRpYWxpemUgZWFjaCBidWNrZXQgYW5kIHRoZSBtaXNtYXRjaCBsaXN0IHBlciBDUFUuCgpNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gdGhlIGZhY3QgdGhhdCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBpcyBjYWxsZWQgYnkgYHJ0Nl9kaXNhYmxlX2lwYCDigJMgdGhpcyBpcyBhIGtleSBwb2ludCBzaW5jZSB0aGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93bi4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nOiBJcyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBzdGF0aWM/IEkganVzdCBmb3VuZCBvdXQsIHllcywgaXQmIzM5O3Mgc3RhdGljISBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBpcyBzdGF0aWMgYXMgd2VsbC4gQnV0IHdhaXQsIGhlcmUgaXMgYW4gaW1wb3J0YW50IHBvaW50IHRvIGNvbnNpZGVyLiAKCkhvd2V2ZXIsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGlzIG5vbi1zdGF0aWMgKGEgZ29vZCB0aGluZyEpLCBhbmQgc28gaXMgYHJ0Nl9kaXNhYmxlX2lwYC4gU28gaXMgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBhbmQgYHJ0X2ZsdXNoX2RldmAuIEV2ZW4gdGhvdWdoIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIHN0YXRpYywgSSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdm1saW51eCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBpbmxpbmVkIGV4aXN0IGluIGthbGxzeW1zIGlmIG5vdCBpbmxpbmVkLgoKTm93LCBjb25zaWRlcmluZyB0aGUgZ3VpZGVsaW5lcyBmcm9tIFNlY3Rpb24gNCwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiBmdW5jdGlvbnMgdGhhdCBpbXBsZW1lbnQgdGhlIGxvZ2ljIG9yIGFyZSB0aGUgZW50cnlwb2ludHMgdG8gdGhlIGZlYXR1cmUuIEl0IHNheXMgdGhhdCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGRpcmVjdGx5IHRhcmdldGFibGUsIGJ1dCB3ZSBzaG91bGQgaWRlbnRpZnkgbm9uLXN0YXRpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhlbS4KClNvLCBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YCBhcmUgZXhwb3J0ZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLiBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgaXMgbm9uLXN0YXRpYyBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIEZpbmFsbHksIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIGNhbGxlZCBieSBgcnQ2X2Rpc2FibGVfaXBgIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGtub3cgdGhlIGNhbGwgc3RydWN0dXJlIGFuZCBlbnRyeSBwb2ludHMgaW4gdGhlIHN5c3RlbS4KCk5vdywgYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZTogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz0xNzc9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMjA4LVxubmV0L2lwdjYvcm91dGUuYzoyMDk6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2Ni9yb3V0ZS5jLTIxMC17XG4tLVxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTUwNzgtXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcbm5ldC9pcHY2L3JvdXRlLmM6NTA3OTpcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihkZXYpO1xubmV0L2lwdjYvcm91dGUuYy01MDgwLVx0bmVpZ2hfaWZkb3duKG5kX3RhYmxlKG5ldCksIGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDYwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBVbmNhY2hlZCBSb3V0ZSBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCB3YXMgZGlyZWN0bHkgYWx0ZXJlZC4gR29vZCwgaXQgd2FzbiYjMzk7dC4gSG93ZXZlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCB3YXMgaW50cm9kdWNlZCBhcyBhIGhlbHBlciBmdW5jdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2AsIGFuZCBpbXBvcnRhbnRseSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgd2FzIG1vZGlmaWVkLCBhbmQgYHJ0Nl9kaXNhYmxlX2lwYCBpcyB0aGUgbm9uLXN0YXRpYyBjYWxsZXIgb2YgaXQuCgpOb3csIGxldCYjMzk7cyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCBhbmQgYHJ0X2ZsdXNoX2RldmAgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIC0tIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIEFuZCB3aGlsZSBJJiMzOTttIGF0IGl0LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AgaXMgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuCgpOZXh0LCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHRlc3Qgc3VpdGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBicmVhayBhbnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIHRlc3QgYHRlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpYCBsb29rcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGl0JiMzOTtzIGZvY3VzaW5nIG9uIGxvY2FsIHJvdXRlcyB0aHJvdWdoIGEgVlJGLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyB0aGUgc2NlbmFyaW8gb2YgYSBWUkYgYmVpbmcgdXNlZCBhcyBgZHN0LmRldmAgd2hpbGUgcmV0YWluaW5nIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBgcnQ2aV9pZGV2YC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgcmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIGR1cmluZyBpbnRlcmZhY2UgZGVsZXRpb24uCgpGaW5hbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBjaGVjayBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBJIHNlZSB0aGF0IHRoZSBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBjb25maWcgb3B0aW9ucyBleGlzdCBpbiBib3RoIHRoZSBJUHY0IGFuZCBJUHY2IEtjb25maWcgZmlsZXMsIGFuZCBhcmUgY29uZGl0aW9uYWwgb24gYElORVRgIGFuZCBgSVBWNmAsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgaW1wbGljaXQgZGVwZW5kZW5jeS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGNvbmZpcm0gdGhhdCBJUHY0IGFuZCBJUHY2IHJvdXRlIGhhc2ggY29uZmlndXJhdGlvbnMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4gSSB3aWxsIGFsc28gY2hlY2sgd2hlcmUgYElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU2AgaXMgZGVmaW5lZCBpbiBgbmV0L2lwdjQvS2NvbmZpZ2AgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIElQIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIElQX01VTFRJQ0FTVFxuICAgNjpcdFx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0aW5nXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgaXMgY29kZSBmb3IgYWRkcmVzc2luZyBzZXZlcmFsIG5ldHdvcmtlZCBjb21wdXRlcnMgYXQgb25jZSxcbiAgIDk6XHRcdCAgZW5sYXJnaW5nIHlvdXIga2VybmVsIGJ5IGFib3V0IDIgS0IuIFlvdSBuZWVkIG11bHRpY2FzdGluZyBpZiB5b3VcbiAgMTA6XHRcdCAgaW50ZW5kIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBNQk9ORSwgYSBoaWdoIGJhbmR3aWR0aCBuZXR3b3JrIG9uIHRvcFxuICAxMTpcdFx0ICBvZiB0aGUgSW50ZXJuZXQgd2hpY2ggY2FycmllcyBhdWRpbyBhbmQgdmlkZW8gYnJvYWRjYXN0cy4gTW9yZVxuICAxMjpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgTUJPTkUgaXMgb24gdGhlIFdXVyBhdFxuICAxMzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5zYXZldHouY29tL21ib25lL1x1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCYjMzk7cyBzYWZlIHRvIHNheSBOLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7SVA6IGFkdmFuY2VkIHJvdXRlclwmIzM0O1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBJZiB5b3UgaW50ZW5kIHRvIHJ1biB5b3VyIExpbnV4IGJveCBtb3N0bHkgYXMgYSByb3V0ZXIsIGkuZS4gYXMgYVxuICAxOTpcdFx0ICBjb21wdXRlciB0aGF0IGZvcndhcmRzIGFuZCByZWRpc3RyaWJ1dGVzIG5ldHdvcmsgcGFja2V0cywgc2F5IFk7IHlvdVxuICAyMDpcdFx0ICB3aWxsIHRoZW4gYmUgcHJlc2VudGVkIHdpdGggc2V2ZXJhbCBvcHRpb25zIHRoYXQgYWxsb3cgbW9yZSBwcmVjaXNlXG4gIDIxOlx0XHQgIGNvbnRyb2wgYWJvdXQgdGhlIHJvdXRpbmcgcHJvY2Vzcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIHdvbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcbiAgMjQ6XHRcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXG4gIDI1Olx0XHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzQ5NgoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiAxMzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuY2FjaGVkIFJvdXRlIExvZ2ljIENoYW5nZXMgZm9yIEZ1enppbmcgRm9jdXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSBleGFtaW5pbmcgdGhpcyBwYXRjaCByZWxhdGVkIHRvIHVuY2FjaGVkIHJvdXRlcywgc3BlY2lmaWNhbGx5IHRoZSByZXN0cnVjdHVyaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb2RlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBmb3IgZnV6emluZy4KCkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCBgbmV0L0tjb25maWdgLCBpdCYjMzk7cyBjbGVhciB0aGF0IGBJTkVUYCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgSVB2NCBhbmQgYElQVjZgIGZvciBJUHY2IHJvdXRpbmcuIFRoZXNlIGFyZSB0aGUgdG9wLWxldmVsIGRlcGVuZGVuY2llcywgYW5kIHRoZSBjb2RlIGRpcmVjdGx5IG1vZGlmaWVzIGZpbGVzIHdpdGhpbiBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgLCBzbyB0aGV5JiMzOTtyZSBlc3NlbnRpYWwuIGBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGFuZCBgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGFyZSBhbHNvIGRlZmluZWQsIGJ1dCB0aGV5IGhhdmUgZGVmYXVsdHMsIHNvIGVuYWJsaW5nIGBJTkVUYCBhbmQgYElQVjZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIHZhbGlkYXRlZCBieSBjaGVja2luZyB0aGUgYG5ldC9NYWtlZmlsZWAsIHdoaWNoIGNvbmZpcm1zIHRoYXQgdGhlIGBpcHY0YCBhbmQgYGlwdjZgIHN1YmRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZCBiYXNlZCBvbiB0aGVzZSBgQ09ORklHX2AgZmxhZ3MuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBoYW5kbGVkLCBzbyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVpciBhZGRpdGlvbiBhbmQgZmx1c2hpbmcgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAsIGBydF9mbHVzaF9kZXZgLCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAuIEFsdGhvdWdoIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGFyZSBzdGF0aWMsIGBydDZfZGlzYWJsZV9pcGAgdGhhdCBjYWxscyBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCBpcyBleHBvcnRlZCwgc28gSSBjYW4gaW5jbHVkZSB0aGVtLiBUaGUgYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAgZnVuY3Rpb24gd2FzbiYjMzk7dCBtb2RpZmllZCBpbiB0aGUgcGF0Y2guIFRoZSBib290LXRpbWUgYF9faW5pdGAgZnVuY3Rpb25zLCBsaWtlIGBpcF9ydF9pbml0YCwgYXJlIGxlc3MgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGFzIHRoZSBwYXRjaCB0YXJnZXRzIHJ1bnRpbWUgYmVoYXZpb3IuCgpTbywgaGVyZSYjMzk7cyBteSBsaXN0IG9mIGZvY3VzZWQgc3ltYm9sczogYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgYW5kIGBydDZfZGlzYWJsZV9pcGAuIE5vbmUgb2YgdGhlc2Ugc2VlbSB0byBiZSBnZW5lcmFsLXB1cnBvc2UgaG90LXBhdGggb3IgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBzbyB0aGV5IHNob3VsZCBiZSByZWxhdGl2ZWx5IHRhcmdldGVkIHRvIHRoZSB1bmNhY2hlZCByb3V0ZSBmdW5jdGlvbmFsaXR5LgoKRmluYWxseSwgSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gQ29uc2lkZXJpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBJUHY0L0lQdjYgbmV0d29ya2luZyBjb2RlLCBhbHRlcnMgdGhlIGZ1bmRhbWVudGFsIHVuY2FjaGVkIHJvdXRlIGRhdGEgc3RydWN0dXJlIChmcm9tIHBlci1jcHUgbGlzdHMgdG8gcGVyLWNwdSBoYXNoIHRhYmxlcywgd2l0aCBhIHNwZWNpYWwgY2FzZSBmb3IgSVB2NiksIGFuZCB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHZpcnR1YWwgZGV2aWNlIG1hbmlwdWxhdGlvbiAobGlrZSBjcmVhdGluZyBhbmQgZGVsZXRpbmcgaW50ZXJmYWNlcyB3aGlsZSBzZW5kaW5nIHRyYWZmaWMpLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIFRoZSBjb2RlIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKVGhlcmVmb3JlLCBteSBmaW5hbCBwYXJhbWV0ZXJzIGZvciBgc2V0LXJlc3VsdHNgIGFyZToKCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtJTkVUJiMzNDssICYjMzQ7SVBWNiYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9hZGQmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYmIzM0OywgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCYjMzQ7LCAmIzM0O3J0Nl9kaXNhYmxlX2lwJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBsb2dpYy4gSXQgcmVzdHJ1Y3R1cmVzIHRoZSB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSwgaGFuZGxpbmcgcm91dGUgYWRkaXRpb24sIGhhc2hpbmcsIGFuZCBmbHVzaGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JraW5nIHN5c2NhbGxzIGFuZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBSZWFkeSB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRfYWRkX3VuY2FjaGVkX2xpc3QmIzM0OywKICAgICYjMzQ7cnRfZmx1c2hfZGV2JiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2FkZCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCYjMzQ7LAogICAgJiMzNDtydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X2Rpc2FibGVfaXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydF9hZGRfdW5jYWNoZWRfbGlzdCYjMzQ7LAogICAgJiMzNDtydF9mbHVzaF9kZXYmIzM0OywKICAgICYjMzQ7cnQ2X3VuY2FjaGVkX2xpc3RfYWRkJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoJiMzNDssCiAgICAmIzM0O3J0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldiYjMzQ7LAogICAgJiMzNDtydDZfZGlzYWJsZV9pcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcblxuQWxsIG5ld2x5IGludHJvZHVjZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgcGVyLUNQVSB0YWJsZXMgd2hvc2UgYnVja2V0cyAobGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QgaW4gaXBfcnRfaW5pdCgpIGFuZCBpcDZfcm91dGVfaW5pdCgpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zIGNoYW5nZXMpLCBhbmQgY29udGFpbnMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBcblxuQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IGxpc3QgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGRldmljZSByZWZlcmVuY2UgdHJhY2tpbmcgKHN1Y2ggYXMgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgdHJhY2tpbmcuIENvbnNlcXVlbnRseSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnCmluZGV4IDMwMWI0NzY2MDMwNWIuLjdkNDBjYTIyZDJiMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvS2NvbmZpZwpAQCAtMTAzLDYgJiM0MzsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0UKIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lECiAJYm9vbAogCiYjNDM7Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUwomIzQzOwlpbnQgJiMzNDtJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0cyYjMzQ7CiYjNDM7CXJhbmdlIDEgMTAKJiM0MzsJZGVmYXVsdCA2CiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkCiYjNDM7CSAgcm91dGUgaGFzaCB0YWJsZSB0byAyXklQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGUKJiM0MzsJICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXMKJiM0MzsJICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVQomIzQzOwkgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLgomIzQzOwogY29uZmlnIElQX1BOUAogCWJvb2wgJiMzNDtJUDoga2VybmVsIGxldmVsIGF1dG9jb25maWd1cmF0aW9uJiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTc0LDYgJiM0Mzs3NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2luZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaGFzaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lnbXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wa3Rfc2NoZWQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tcm91dGUuaCZndDsKQEAgLTE1NTIsMTEgJiM0MzsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhlYWQ7CiB9OwogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7CiYjNDM7I2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpCiYjNDM7CiYjNDM7c3RydWN0IHVuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVF9VTkNBQ0hFRF9IQVNIX1NJWkVdOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7CiAKIHZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpCiB7Ci0Jc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKCZhbXA7cnRfdW5jYWNoZWRfdGFibGUpOwomIzQzOwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7CiYjNDM7CiYjNDM7CXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCksCiYjNDM7CQkJCSAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKIAogCXJ0LSZndDtkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsOwogCkBAIC0xNTg4LDE0ICYjNDM7MTU5OSwxOSBAQCB2b2lkIHJ0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWludCBjcHU7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9ICZhbXA7cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpOwomIzQzOwkJc3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07CiAKIAkJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiAJCQljb250aW51ZTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgJmFtcDt1bC0mZ3Q7aGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7Ci0JCQlpZiAocnQtJmd0O2RzdC5kZXYgIT0gZGV2KQomIzQzOwkJCWlmIChkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCkgIT0gZGV2KQogCQkJCWNvbnRpbnVlOwogCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHJ0LSZndDtkc3QuZGV2X3JjdSwgYmxhY2tob2xlX25ldGRldik7CiAJCQluZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LApAQCAtMzc3MSwxMCAmIzQzOzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpCiAJaXBfdHN0YW1wcyA9IGlkZW50c19oYXNoICYjNDM7IChpcF9pZGVudHNfbWFzayAmIzQzOyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDtwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydF91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCWZvciAoYnVja2V0ID0gMDsgYnVja2V0ICZsdDsgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1tidWNrZXRdOwogCi0JCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwotCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCQlJTklUX0xJU1RfSEVBRCgmYW1wO3VsLSZndDtoZWFkKTsKJiM0MzsJCQlzcGluX2xvY2tfaW5pdCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJCX0KIAl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0NMQVNTSUQKIAlpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L0tjb25maWcgYi9uZXQvaXB2Ni9LY29uZmlnCmluZGV4IGMzODA2YzZhYzk2ZjkuLjAyNTMxNzg2NjhiZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMTgsNiAmIzQzOzE4LDE5IEBAIG1lbnVjb25maWcgSVBWNgogCiBpZiBJUFY2CiAKJiM0Mztjb25maWcgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMKJiM0MzsJaW50ICYjMzQ7SVB2NiB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHMmIzM0OwomIzQzOwlyYW5nZSAxIDEwCiYjNDM7CWRlZmF1bHQgNgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZAomIzQzOwkgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyBidWNrZXRzLiBUaGUKJiM0MzsJICBhbGxvd2VkIHZhbHVlcyBzZWxlY3QgYmV0d2VlbiAyIGFuZCAxMDI0IGJ1Y2tldHMuIExhcmdlciB2YWx1ZXMKJiM0MzsJICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVQomIzQzOwkgIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YWJsZS4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLgomIzQzOwogY29uZmlnIElQVjZfUk9VVEVSX1BSRUYKIAlib29sICYjMzQ7SVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0JiMzNDsKIAloZWxwCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTQwLDYgJiM0Mzs0MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uc3Byb3h5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9oYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvamhhc2guaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zaXBoYXNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldF9uYW1lc3BhY2UuaCZndDsKQEAgLTEzMywxMSAmIzQzOzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZAloZWFkOwogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTsKJiM0MzsjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkUJQklUKENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUykKJiM0MzsKJiM0MztzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHsKJiM0MzsJc3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTsKJiM0MzsJLyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovCiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTsKIAogdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydCkKIHsKLQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF9saXN0KTsKJiM0MzsJc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KCZhbXA7cnQtJmd0O2RzdCk7CiYjNDM7CXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKJiM0MzsKJiM0MzsJaWYgKHJ0LSZndDtydDZpX2lkZXYgJmFtcDsmYW1wOyBydC0mZ3Q7cnQ2aV9pZGV2LSZndDtkZXYgIT0gcnRfZGV2KQomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDttaXNtYXRjaDsKJiM0MzsJZWxzZQomIzQzOwkJdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2hhc2hfcHRyKHJ0X2RldiwKJiM0MzsJCQkJCSAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldOwogCiAJcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7CiAKQEAgLTE1Nyw0MCAmIzQzOzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQogCX0KIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTsKJiM0MzsKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDt1bC0mZ3Q7aGVhZCkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKJiM0MzsJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwomIzQzOwkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoJmFtcDtydC0mZ3Q7ZHN0KTsKJiM0MzsJCWJvb2wgaGFuZGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkJaWYgKHJ0X2lkZXYgJmFtcDsmYW1wOyBydF9pZGV2LSZndDtkZXYgPT0gZGV2KSB7CiYjNDM7CQkJcnQtJmd0O3J0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpOwomIzQzOwkJCWluNl9kZXZfcHV0KHJ0X2lkZXYpOwomIzQzOwkJCWhhbmRsZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKJiM0MzsJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7CiYjNDM7CQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKJiM0MzsJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7CiYjNDM7CQkJaGFuZGxlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CQlpZiAoaGFuZGxlZCkKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7cnQtJmd0O2RzdC5ydF91bmNhY2hlZCk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt1bC0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKLQkJc3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7CiYjNDM7CQlzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTsKJiM0MzsJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDsKIAotCQlpZiAobGlzdF9lbXB0eSgmYW1wO3VsLSZndDtoZWFkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9ja19iaCgmYW1wO3VsLSZndDtsb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBzYWZlLCAmYW1wO3VsLSZndDtoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHsKLQkJCXN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC0mZ3Q7cnQ2aV9pZGV2OwotCQkJc3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LSZndDtkc3QuZGV2OwotCQkJYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLQkJCWlmIChydF9pZGV2ICZhbXA7JmFtcDsgcnRfaWRldi0mZ3Q7ZGV2ID09IGRldikgewotCQkJCXJ0LSZndDtydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTsKLQkJCQlpbjZfZGV2X3B1dChydF9pZGV2KTsKLQkJCQloYW5kbGVkID0gdHJ1ZTsKLQkJCX0KLQotCQkJaWYgKHJ0X2RldiA9PSBkZXYpIHsKLQkJCQlydC0mZ3Q7ZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7Ci0JCQkJbmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldiwKLQkJCQkJCSAgICZhbXA7cnQtJmd0O2RzdC5kZXZfdHJhY2tlciwKLQkJCQkJCSAgIEdGUF9BVE9NSUMpOwotCQkJCWhhbmRsZWQgPSB0cnVlOwotCQkJfQotCQkJaWYgKGhhbmRsZWQpCi0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO3J0LSZndDtkc3QucnRfdW5jYWNoZWQpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJdGFibGUgPSBwZXJfY3B1X3B0cigmYW1wO3J0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTsKJiM0MzsJCXVsID0gJmFtcDt0YWJsZS0mZ3Q7YnVja2V0c1toYXNoX3B0cihkZXYsCiYjNDM7CQkJCQkgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTsKJiM0MzsJCXJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpOwomIzQzOwkJcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2gsIGRldik7CiAJfQogfQogCkBAIC02OTg3LDEwICYjNDM7NzAxNSwxOCBAQCBpbnQgX19pbml0IGlwNl9yb3V0ZV9pbml0KHZvaWQpCiAjZW5kaWYKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTsKJiM0MzsJCXN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlOwomIzQzOwkJaW50IGJ1Y2tldDsKJiM0MzsKJiM0MzsJCXRhYmxlID0gcGVyX2NwdV9wdHIoJmFtcDtydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7CiYjNDM7CQlmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCAmbHQ7IFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkU7IGJ1Y2tldCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmYW1wO3RhYmxlLSZndDtidWNrZXRzW2J1Y2tldF07CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmFtcDt1bC0mZ3Q7aGVhZCk7Ci0JCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJCUlOSVRfTElTVF9IRUFEKCZhbXA7dWwtJmd0O2hlYWQpOwomIzQzOwkJCXNwaW5fbG9ja19pbml0KCZhbXA7dWwtJmd0O2xvY2spOwomIzQzOwkJfQomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDt0YWJsZS0mZ3Q7bWlzbWF0Y2guaGVhZCk7CiYjNDM7CQlzcGluX2xvY2tfaW5pdCgmYW1wO3RhYmxlLSZndDttaXNtYXRjaC5sb2NrKTsKIAl9CiAKIG91dDoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaAppbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoCkBAIC0zODUsNiAmIzQzOzM4NSwzNyBAQCBydW5fdGVzdHMoKQogCWNsZWFudXBfeGZybV9kZXYKIH0KIAomIzQzO3Rlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpCiYjNDM7ewomIzQzOwlsb2NhbCBzZW5kZXJfcGlkCiYjNDM7CWxvY2FsIGJhY2tsb2cKJiM0MzsJbG9jYWwgcmMKJiM0MzsKJiM0MzsJIyBBIGxvY2FsIHJvdXRlIHRocm91Z2ggYSBWUkYgdXNlcyB0aGUgVlJGIGFzIGRzdC5kZXYgd2hpbGUgcmV0YWluaW5nCiYjNDM7CSMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWQKJiM0MzsJIyByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgd2hpbGUgdGhlIGludGVyZmFjZSBpcyBkZWxldGVkLgomIzQzOwlydW5fY21kX2hvc3QxIHRjIHFkaXNjIHJlcGxhY2UgZGV2ICR7VlJGfSByb290IG5ldGVtIGxpbWl0IDEgZGVsYXkgMTBzCiYjNDM7CWlwIC02IC1uZXRucyAmIzM0OyRob3N0MSYjMzQ7IHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMAomIzQzOwlpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgLi9tc2dfemVyb2NvcHkgLTYgXAomIzQzOwkJLVMgJHtIT1NUMV82fSAtRCAke0hPU1QxXzZ9IC1zIDEyMDAgLXQgMCByYXdfaGRyaW5jbCBcCiYjNDM7CQkmZ3Q7L2Rldi9udWxsIDImZ3Q7JmFtcDsxICZhbXA7CiYjNDM7CXNlbmRlcl9waWQ9JCEKJiM0MzsJd2FpdCAmIzM0OyRzZW5kZXJfcGlkJiMzNDsKJiM0MzsJcmM9JD8KJiM0MzsJbG9nX3Rlc3QgJHJjIDAgJiMzNDtDcmVhdGUgdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzOwlbICRyYyAtbmUgMCBdICZhbXA7JmFtcDsgcmV0dXJuCiYjNDM7CiYjNDM7CWJhY2tsb2c9JChpcCBuZXRucyBleGVjICYjMzQ7JGhvc3QxJiMzNDsgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KQomIzQzOwlpZiAhIGVjaG8gJiMzNDskYmFja2xvZyYjMzQ7IHwgZ3JlcCAtRXEgJiMzOTtiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCYjMzk7OyB0aGVuCiYjNDM7CQlsb2dfdGVzdCAxIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsJCXJldHVybgomIzQzOwlmaQomIzQzOwlsb2dfdGVzdCAwIDAgJiMzNDtSZXRhaW4gdW5jYWNoZWQgSVB2NiByb3V0ZXMgaW4gVlJGIHFkaXNjJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMAomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7Rmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXMmIzM0OwomIzQzO30KJiM0MzsKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHVzYWdlCiAKQEAgLTQyNSw2ICYjNDM7NDU2LDEwIEBAIGVjaG8KIGVjaG8gJiMzNDtuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlJiMzNDsKIHJ1bl90ZXN0cwogCiYjNDM7ZWNobwomIzQzO2VjaG8gJiMzNDtVbmNhY2hlZCBJUHY2IHJvdXRlIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzJiMzNDsKJiM0Mzt0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2gKJiM0MzsKIHByaW50ZiAmIzM0O1xuVGVzdHMgcGFzc2VkOiAlM2RcbiYjMzQ7ICR7bnN1Y2Nlc3N9CiBwcmludGYgJiMzNDtUZXN0cyBmYWlsZWQ6ICUzZFxuJiMzNDsgICAke25mYWlsfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDE0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTUxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uOiBVbmNhY2hlZCBSb3V0ZSBIYXNoaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGF0JiMzOTtzIGEgc2VyaW91cyBjb21taXRtZW50LCBzbyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIGhhc2hlZCBhcHByb2FjaCB0byBtYW5hZ2luZyAmIzM0O3VuY2FjaGVkJiMzNDsgcm91dGVzLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHBlci1DUFUgbGlua2VkIGxpc3QuIFRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gYG5ldC9pcHY0L3JvdXRlLmNgLCBgbmV0L2lwdjYvcm91dGUuY2AsIGFuZCBjb3JyZXNwb25kaW5nIEtjb25maWcgb3B0aW9ucywgcGx1cyBhIG5ldyBzZWxmdGVzdC4gVGhlIGNvcmUgaWRlYSBpcyB0byBoYXNoIHRoZSBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGEgcm91dGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHBlci1DUFUgYnVja2V0IGl0IGJlbG9uZ3MgdG8sIGltcHJvdmluZyB0aGUgZWZmaWNpZW5jeSBvZiBvcGVyYXRpb25zIGxpa2UgZmx1c2hpbmcuCgpOb3csIEkgaGF2ZSB0byBhcHBseSB0aGUgcnVsZXMgaW4gbXkgaGVhZDogKklzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8qIEkga25vdyB0aGF0JiMzOTtzIHRoZSBvbmx5IGp1c3RpZmljYXRpb24gZm9yIEtNU0FOLiBJIG5lZWQgdG8gbG9vayBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhdGNoIG1pZ2h0IGNyZWF0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd291bGQgb25seSBiZSBjYXVnaHQgYnkgS01TQU4uIFRoaW5ncyBsaWtlOgoKMS4gIFN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlciBzcGFjZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgo0LiAgUG90ZW50aWFsIGJ1ZmZlciBvdmVycnVucyBvciB1bmluaXRpYWxpemVkIGJ5dGVzIGR1ZSB0byBib3VuZHMgY2hlY2tzLgoKU28sIGxldCYjMzk7cyBnbyBsaW5lIGJ5IGxpbmUsIHRoaW5raW5nIGxpa2UgYSBjb21waWxlciBhbmQgbWVtb3J5IGluc3BlY3Rvci4KKiAgIEFyZSBhbnkgb2YgdGhlc2Ugc3RydWN0dXJlcyAoZS5nLiwgYHJ0X3VuY2FjaGVkX2xpc3RgIG9yIGBydDZfdW5jYWNoZWRfbGlzdGApIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8sIHRoZXNlIGFyZSBhbGwgaW50ZXJuYWwgcm91dGluZyBsaXN0cyBtYW5hZ2VkIHdpdGhpbiB0aGUga2VybmVsLiBUaGV5IGFyZSBzdG9yZWQgaW4gcGVyLUNQVSB2YXJpYWJsZXMgYW5kIGVtYmVkZGVkIGludG8gZHN0IGVudHJpZXMuCiogICBBcmUgdGhlIHBlci1DUFUgdmFyaWFibGVzIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkPyBgREVGSU5FX1BFUl9DUFVfQUxJR05FRGAgaW5kaWNhdGVzICpzdGF0aWMqIHBlci1DUFUgYWxsb2NhdGlvbi4gVGhhdCBtZWFucyB0aGV5IHJlc2lkZSBpbiB0aGUgQlNTIHNlZ21lbnQsIHdoaWNoIGlzICp6ZXJvLWluaXRpYWxpemVkKiBieSB0aGUgbGlua2VyL2xvYWRlci4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLgoqICAgQnV0IGl0JiMzOTtzIG5vdCBlbm91Z2ggdG8gcmVseSBvbiBzdGF0aWMgemVyby1pbml0aWFsaXphdGlvbi4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY29kZSBleHBsaWNpdGx5IGluaXRpYWxpemVzIHRoaW5ncyBhbnl3YXkuIEFuZCB5ZXMsIGluIGBpcF9ydF9pbml0YCBhbmQgYGlwNl9yb3V0ZV9pbml0YCB0aGUgcGF0Y2ggZXhwbGljaXRseSBpbml0aWFsaXplcyBhbGwgbGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzIHdpdGhpbiB0aGUgaGFzaCB0YWJsZSBidWNrZXRzLCB1c2luZyBgSU5JVF9MSVNUX0hFQURgIGFuZCBgc3Bpbl9sb2NrX2luaXRgLiBUaGUgSVB2NiB2ZXJzaW9uIGFsc28gaW5pdGlhbGl6ZXMgdGhlIGBtaXNtYXRjaGAgbGlzdC4KClNvLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCB0aGVyZSBpc24mIzM5O3QgYW55dGhpbmcgaGVyZSB0aGF0IGNyZWF0ZXMgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByaXNrcy4gVGhlc2UgYXJlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBjb2RlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgZXZlcnl0aGluZy4gVGhlcmUgaXNuJiMzOTt0IGFueSAmIzM0O2NvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywmIzM0OyBubyBwb3RlbnRpYWwgaW5mbyBsZWFrcywgYW5kIG5vIHN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlciBzcGFjZS4gVGhlIGNoYW5nZXMgYXJlIG1haW5seSBhYm91dCBvcmdhbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5LgoKVGhlcmVmb3JlLCBnaXZlbiBteSBleHBlcnQga25vd2xlZGdlIGFuZCByaWdvcm91cyBldmFsdWF0aW9uLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4tc3BlY2lmaWMgcmlza3MuIEkgd291bGQgKm5vdCogcmVjb21tZW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnRfdW5jYWNoZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvcm91dGUuYz0xNTU4PXN0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYxLVxubmV0L2lwdjQvcm91dGUuYzoxNTYyOnN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xubmV0L2lwdjQvcm91dGUuYy0xNTYzLVxubmV0L2lwdjQvcm91dGUuYz0xNTY0PXZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NjUte1xubmV0L2lwdjQvcm91dGUuYzoxNTY2Olx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU2Ny1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NzEtXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzI6XHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xubmV0L2lwdjQvcm91dGUuYy0xNTczLVxubmV0L2lwdjQvcm91dGUuYy0xNTc0LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvcm91dGUuYzoxNTc1Olx0bGlzdF9hZGRfdGFpbChcdTAwMjZydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWQsIFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xubmV0L2lwdjQvcm91dGUuYy0xNTc2LVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTc5PXZvaWQgcnRfZGVsX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODAte1xubmV0L2lwdjQvcm91dGUuYzoxNTgxOlx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3Q7XG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODItXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTg0LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG5uZXQvaXB2NC9yb3V0ZS5jOjE1ODU6XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbm5ldC9pcHY0L3JvdXRlLmMtMTU4Ni1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4tLVxubmV0L2lwdjQvcm91dGUuYz0xNTk2PXZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNjA0LVxubmV0L2lwdjQvcm91dGUuYzoxNjA1Olx0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xubmV0L2lwdjQvcm91dGUuYy0xNjA2LVx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTYxMi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvcm91dGUuYzoxNjEzOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xubmV0L2lwdjQvcm91dGUuYy0xNjE0LVx0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTYxOC1cdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTYxOTpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTE2MjAtXHRcdH1cbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zNzkyLVxubmV0L2lwdjQvcm91dGUuYzozNzkzOlx0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xubmV0L2lwdjQvcm91dGUuYy0zNzk0LVx0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNTAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gYHJ0Nl91bmNhY2hlZF9saXN0X2RlbGAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24gaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgcG90ZW50aWFsIHByb2JsZW1zKSByZXNpZGUgd2hlbiByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhlIElQdjYgcm91dGluZyBjYWNoZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHVuY2FjaGVkIHJvdXRlIGVudHJpZXMgYXJlIGJlaW5nIGhhbmRsZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLCBhbmQgcGVyaGFwcyBpZGVudGlmeSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLiBUaGUgZGV0YWlscyBoZXJlIGFyZSBjcml0aWNhbCBmb3IgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBlZmZpY2llbmN5IG9mIElQdjYgcm91dGluZyB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIGdldCBjcmFja2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDU6XHRzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlLCBydDZfdW5jYWNoZWRfdGFibGUpO1xuIDE0NjpcdFxuIDE0NzpcdHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXG4gMTQ4Olx0e1xuIDE0OTpcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xuIDE1MDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAxNTE6XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbiAxNTI6XHRcbiAxNTM6XHRcdGlmIChydC1cdTAwM2VydDZpX2lkZXYgXHUwMDI2XHUwMDI2IHJ0LVx1MDAzZXJ0NmlfaWRldi1cdTAwM2VkZXYgIT0gcnRfZGV2KVxuIDE1NDpcdFx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZW1pc21hdGNoO1xuIDE1NTpcdFx0ZWxzZVxuIDE1NjpcdFx0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxuIDE1NzpcdFx0XHRcdFx0XHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcbiAxNTg6XHRcbiAxNTk6XHRcdHJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XG4gMTYwOlx0XG4gMTYxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTYyOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCwgXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4gMTYzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbiAxNjQ6XHR9XG4gMTY1Olx0XG4gMTY2Olx0dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydClcbiAxNjc6XHR7XG4gMTY4Olx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdDtcbiAxNjk6XHRcbiAxNzA6XHRcdGlmICh1bCkge1xuIDE3MTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTcyOlx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbiAxNzM6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gMTc0Olx0XHR9XG4gMTc1Olx0fVxuIDE3NjpcdFxuIDE3NzpcdHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcbiAxNzg6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDE3OTpcdHtcbiAxODA6XHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuIDE4MTpcdFxuIDE4MjpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2dWwtXHUwMDNlaGVhZCkpXG4gMTgzOlx0XHRcdHJldHVybjtcbiAxODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTAKCQkJCQkJCW91dHB1dDogMjIwCgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluIHRoZXNlIHJvdXRpbmcgdGFibGUgZGVsZXRpb24gZnVuY3Rpb25zLCBgcnQtJmd0O2RzdC5ydF91bmNhY2hlZF9saXN0YCBpcyBjb3JyZWN0bHkgYXNzaWduZWQgdG8gYHVsYCBkdXJpbmcgdGhlIGluc2VydGlvbiBwcm9jZXNzLiBTbywgZXZlbiBpZiB0aGUgcm91dGluZyBlbnRyeSBsYW5kcyBpbiBhIGRpZmZlcmVudCBidWNrZXQgdGhhbiBleHBlY3RlZCwgdGhlIGRlbGV0aW9uIGxvZ2ljIHNob3VsZCBzdGlsbCB3b3JrIGZpbmUuIFRoYXQmIzM5O3MgZ29vZC4KClRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcywgYGlwX3J0X2luaXQoKWAgYW5kIGBpcDZfcm91dGVfaW5pdCgpYCwgaGFuZGxlIHRoZSBjcnVjaWFsIGluaXRpYWxpemF0aW9uIG9mIGFsbCB0aGUgYGhlYWRgIGFuZCBgbG9ja2AgZmllbGRzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzdGF0aWMsIGJvb3QtdGltZSBzdHJ1Y3R1cmVzIGZvciB0aGUgcGVyLUNQVSB0YWJsZXMsIHNvIGV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGNsZWFuIGZyb20gdGhlIHN0YXJ0LiBXZSYjMzk7cmUgaGFzaGluZyBgbmV0X2RldmljZWAgcG9pbnRlcnMgaGVyZS4KCkNyaXRpY2FsbHksIHRoZXJlIGFyZSBubyB1c2VyLXNwYWNlIGludGVyYWN0aW9ucywgbm8gdW5pbml0aWFsaXplZCByZWFkcyBmcm9tIHRoZSBzdGFjayBvciBoZWFwLCBhbmQgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgd2hpY2ggbWVhbnMgbm8gcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGluIHRoaXMgYXJlYS4KCkxvb2tpbmcgYXQgcG90ZW50aWFsIGJ1ZyB2ZWN0b3JzLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6CiogICBIYXNoIGNvbGxpc2lvbnMgb3IgbG9va3VwIGJ1Z3Mg4oCTIHRoZXNlIHdvdWxkIGJlIGxvZ2ljYWwgaXNzdWVzIGluIGhvdyB3ZSYjMzk7cmUgaGFzaGluZyB0aGluZ3MuCiogICBDb25jdXJyZW5jeSBwcm9ibGVtcyBvciBsb2NraW5nIGlzc3VlcyDigJMgTE9DS0RFUCBzaG91bGQgYmUgYWJsZSB0byBjYXRjaCB0aGVzZS4KKiAgIFVzZS1hZnRlci1mcmVlIG9yIHJlZmNvdW50IHByb2JsZW1zIG9uIHRoZSBkZXZpY2Ugb3Igcm91dGluZyBlbnRyeSDigJMgdGhlc2UgYXJlIEtBU0FOIGFuZCB0aGUgcmVmY291bnQgc2FuaXRpemVycyYjMzk7IHRlcnJpdG9yeS4KKiAgIE51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMg4oCTIHRoZSBrZXJuZWwmIzM5O3Mgc3RhbmRhcmQgY2hlY2tzIHNob3VsZCBoYW5kbGUgdGhlc2UuCgpOb25lIG9mIHRob3NlIGFyZSBzdWJ0bGUgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGV5IGFyZSBhbGwgZGV0ZWN0YWJsZSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMgYW5kIHJlcHJlc2VudCB0aGUgZ2VuZXJhbCBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdHkgdGhlIGV4aXN0aW5nIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGZpbmQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBjaGVjayB0aGUgYHNldC1yZXN1bHRzYCByZXF1aXJlbWVudHMgdG8gY29uZmlybS4KCiogICBgTmVlZHNLTVNBTmA6IGJvb2xlYW4gKGZhbHNlKSAtIENoZWNrLgoqICAgYEtNU0FOUmVhc29uaW5nYDogc3RyaW5nIGV4cGxhaW5pbmcgd2h5IEtNU0FOIGlzIG5vdCBuZWVkZWQgYW5kIGNvbnRyYXN0aW5nIHdpdGggS0FTQU4vTE9DS0RFUCAtIENoZWNrLgoKRXZlcnl0aGluZyBpcyBjbGVhci4gSSYjMzk7bSBjb25maWRlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDAyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHNpbmdsZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyAod2l0aCBhIG1pc21hdGNoIGxpc3QgZm9yIElQdjYpIHRvIG9wdGltaXplIGRldmljZSBmbHVzaGluZyBmb3IgSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZXMuIFxuXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxuXG5BbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgbGlzdCBoYW5kbGluZywgbG9ja2luZywgb3IgZGV2aWNlIHJlZmVyZW5jZSB0cmFja2luZyAoc3VjaCBhcyByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZjb3VudCB0cmFja2luZy4gQ29uc2VxdWVudGx5LCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXG5cbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXG5cbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjM3LjU3MzM1MzM0N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4MDg3MTE5MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxcblxcbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODozNy41NzMzNTkwMTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDQ3OTM0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjODIyMzQwMjZkY2ExZGNlYjZkZmU3ZjkwMDEwZDY5ZjI3YTA1MjJkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDAyOjE4OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXFxuaW5kZXggMzAxYjQ3NjYwMzA1Yi4uN2Q0MGNhMjJkMmIyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9LY29uZmlnXFxuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xcbkBAIC0xMDMsNiArMTAzLDE5IEBAIGNvbmZpZyBJUF9ST1VURV9WRVJCT1NFXFxuIGNvbmZpZyBJUF9ST1VURV9DTEFTU0lEXFxuIFxcdGJvb2xcXG4gXFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcXG4rXFx0aW50IFxcXCJJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4rXFx0cmFuZ2UgMSAxMFxcbitcXHRkZWZhdWx0IDZcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjQgdW5jYWNoZWRcXG4rXFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTIGJ1Y2tldHMuIFRoZVxcbitcXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xcbitcXHQgIHJlZHVjZSBjb2xsaXNpb25zLCBidXQgZWFjaCBhZGRpdGlvbmFsIGJpdCBkb3VibGVzIHRoZSBwZXItQ1BVXFxuK1xcdCAgbWVtb3J5IHVzZWQgYnkgdGhlIHRhYmxlLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHVzZSB0aGUgZGVmYXVsdCBvZiA2IGJpdHMgKDY0IGJ1Y2tldHMpLlxcbitcXG4gY29uZmlnIElQX1BOUFxcbiBcXHRib29sIFxcXCJJUDoga2VybmVsIGxldmVsIGF1dG9jb25maWd1cmF0aW9uXFxcIlxcbiBcXHRoZWxwXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuaW5kZXggZDdkYTJmMWFjYmI1OS4uZTI4ZTIxNDBjZjYyMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xcbkBAIC03NCw2ICs3NCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hhc2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lnbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbXJvdXRlLmhcXHUwMDNlXFxuQEAgLTE1NTIsMTEgKzE1NTMsMjEgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydF91bmNhY2hlZF9saXN0KTtcXG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcXHRCSVQoQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUylcXG4rXFxuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IGJ1Y2tldHNbUlRfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF90YWJsZSwgcnRfdW5jYWNoZWRfdGFibGUpO1xcbiBcXG4gdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydClcXG4ge1xcbi1cXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfbGlzdCk7XFxuK1xcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnRfdW5jYWNoZWRfdGFibGUpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xcbiBcXG4gXFx0cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XFxuIFxcbkBAIC0xNTg4LDE0ICsxNTk5LDE5IEBAIHZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFxcdTAwMjZwZXJfY3B1KHJ0X3VuY2FjaGVkX2xpc3QsIGNwdSk7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF90YWJsZSAqdGFibGU7XFxuK1xcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIENPTkZJR19JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcXG4gXFxuIFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG4tXFx0XFx0XFx0aWYgKHJ0LVxcdTAwM2Vkc3QuZGV2ICE9IGRldilcXG4rXFx0XFx0XFx0aWYgKGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpICE9IGRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihydC1cXHUwMDNlZHN0LmRldl9yY3UsIGJsYWNraG9sZV9uZXRkZXYpO1xcbiBcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbkBAIC0zNzcxLDEwICszNzg3LDE2IEBAIGludCBfX2luaXQgaXBfcnRfaW5pdCh2b2lkKVxcbiBcXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0aW50IGJ1Y2tldDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbitcXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2J1Y2tldF07XFxuIFxcbi1cXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dWwtXFx1MDAzZWhlYWQpO1xcbi1cXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dWwtXFx1MDAzZWhlYWQpO1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXFxuIFxcdGlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xcbmluZGV4IGMzODA2YzZhYzk2ZjkuLjAyNTMxNzg2NjhiZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvS2NvbmZpZ1xcbisrKyBiL25ldC9pcHY2L0tjb25maWdcXG5AQCAtMTgsNiArMTgsMTkgQEAgbWVudWNvbmZpZyBJUFY2XFxuIFxcbiBpZiBJUFY2XFxuIFxcbitjb25maWcgSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcXG4rXFx0aW50IFxcXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4rXFx0cmFuZ2UgMSAxMFxcbitcXHRkZWZhdWx0IDZcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBidWNrZXRzIHVzZWQgaW4gdGhlIElQdjYgdW5jYWNoZWRcXG4rXFx0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXFxuK1xcdCAgYWxsb3dlZCB2YWx1ZXMgc2VsZWN0IGJldHdlZW4gMiBhbmQgMTAyNCBidWNrZXRzLiBMYXJnZXIgdmFsdWVzXFxuK1xcdCAgcmVkdWNlIGNvbGxpc2lvbnMsIGJ1dCBlYWNoIGFkZGl0aW9uYWwgYml0IGRvdWJsZXMgdGhlIHBlci1DUFVcXG4rXFx0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXFxuK1xcbiBjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbiBcXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuIFxcdGhlbHBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuQEAgLTQwLDYgKzQwLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9oYXNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2lwaGFzaC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG5AQCAtMTMzLDExICsxMzQsMjcgQEAgc3RydWN0IHVuY2FjaGVkX2xpc3Qge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0aGVhZDtcXG4gfTtcXG4gXFxuLXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCB1bmNhY2hlZF9saXN0LCBydDZfdW5jYWNoZWRfbGlzdCk7XFxuKyNkZWZpbmUgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRVxcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXFxuK1xcbitzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlIHtcXG4rXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgYnVja2V0c1tSVDZfVU5DQUNIRURfSEFTSF9TSVpFXTtcXG4rXFx0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXFxuK1xcdHN0cnVjdCB1bmNhY2hlZF9saXN0IG1pc21hdGNoO1xcbit9O1xcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSwgcnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4gXFxuIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIHtcXG4tXFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcmF3X2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0KTtcXG4rXFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGUgPSByYXdfY3B1X3B0cihcXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbitcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuK1xcbitcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbitcXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXTtcXG4gXFxuIFxcdHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xcbiBcXG5AQCAtMTU3LDQwICsxNzQsNTEgQEAgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9kZWwoc3RydWN0IHJ0Nl9pbmZvICpydClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbitcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnVsLVxcdTAwM2VoZWFkKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG4rXFx0XFx0c3RydWN0IGluZXQ2X2RldiAqcnRfaWRldiA9IHJ0LVxcdTAwM2VydDZpX2lkZXY7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpydF9kZXYgPSBkc3RfZGV2KFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XFxuK1xcbitcXHRcXHRpZiAocnRfaWRldiBcXHUwMDI2XFx1MDAyNiBydF9pZGV2LVxcdTAwM2VkZXYgPT0gZGV2KSB7XFxuK1xcdFxcdFxcdHJ0LVxcdTAwM2VydDZpX2lkZXYgPSBpbjZfZGV2X2dldChibGFja2hvbGVfbmV0ZGV2KTtcXG4rXFx0XFx0XFx0aW42X2Rldl9wdXQocnRfaWRldik7XFxuK1xcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnRfZGV2ID09IGRldikge1xcbitcXHRcXHRcXHRydC1cXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XFxuK1xcdFxcdFxcdG5ldGRldl9yZWZfcmVwbGFjZShydF9kZXYsIGJsYWNraG9sZV9uZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZydC1cXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0XFx0XFx0aGFuZGxlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGhhbmRsZWQpXFxuK1xcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdGludCBjcHU7XFxuIFxcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcXG4tXFx0XFx0c3RydWN0IHJ0Nl9pbmZvICpydCwgKnNhZmU7XFxuK1xcdFxcdHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xcbitcXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWw7XFxuIFxcbi1cXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbi1cXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cXHUwMDNlcnQ2aV9pZGV2O1xcbi1cXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuLVxcdFxcdFxcdGJvb2wgaGFuZGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHJ0X2lkZXYgXFx1MDAyNlxcdTAwMjYgcnRfaWRldi1cXHUwMDNlZGV2ID09IGRldikge1xcbi1cXHRcXHRcXHRcXHRydC1cXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XFxuLVxcdFxcdFxcdFxcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xcbi1cXHRcXHRcXHRcXHRoYW5kbGVkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKHJ0X2RldiA9PSBkZXYpIHtcXG4tXFx0XFx0XFx0XFx0cnQtXFx1MDAzZWRzdC5kZXYgPSBibGFja2hvbGVfbmV0ZGV2O1xcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlcixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQyk7XFxuLVxcdFxcdFxcdFxcdGhhbmRsZWQgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChoYW5kbGVkKVxcbi1cXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZydC1cXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcXG4tXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbitcXHRcXHR0YWJsZSA9IHBlcl9jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XFxuK1xcdFxcdHVsID0gXFx1MDAyNnRhYmxlLVxcdTAwM2VidWNrZXRzW2hhc2hfcHRyKGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XFxuK1xcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xcbitcXHRcXHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoLCBkZXYpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxcbiAjZW5kaWZcXG4gXFxuIFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4tXFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF9saXN0LCBjcHUpO1xcbitcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcXG4rXFx0XFx0aW50IGJ1Y2tldDtcXG4rXFxuK1xcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSwgY3B1KTtcXG4rXFx0XFx0Zm9yIChidWNrZXQgPSAwOyBidWNrZXQgXFx1MDAzYyBSVDZfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcXG4gXFxuLVxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuLVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRhYmxlLVxcdTAwM2VtaXNtYXRjaC5oZWFkKTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRhYmxlLVxcdTAwM2VtaXNtYXRjaC5sb2NrKTtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdnJmLXhmcm0tdGVzdHMuc2hcXG5pbmRleCBiNjRkZDg5MTY5OWQzLi40ZjQwOWQxMzVhOTlhIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxcbkBAIC0zODUsNiArMzg1LDM3IEBAIHJ1bl90ZXN0cygpXFxuIFxcdGNsZWFudXBfeGZybV9kZXZcXG4gfVxcbiBcXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoKClcXG4re1xcbitcXHRsb2NhbCBzZW5kZXJfcGlkXFxuK1xcdGxvY2FsIGJhY2tsb2dcXG4rXFx0bG9jYWwgcmNcXG4rXFxuK1xcdCMgQSBsb2NhbCByb3V0ZSB0aHJvdWdoIGEgVlJGIHVzZXMgdGhlIFZSRiBhcyBkc3QuZGV2IHdoaWxlIHJldGFpbmluZ1xcbitcXHQjIHRoZSBWUkYgbWVtYmVyIGludGVyZmFjZSBpbiBydDZpX2lkZXYuIFJhdyBoZWFkZXIgc2VuZHMgY3JlYXRlIHVuY2FjaGVkXFxuK1xcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cXG4rXFx0cnVuX2NtZF9ob3N0MSB0YyBxZGlzYyByZXBsYWNlIGRldiAke1ZSRn0gcm9vdCBuZXRlbSBsaW1pdCAxIGRlbGF5IDEwc1xcbitcXHRpcCAtNiAtbmV0bnMgXFxcIiRob3N0MVxcXCIgcm91dGUgYWRkIGxvY2FsICR7SE9TVDFfNn0vMTI4IGRldiBldGgwXFxuK1xcdGlwIG5ldG5zIGV4ZWMgXFxcIiRob3N0MVxcXCIgLi9tc2dfemVyb2NvcHkgLTYgXFxcXFxcbitcXHRcXHQtUyAke0hPU1QxXzZ9IC1EICR7SE9TVDFfNn0gLXMgMTIwMCAtdCAwIHJhd19oZHJpbmNsIFxcXFxcXG4rXFx0XFx0XFx1MDAzZS9kZXYvbnVsbCAyXFx1MDAzZVxcdTAwMjYxIFxcdTAwMjZcXG4rXFx0c2VuZGVyX3BpZD0kIVxcbitcXHR3YWl0IFxcXCIkc2VuZGVyX3BpZFxcXCJcXG4rXFx0cmM9JD9cXG4rXFx0bG9nX3Rlc3QgJHJjIDAgXFxcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rXFx0WyAkcmMgLW5lIDAgXSBcXHUwMDI2XFx1MDAyNiByZXR1cm5cXG4rXFxuK1xcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFxcXCIkaG9zdDFcXFwiIHRjIC1zIHFkaXNjIHNob3cgZGV2ICR7VlJGfSlcXG4rXFx0aWYgISBlY2hvIFxcXCIkYmFja2xvZ1xcXCIgfCBncmVwIC1FcSAnYmFja2xvZyAuKiBbMS05XVswLTldKnAnOyB0aGVuXFxuK1xcdFxcdGxvZ190ZXN0IDEgMCBcXFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1xcXCJcXG4rXFx0XFx0cmV0dXJuXFxuK1xcdGZpXFxuK1xcdGxvZ190ZXN0IDAgMCBcXFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1xcXCJcXG4rXFxuK1xcdHJ1bl9jbWRfaG9zdDEgdGltZW91dCAyIGlwIGxpbmsgZGVsIGV0aDBcXG4rXFx0bG9nX3Rlc3QgJD8gMCBcXFwiRmx1c2ggdW5jYWNoZWQgSVB2NiByb3V0ZXMgd2l0aCBtaXNtYXRjaGVkIGRldmljZXNcXFwiXFxuK31cXG4rXFxuICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXFxuICMgdXNhZ2VcXG4gXFxuQEAgLTQyNSw2ICs0NTYsMTAgQEAgZWNob1xcbiBlY2hvIFxcXCJuZXRlbSBxZGlzYyBvbiBWUkYgZGV2aWNlXFxcIlxcbiBydW5fdGVzdHNcXG4gXFxuK2VjaG9cXG4rZWNobyBcXFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1xcXCJcXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXFxuK1xcbiBwcmludGYgXFxcIlxcXFxuVGVzdHMgcGFzc2VkOiAlM2RcXFxcblxcXCIgJHtuc3VjY2Vzc31cXG4gcHJpbnRmIFxcXCJUZXN0cyBmYWlsZWQ6ICUzZFxcXFxuXFxcIiAgICR7bmZhaWx9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODozOS4yMTg3NTg5MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyNzcwNTE3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLFxuICAgIFwicnRfZmx1c2hfZGV2XCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9hZGRcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsXG4gICAgXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl9kaXNhYmxlX2lwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nIGNvZGUgKG5ldC9pcHY0L3JvdXRlLmMgYW5kIG5ldC9pcHY2L3JvdXRlLmMpIGJ5IGNvbnZlcnRpbmcgdGhlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzIGtleWVkIGJ5IG5ldF9kZXZpY2UgcG9pbnRlcnMgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoIG9wZXJhdGlvbnMuIEl0IGFsc28gYWRkcyBhIG1pc21hdGNoIGxpc3QgaW4gSVB2NiB0byBoYW5kbGUgcm91dGVzIHdoZXJlIHJ0NmlfaWRldiBkaWZmZXJzIGZyb20gZHN0LmRldiAoZS5nLiwgVlJGIGNvbmZpZ3VyYXRpb25zKS4gVGhlc2UgY29kZSBwYXRocyBhcmUgZXhlcmNpc2VkIHdoZW4gdW5jYWNoZWQgcm91dGVzIGFyZSBnZW5lcmF0ZWQgYW5kIHdoZW4gbmV0d29yayBkZXZpY2VzIGFyZSBkaXNhYmxlZCBvciB1bnJlZ2lzdGVyZWQsIG1ha2luZyB0aGVtIHJlYWNoYWJsZSBhbmQgd2VsbCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXG5pbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvS2NvbmZpZ1xuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xuQEAgLTEwMyw2ICsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcbiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRFxuIFx0Ym9vbFxuIFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbitcdGludCBcIklQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCJcbitcdHJhbmdlIDEgMTBcbitcdGRlZmF1bHQgNlxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXG4rXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQX1BOUFxuIFx0Ym9vbCBcIklQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgKzc0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKVxuK1xuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4rXHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1ODgsMTQgKzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuK1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xuaW5kZXggYzM4MDZjNmFjOTZmOS4uMDI1MzE3ODY2OGJkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L0tjb25maWdcbisrKyBiL25ldC9pcHY2L0tjb25maWdcbkBAIC0xOCw2ICsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4rY29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTXG4rXHRpbnQgXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wiXG4rXHRyYW5nZSAxIDEwXG4rXHRkZWZhdWx0IDZcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZFxuK1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTQwLDYgKzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgKzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTtcbisjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuK1x0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0aWYgKHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXYpXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4rXHRlbHNlXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihydF9kZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuK1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdGludCBidWNrZXQ7XG4rXG4rXHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcbitcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0fVxuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gubG9jayk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5AQCAtMzg1LDYgKzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuK3tcbitcdGxvY2FsIHNlbmRlcl9waWRcbitcdGxvY2FsIGJhY2tsb2dcbitcdGxvY2FsIHJjXG4rXG4rXHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbitcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcbitcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbitcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbitcdGlwIC02IC1uZXRucyBcIiRob3N0MVwiIHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIC4vbXNnX3plcm9jb3B5IC02IFxcXG4rXHRcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcbitcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuK1x0c2VuZGVyX3BpZD0kIVxuK1x0d2FpdCBcIiRzZW5kZXJfcGlkXCJcbitcdHJjPSQ/XG4rXHRsb2dfdGVzdCAkcmMgMCBcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rXHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbitcbitcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFwiJGhvc3QxXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuK1x0aWYgISBlY2hvIFwiJGJhY2tsb2dcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cbitcdFx0bG9nX3Rlc3QgMSAwIFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1wiXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGxvZ190ZXN0IDAgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1xuK1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCJcbit9XG4rXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcIlxuIHJ1bl90ZXN0c1xuIFxuK2VjaG9cbitlY2hvIFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXG4rXG4gcHJpbnRmIFwiXFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cIiAke25zdWNjZXNzfVxuIHByaW50ZiBcIlRlc3RzIGZhaWxlZDogJTNkXFxuXCIgICAke25mYWlsfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6MzkuMjE4NzYwNjMzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ2Njg3MDY4MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3k6IFVuY2FjaGVkIFJvdXRlIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gVGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIGl0cyBmdXp6aW5nIHBvdGVudGlhbCwgc28gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGltcGFjdCBvbiB0aGUga2VybmVsLiBJIHNlZSB0aGF0IGl0IGZvY3VzZXMgb24gSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZSBoYW5kbGluZywgYSBjb3JlIHBhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcuXG5cblRoZSBwYXRjaCBpdHNlbGYgaXMgYSByZWZhY3RvcmluZywgY2hhbmdpbmcgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB1bmNhY2hlZCByb3V0ZXMgZnJvbSBwZXItQ1BVIGxpbmtlZCBsaXN0cyB0byBwZXItQ1BVIGhhc2ggdGFibGVzLiBTcGVjaWZpY2FsbHk6XG5cbiogICAqKklQdjQ6KiogTW9kaWZpZXMgYG5ldC9pcHY0L0tjb25maWdgIGFuZCBgbmV0L2lwdjQvcm91dGUuY2AuIFRoZSBgcnRfdW5jYWNoZWRfbGlzdGAgaXMgcmVwbGFjZWQgYnkgYHJ0X3VuY2FjaGVkX3RhYmxlYCwgYSBwZXItQ1BVIGhhc2ggdGFibGUuIFRoZSBoYXNoIGZ1bmN0aW9uIHVzZXMgYGRzdF9kZXYoXHUwMDI2cnQtXHUwMDNlZHN0KWAgYW5kIGEgY29uZmlndXJhYmxlIG51bWJlciBvZiBoYXNoIGJpdHMgKGBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCkuIENoYW5nZXMgYXJlIG1hZGUgdG8gYHJ0X2FkZF91bmNhY2hlZF9saXN0YCAod2hpY2ggYWRkcyByb3V0ZXMpLCBgcnRfZmx1c2hfZGV2YCAod2hpY2ggcmVtb3ZlcyByb3V0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlKSwgYW5kIGBpcF9ydF9pbml0YCAoaW5pdGlhbGl6YXRpb24pLlxuKiAgICoqSVB2NjoqKiBNb2RpZmllcyBgbmV0L2lwdjYvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gVGhlIHBhdHRlcm4gbWlycm9ycyBJUHY0LCB3aXRoIGBydDZfdW5jYWNoZWRfbGlzdGAgYmVjb21pbmcgYHJ0Nl91bmNhY2hlZF90YWJsZWAuIFRoZSBoYXNoIHRhYmxlIHVzZXMgYFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVgIGFuZCBgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYC4gTG9naWMgaXMgYWRkZWQgZm9yIGEgXCJtaXNtYXRjaFwiIGxpc3QgdGhhdCBpcyB1c2VkIHdoZW4gYHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXZgLiBLZXkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlIGBydDZfdW5jYWNoZWRfbGlzdF9hZGRgIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YC4gSW5pdGlhbGl6YXRpb24gaGFwcGVucyBpbiBgaXA2X3JvdXRlX2luaXRgLlxuKiAgICoqVGVzdGluZzoqKiBUaGVyZSdzIGEgcmVsYXRlZCBtb2RpZmljYXRpb24gdG8gdGhlIGB2cmYteGZybS10ZXN0cy5zaGAgc2NyaXB0LCB3aGljaCBpcyBhIGdvb2QgaW5kaWNhdGlvbiB0aGF0IHNvbWVvbmUncyBhbHJlYWR5IGNvbnNpZGVyaW5nIGhvdyB0byB0ZXN0IHRoaXMgY2hhbmdlLlxuXG5Ob3csIG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGxpa2UgdGhpcywgcGFydGljdWxhcmx5IHdpdGhpbiBjb3JlIG5ldHdvcmtpbmcsIGFyZSBoaWdoLXZhbHVlIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBtb2RpZmllcyBrZXkgZnVuY3Rpb25zIChgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgKSB3aXRoaW4gYSBjcml0aWNhbCBwYXRoLiBUaGlzIGNvZGUgcnVucyB3aGVuIHJvdXRlcyBhcmUgY3JlYXRlZCBvciBkZWxldGVkLCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIHRha2VuIGRvd24gb3IgZmx1c2hlZC4gVW5jYWNoZWQgcm91dGVzIGFyZSB1c2VkIHdoZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBlLmcuLCB3aXRoIHJhdyBzb2NrZXRzLCBQTVRVLCByZWRpcmVjdHMsIFZSRiwgZXRjLiBUaGUgZmx1c2hpbmcgYXNwZWN0LCB0cmlnZ2VyZWQgYnkgZGV2aWNlIHJlbW92YWwsIGlzIGEgcGFydGljdWxhcmx5IGFwcGVhbGluZyB0YXJnZXQsIHNpbmNlIG5ldHdvcmsgZGV2aWNlcyBjb21lIGFuZCBnbyBjb25zdGFudGx5LCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyBsaWtlIHN5emthbGxlci4gVGhlIGNvZGUgcmVmYWN0b3JpbmcsIHBhcnRpY3VsYXJseSBvZiBkYXRhIHN0cnVjdHVyZXMsIGlzIG1lbnRpb25lZCBhcyBhbiBpZGVhbCBjYW5kaWRhdGUuXG5cblRvIGJlIHRob3JvdWdoLCBJIHdpbGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb2RlJ3MgcmVhY2ggYW5kIGRldGVybWluZSB0aGUgZW50cnkgcG9pbnRzIGZvciBwb3RlbnRpYWwgZnV6emluZyBoYXJuZXNzZXMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvZ2ljIGNoYW5nZXMgYXJlIHNpZ25pZmljYW50IGFuZCBpbnRyb2R1Y2UgbmV3IGNvZGUgcGF0aHMgdGhhdCBhcmUgZ29vZCBjYW5kaWRhdGVzIHRvIHJldmVhbCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjUzLjg4NzQ3MDAxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjczNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTUyMT1zdGF0aWMgYm9vbCBydF9jYWNoZV9yb3V0ZShzdHJ1Y3QgZmliX25oX2NvbW1vbiAqbmhjLCBzdHJ1Y3QgcnRhYmxlICpydClcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTUzOS1cXHRcXHRpZiAob3JpZykge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTU0MDpcXHRcXHRcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChvcmlnKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NDEtXFx0XFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNm9yaWctXFx1MDAzZWRzdCk7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1NjI9c3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX3RhYmxlLCBydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTYzLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2NDp2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU2NS17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE2MzI9c3RhdGljIHZvaWQgcnRfc2V0X25leHRob3Aoc3RydWN0IHJ0YWJsZSAqcnQsIF9fYmUzMiBkYWRkcixcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY3Ny1cXHRcXHRcXHR9XFxubmV0L2lwdjQvcm91dGUuYzoxNjc4OlxcdFxcdFxcdHJ0X2FkZF91bmNhY2hlZF9saXN0KHJ0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2NzktXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmMtMTY4MC1cXHR9IGVsc2VcXG5uZXQvaXB2NC9yb3V0ZS5jOjE2ODE6XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTY4Mi1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjMwOD1pcF9yb3V0ZV9pbnB1dF9zbG93KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNTAyLVxcdFxcdGlmICh1bmxpa2VseSghcnRfY2FjaGVfcm91dGUobmhjLCBydGgpKSlcXG5uZXQvaXB2NC9yb3V0ZS5jOjI1MDM6XFx0XFx0XFx0cnRfYWRkX3VuY2FjaGVkX2xpc3QocnRoKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI1MDQtXFx0fVxcbi0tXFxubmV0L2lwdjQveGZybTRfcG9saWN5LmM9NjY9c3RhdGljIGludCB4ZnJtNF9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYy05MC1cXHR4ZHN0LVxcdTAwM2V1LnJ0LnJ0X210dV9sb2NrZWQgPSBydC1cXHUwMDNlcnRfbXR1X2xvY2tlZDtcXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYzo5MTpcXHRydF9hZGRfdW5jYWNoZWRfbGlzdChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydCk7XFxubmV0L2lwdjQveGZybTRfcG9saWN5LmMtOTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjUzLjk0Mzc1MDcxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxODk4OTU1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgcnRfZmx1c2hfZGV2YCBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhhdCBgcnRfZmx1c2hfZGV2YCBmdW5jdGlvbi4gV2UndmUgYmVlbiBsb29raW5nIGF0IHNvbWUgcmVsYXRlZCBpc3N1ZXMsIGFuZCBpdCdzIHRpbWUgdG8gbWFwIG91dCB0aGUgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aG8ncyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgZm9yIGEgY29tcGxldGUgcGljdHVyZS4gSXQncyBub3QgZW5vdWdoIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uIGluIGlzb2xhdGlvbjsgd2UgbmVlZCB0byBzZWUgaXRzIGNvbnRleHQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRoZSBleHBlY3RlZCBjYWxscywgb3IgYXJlIHRoZXJlIHNvbWUgdW5leHBlY3RlZCBsb2NhdGlvbnMgd2hlcmUgd2UgYXJlIGZsdXNoaW5nPyBBcmUgdGhlcmUgYW55IGluZGlyZWN0IGNhbGxzPyBBcmUgdGhlcmUgYW55IGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBpdCB0aGF0IHNob3VsZG4ndCBiZT8gRG9pbmcgdGhpcyB3aWxsIGhlbHAgdXMgaXNvbGF0ZSB0aGUgc291cmNlIG9mIGFueSBpc3N1ZXMgd2UgZmluZC4gVGltZSB0byB0cmFjZSB0aGUgY2FsbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMTgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxODo1Ni4xMzM2NDg4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTUwNjMwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydF9mbHVzaF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZmliX2Zyb250ZW5kLmM9MTUwNj1zdGF0aWMgaW50IGZpYl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuLS1cXG5uZXQvaXB2NC9maWJfZnJvbnRlbmQuYy0xNTE3LVxcdFxcdGZpYl9kaXNhYmxlX2lwKGRldiwgZXZlbnQsIHRydWUpO1xcbm5ldC9pcHY0L2ZpYl9mcm9udGVuZC5jOjE1MTg6XFx0XFx0cnRfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjQvZmliX2Zyb250ZW5kLmMtMTUxOS1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1OTA9c3RhdGljIHZvaWQgaXB2NF9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OTUtXFxubmV0L2lwdjQvcm91dGUuYzoxNTk2OnZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjQvcm91dGUuYy0xNTk3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTg6NTYuMTg1MTY0MjAyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM3NzE3ODk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBzbmlwcGV0cywgdGhpbmtpbmcgbGlrZSBhIHNlYXNvbmVkIG5ldHdvcmsgZW5naW5lZXI6XG5cbioqSVB2NiBSb3V0ZSBDYWNoZSBUaGlua2luZyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIElQdjYgcm91dGUgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgXCJ1bmNhY2hlZFwiIHJvdXRlcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQWgsIHJpZ2h0LCB3ZSdyZSB0YWxraW5nIGFib3V0IHJvdXRlcyB0aGF0IGFyZW4ndCBzaXR0aW5nIGluIHRoZSBmYXN0IHBhdGgsIHByb2JhYmx5IGR1ZSB0byBzb21lIGNvbmRpdGlvbiBvciBiZWNhdXNlIHRoZXkncmUgbGVzcyBmcmVxdWVudGx5IHVzZWQuXCIgSSBzZWUgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgYW5kIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLiBUaGUgXCJhZGRcIiBmdW5jdGlvbiBwcm9iYWJseSBhcHBlbmRzIGEgbmV3IHJvdXRlIHRvIGEgbGlzdCBvZiB0aGVzZSB1bmNhY2hlZCBlbnRyaWVzLiBXZSBhcmUgbGlrZWx5IGFkZGluZyB0aGUgcm91dGUgdG8gYSBsaXN0IGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcsIG9yIGZvciBpdCB0byBiZSBjb25zdWx0ZWQgd2hlbiB3ZSBoYXZlIGEgcGFja2V0IHRvIGZvcndhcmQuIFRoZSBcImZsdXNoX2RldlwiIGZ1bmN0aW9uIGlzIHRoZSBrZXkgaGVyZSEgVGhhdCBpbmRpY2F0ZXMgd2UgYXJlIGxpa2VseSBmbHVzaGluZywgb3IgcmVtb3ZpbmcsIHRoZXNlIHVuY2FjaGVkIHJvdXRlcyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBuZXR3b3JrIGRldmljZSwgcHJvYmFibHkgb24gYW4gaW50ZXJmYWNlLiBXZSBtaWdodCBiZSBjbGVhbmluZyB1cCB0aGVzZSB1bmNhY2hlZCBlbnRyaWVzIHdoZW4gYW4gaW50ZXJmYWNlIGdvZXMgZG93biwgaXMgcmVjb25maWd1cmVkLCBvciBtYXliZSBldmVuIHdoZW4gYSBuZXcsIG1vcmUgb3B0aW1hbCByb3V0ZSBpcyBsZWFybmVkLCBhbmQgdGhlIG9sZCBjYWNoZWQgZW50cnkgaXMgbm8gbG9uZ2VyIGFwcGxpY2FibGUuIFRoZSBlZmZpY2llbmN5IG9mIHRoZSBjYWNoZSBhbmQgaG93IHRoZXNlIFwidW5jYWNoZWRcIiByb3V0ZXMgYXJlIG1hbmFnZWQgYXJlIGNyaXRpY2FsLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGVyaWEgZm9yIGEgcm91dGUgdG8gYmVjb21lIFwidW5jYWNoZWRcIiBhbmQgYWxzbyBob3cgb2Z0ZW4gdGhpcyBsaXN0IGlzIHB1cmdlZC4gSXMgdGhlcmUgYSB0aW1lciwgc29tZSBraW5kIG9mIHVzYWdlIHRocmVzaG9sZCwgb3Igc29tZSBvdGhlciBtZWNoYW5pc20gYXQgcGxheT8gVGhhdCdzIHdoYXQgSSB3YW50IHRvIGtub3cgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY1NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjU5LjU2MjM0NTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjI0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0Nl91bmNhY2hlZF9saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L3JvdXRlLmM9MTQ1PXN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjYvcm91dGUuYy0xNDYtXFxubmV0L2lwdjYvcm91dGUuYzoxNDc6dm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE0OC17XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTE2NS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjE2Njp2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMTY3LXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMTc2LVxcbm5ldC9pcHY2L3JvdXRlLmM6MTc3OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTE3OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjA4LVxcbm5ldC9pcHY2L3JvdXRlLmM6MjA5OnN0YXRpYyB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY2L3JvdXRlLmMtMjEwLXtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjE5LVxcdFxcdFxcdFxcdFxcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xcbm5ldC9pcHY2L3JvdXRlLmM6MjIwOlxcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKHVsLCBkZXYpO1xcbm5ldC9pcHY2L3JvdXRlLmM6MjIxOlxcdFxcdHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoKFxcdTAwMjZ0YWJsZS1cXHUwMDNlbWlzbWF0Y2gsIGRldik7XFxubmV0L2lwdjYvcm91dGUuYy0yMjItXFx0fVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zODI9c3RhdGljIHZvaWQgaXA2X2RzdF9kZXN0cm95KHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzg4LVxcdGlwX2RzdF9tZXRyaWNzX3B1dChkc3QpO1xcbm5ldC9pcHY2L3JvdXRlLmM6Mzg5OlxcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChydCk7XFxubmV0L2lwdjYvcm91dGUuYy0zOTAtXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTIzMDE9c3RydWN0IHJ0Nl9pbmZvICppcDZfcG9sX3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMzQyLVxcdFxcdFxcdC8qIDEgcmVmY250IGlzIHRha2VuIGR1cmluZyBpcDZfcnRfY2FjaGVfYWxsb2MoKS5cXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDM6XFx0XFx0XFx0ICogQXMgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKCkgZG9lcyBub3QgY29uc3VtZSByZWZjbnQsXFxubmV0L2lwdjYvcm91dGUuYy0yMzQ0LVxcdFxcdFxcdCAqIHRoaXMgcmVmY250IGlzIGFsd2F5cyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGV2ZW5cXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMjM0Ni1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjIzNDc6XFx0XFx0XFx0cnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHJ0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTIzNDgtXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMzNjM9c3RydWN0IGRzdF9lbnRyeSAqaWNtcDZfZHN0X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTMzOTEtXFx0ICovXFxubmV0L2lwdjYvcm91dGUuYzozMzkyOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChydCk7XFxubmV0L2lwdjYvcm91dGUuYy0zMzkzLVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDgwLVxcdG5laWdoX2lmZG93bihuZF90YWJsZShuZXQpLCBkZXYpO1xcbi0tXFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM9ODA9c3RhdGljIGludCB4ZnJtNl9maWxsX2RzdChzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMDItXFx0eGRzdC1cXHUwMDNldS5ydDYucnQ2aV9zcmMgPSBydC1cXHUwMDNlcnQ2aV9zcmM7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MTAzOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2FkZChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEwNC1cXG4tLVxcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jPTEyNz1zdGF0aWMgdm9pZCB4ZnJtNl9kc3RfZGVzdHJveShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYy0xMzEtXFx0ZHN0X2Rlc3Ryb3lfbWV0cmljc19nZW5lcmljKGRzdCk7XFxubmV0L2lwdjYveGZybTZfcG9saWN5LmM6MTMyOlxcdHJ0Nl91bmNhY2hlZF9saXN0X2RlbChcXHUwMDI2eGRzdC1cXHUwMDNldS5ydDYpO1xcbm5ldC9pcHY2L3hmcm02X3BvbGljeS5jLTEzMy1cXHRpZiAobGlrZWx5KHhkc3QtXFx1MDAzZXUucnQ2LnJ0NmlfaWRldikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE4OjU5LjYxMTU3NTUxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MjIyNDA5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgSVB2NC9JUHY2IFJvdXRpbmc6IEluaXRpYWwgQXNzZXNzbWVudCoqXG5cbk9rYXksIHRoaXMgZGVmaW5pdGVseSBsb29rcyBsaWtlIGEgc2l0dWF0aW9uIHJpcGUgZm9yIGZ1enppbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoLiBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBzcGVjaWZpYyBjcml0ZXJpYSBhbmQgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMgYmVmb3JlIEkgZGl2ZSBpbi4gRm9jdXNTeW1ib2xzIHdpbGwgYWxzbyBwbGF5IGFuIGltcG9ydGFudCByb2xlLCBzbyBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhvc2UgZWFybHkgb24uXG5cbkZpcnN0LCBsZXQncyBzdGFydCB3aXRoIHRoZSBgS2NvbmZpZ2AgZmlsZXMsIGZvY3VzaW5nIG9uIElQdjQgYW5kIElQdjYgY29uZmlndXJhdGlvbnMuIEknbSBnb2luZyB0byBkaWcgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHNlZSB0aGlzOlxuXG5gYGBcbmNvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcblx0aW50IFwiSVB2NCB1bmNhY2hlZCByb3V0ZSBoYXNoIGJpdHNcIlxuXHRyYW5nZSAxIDEwXG5cdGRlZmF1bHQgNlxuYGBgXG5cbkknbGwgcXVpY2tseSBjaGVjayBpZiB0aGlzIHZhcmlhYmxlIGlzIHVuZGVyIGEgbWVudSwgd2hpY2ggbWlnaHQgcmVzdHJpY3QgaXRzIHZpc2liaWxpdHkgb3IgaW5mbHVlbmNlLiBJJ2xsIHNjYW4gYXJvdW5kIGxpbmUgMTAzIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBnZXQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MTYuODMzOTg3ODA5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0XFx0aGVscFxcbiAgOTY6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgd2hpY2ggaXMgcmVjb21tZW5kZWQsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIHByaW50XFxuICA5NzpcXHRcXHQgIHZlcmJvc2UgbWVzc2FnZXMgcmVnYXJkaW5nIHRoZSByb3V0aW5nLCBmb3IgZXhhbXBsZSB3YXJuaW5ncyBhYm91dFxcbiAgOTg6XFx0XFx0ICByZWNlaXZlZCBwYWNrZXRzIHdoaWNoIGxvb2sgc3RyYW5nZSBhbmQgY291bGQgYmUgZXZpZGVuY2Ugb2YgYW5cXG4gIDk5OlxcdFxcdCAgYXR0YWNrIG9yIGEgbWlzY29uZmlndXJlZCBzeXN0ZW0gc29tZXdoZXJlLiBUaGUgaW5mb3JtYXRpb24gaXNcXG4gMTAwOlxcdFxcdCAgaGFuZGxlZCBieSB0aGUga2xvZ2QgZGFlbW9uIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBrZXJuZWwgbWVzc2FnZXNcXG4gMTAxOlxcdFxcdCAgKFxcXCJtYW4ga2xvZ2RcXFwiKS5cXG4gMTAyOlxcdFxcbiAxMDM6XFx0Y29uZmlnIElQX1JPVVRFX0NMQVNTSURcXG4gMTA0OlxcdFxcdGJvb2xcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y29uZmlnIElQX1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUU1xcbiAxMDc6XFx0XFx0aW50IFxcXCJJUHY0IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1xcXCJcXG4gMTA4OlxcdFxcdHJhbmdlIDEgMTBcXG4gMTA5OlxcdFxcdGRlZmF1bHQgNlxcbiAxMTA6XFx0XFx0aGVscFxcbiAxMTE6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXFxuIDExMjpcXHRcXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXFxuIDExMzpcXHRcXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xcbiAxMTQ6XFx0XFx0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxcbiAxMTU6XFx0XFx0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdCAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgb2YgNiBiaXRzICg2NCBidWNrZXRzKS5cXG4gMTE4OlxcdFxcbiAxMTk6XFx0Y29uZmlnIElQX1BOUFxcbiAxMjA6XFx0XFx0Ym9vbCBcXFwiSVA6IGtlcm5lbCBsZXZlbCBhdXRvY29uZmlndXJhdGlvblxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgVGhpcyBlbmFibGVzIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIG9mIElQIGFkZHJlc3NlcyBvZiBkZXZpY2VzIGFuZFxcbiAxMjM6XFx0XFx0ICBvZiB0aGUgcm91dGluZyB0YWJsZSBkdXJpbmcga2VybmVsIGJvb3QsIGJhc2VkIG9uIGVpdGhlciBpbmZvcm1hdGlvblxcbiAxMjQ6XFx0XFx0ICBzdXBwbGllZCBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBvciBieSBCT09UUCBvciBSQVJQIHByb3RvY29scy5cXG4gMTI1OlxcdFxcdCAgWW91IG5lZWQgdG8gc2F5IFkgb25seSBmb3IgZGlza2xlc3MgbWFjaGluZXMgcmVxdWlyaW5nIG5ldHdvcmtcXG4gMTI2OlxcdFxcdCAgYWNjZXNzIHRvIGJvb3QgKGluIHdoaWNoIGNhc2UgeW91IHdhbnQgdG8gc2F5IFkgdG8gXFxcIlJvb3QgZmlsZSBzeXN0ZW1cXG4gMTI3OlxcdFxcdCAgb24gTkZTXFxcIiBhcyB3ZWxsKSwgYmVjYXVzZSBhbGwgb3RoZXIgbWFjaGluZXMgY29uZmlndXJlIHRoZSBuZXR3b3JrXFxuIDEyODpcXHRcXHQgIGluIHRoZWlyIHN0YXJ0dXAgc2NyaXB0cy5cXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToxNi44MzQwNjY2ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDEzNjU4ODc3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmU6IElQdjQgYW5kIElQdjYgUm91dGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIG5ldHdvcmsgc3RhY2suIEkgc2VlIHRoYXQgYG5ldC9pcHY0L0tjb25maWdgIGlzIG5lc3RlZCB1bmRlciB0aGUgYFwiSVA6IFRDUC9JUCBuZXR3b3JraW5nXCJgIG1lbnUsIGFuZCB0aGF0ICptZW51KiBpcyBjb250aW5nZW50IHVwb24gYElORVRgIGJlaW5nIGVuYWJsZWQuIFNvLCBJUHY0IHJvdXRlIG1hbmFnZW1lbnQsIG9yIGF0IGxlYXN0IHRoZSBjb25maWd1cmF0aW9uIGZvciBpdCwgcmVxdWlyZXMgdGhlIGBJTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuXG5cblRoZW4gSSBtb3ZlIG9udG8gYG5ldC9pcHY2L0tjb25maWdgLiBJIHNlZSBhIHNpbWlsYXIgcGF0dGVybiB3aXRoIGBJUFY2YC4gIGBJUFY2YCBlbmFibGVzIElQdjYgc3VwcG9ydC4gSSBhbHNvIHNlZSBhIGNvbmZpZyB2YXJpYWJsZSwgYElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCwgYW5kIGl0cyBhc3NvY2lhdGVkIHBhcmFtZXRlcnMuIFRoYXQgY29uZmlybXMgdGhhdCBJUHY2IHJvdXRpbmcgYWxzbyByZWxpZXMgb24gYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuU28sIHRvIGJlIGV4cGxpY2l0LCBgQ09ORklHX0lORVRgICppcyogbmVlZGVkIGZvciBJUHY0IHJvdXRlIGZ1bmN0aW9uYWxpdHksIGFuZCBgQ09ORklHX0lQVjZgIGlzIHJlcXVpcmVkIGZvciBJUHY2IHJvdXRlIGZ1bmN0aW9uYWxpdHkuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC5cblxuTm93LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gQXJlIGBJTkVUYCBhbmQgYElQVjZgIHRydWx5IHRoZSBzdGFuZGFyZCwgZnVuZGFtZW50YWwgY29uZmlncyBmb3IgSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHk/IEluIG15IGV4cGVyaWVuY2UsIHRoYXQncyB0eXBpY2FsbHkgdGhlIGNhc2UgaW4gYSBMaW51eCBrZXJuZWwuIEJ1dCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgd29ydGh3aGlsZS5cblxuVG8gbmFpbCB0aGlzIGRvd24sIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9pcHY2L01ha2VmaWxlYCBhbmQgYG5ldC9pcHY0L01ha2VmaWxlYCBmaWxlcy4gVGhlc2UgTWFrZWZpbGVzIG9mdGVuIGNvbnRhaW4gY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzZXMsIHdoaWNoIHNob3VsZCBmdXJ0aGVyIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGNvbmZpZyBvcHRpb25zIGFuZCB0aGUgcm91dGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjIwLjk3MDY1Nzc2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjg1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb3V0ZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA4MDYgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC82bG93cGFuL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX0ZSQUcpICs9IG5oY19naGNfZXh0X2ZyYWcub1xcbm5ldC82bG93cGFuL01ha2VmaWxlOjIyOm9iai0kKENPTkZJR182TE9XUEFOX0dIQ19FWFRfSERSX1JPVVRFKSArPSBuaGNfZ2hjX2V4dF9yb3V0ZS5vXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTMzMT1icl9uZl9pcHY0X2RhZGRyX3dhc19jaGFuZ2VkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM2OC0gKiBJZiBJUCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLCBpcF9yb3V0ZV9pbnB1dCgpIHdpbGwgZmFpbCwgd2hpbGVcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM2OTogKiBpcF9yb3V0ZV9vdXRwdXRfa2V5KCkgY2FuIHJldHVybiBzdWNjZXNzLiBUaGUgc291cmNlXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozNzA6ICogYWRkcmVzcyBmb3IgaXBfcm91dGVfb3V0cHV0X2tleSgpIGlzIHNldCB0byB6ZXJvLCBzbyBpcF9yb3V0ZV9vdXRwdXRfa2V5KClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3MS0gKiB0aGlua3Mgd2UncmUgaGFuZGxpbmcgYSBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXQgYW5kIHdvbid0IGNhcmVcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzczLSAqIGRldmljZSwgd2UgcHJvY2VlZCBhcyBpZiBpcF9yb3V0ZV9pbnB1dCgpIHN1Y2NlZWRlZC4gSWYgaXQgZGlmZmVycyBmcm9tIHRoZVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzc0OiAqIGxvZ2ljYWwgYnJpZGdlIHBvcnQgb3IgaWYgaXBfcm91dGVfb3V0cHV0X2tleSgpIGZhaWxzIHdlIGRyb3AgdGhlIHBhY2tldC5cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3NS0gKi9cXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlPTEyPW9iai0kKENPTkZJR19CUklER0VfTkZfRUJUQUJMRVNfTEVHQUNZKSArPSBlYnRhYmxlcy5vXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9NYWtlZmlsZS0xNC0jIHRhYmxlc1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlOjE1Om9iai0kKENPTkZJR19CUklER0VfRUJUX0JST1VURSkgKz0gZWJ0YWJsZV9icm91dGUub1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSKSArPSBlYnRhYmxlX2ZpbHRlci5vXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz0yMzgwPXN0YXRpYyBpbnQgX19icGZfcmVkaXJlY3RfbmVpZ2hfdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTIzOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MjM5OTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgXFx1MDAyNmZsNCwgTlVMTCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMjQwMC1cXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9jb3JlL2x3dF9icGYuYz0xODI9c3RhdGljIGludCBicGZfbHd0X3htaXRfcmVyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2NvcmUvbHd0X2JwZi5jLTIyMS1cXG5uZXQvY29yZS9sd3RfYnBmLmM6MjIyOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9jb3JlL2x3dF9icGYuYy0yMjMtXFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlLTUtXFxubmV0L2lwdjQvTWFrZWZpbGU6NjpvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmM9MTMxND1pbnQgaW5ldF9za19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTMyNy1cXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIGZsNCk7XFxubmV0L2lwdjQvYWZfaW5ldC5jOjEzMjg6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIGZsNCwgc2spO1xcbm5ldC9pcHY0L2FmX2luZXQuYy0xMzI5LVxcdGlmICghSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9NDU1PXN0YXRpYyBpbnQgYXJwX2ZpbHRlcihfX2JlMzIgc2lwLCBfX2JlMzIgdGlwLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvYXJwLmMtNDYxLVxcbm5ldC9pcHY0L2FycC5jOjQ2MjpcXHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIHNpcCwgdGlwLCAwLCBsM21kZXZfbWFzdGVyX2lmaW5kZXhfcmN1KGRldiksXFxubmV0L2lwdjQvYXJwLmMtNDYzLVxcdFxcdFxcdCAgICAgUlRfU0NPUEVfVU5JVkVSU0UpO1xcbi0tXFxubmV0L2lwdjQvYXJwLmM9MTAzOD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmFycF9yZXFfZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqcilcXG4tLVxcbm5ldC9pcHY0L2FycC5jLTEwNTEtXFxubmV0L2lwdjQvYXJwLmM6MTA1MjpcXHRydCA9IGlwX3JvdXRlX291dHB1dChuZXQsIGlwLCAwLCAwLCAwLCBSVF9TQ09QRV9MSU5LKTtcXG5uZXQvaXB2NC9hcnAuYy0xMDUzLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvZGF0YWdyYW0uYz0xMDI9dm9pZCBpcDRfZGF0YWdyYW1fcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9kYXRhZ3JhbS5jLTExNy1cXHRpbmV0X3NrX2luaXRfZmxvd2k0KGluZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L2RhdGFncmFtLmM6MTE4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3coc29ja19uZXQoc2spLCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvZGF0YWdyYW0uYy0xMTktXFx0ZHN0ID0gIUlTX0VSUihydCkgPyBcXHUwMDI2cnQtXFx1MDAzZWRzdCA6IE5VTEw7XFxuLS1cXG5uZXQvaXB2NC9pY21wLmM9NDE2PXN0YXRpYyB2b2lkIGljbXBfcmVwbHkoc3RydWN0IGljbXBfYnhtICppY21wX3BhcmFtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTQ2NC1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXFx1MDAyNmZsNCkpO1xcbm5ldC9pcHY0L2ljbXAuYzo0NjU6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaWNtcC5jLTQ2Ni1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2ljbXAuYz00OTQ9c3RhdGljIHN0cnVjdCBydGFibGUgKmljbXBfcm91dGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTUxOS1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2JfaW4sIGZsb3dpNF90b19mbG93aV9jb21tb24oZmw0KSk7XFxubmV0L2lwdjQvaWNtcC5jOjUyMDpcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaChuZXQsIGZsNCwgc2tiX2luKTtcXG5uZXQvaXB2NC9pY21wLmMtNTIxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTU0Ni1cXHRcXHRcXHRcXHQgICAgIGZsNF9kZWMuc2FkZHIpID09IFJUTl9MT0NBTCkge1xcbm5ldC9pcHY0L2ljbXAuYzo1NDc6XFx0XFx0cnQyID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNF9kZWMpO1xcbm5ldC9pcHY0L2ljbXAuYy01NDgtXFx0XFx0aWYgKElTX0VSUihydDIpKVxcbi0tXFxubmV0L2lwdjQvaWNtcC5jLTU2Ni1cXG5uZXQvaXB2NC9pY21wLmM6NTY3OlxcdFxcdHJ0MiA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDRfMik7XFxubmV0L2lwdjQvaWNtcC5jLTU2OC1cXHRcXHRpZiAoSVNfRVJSKHJ0MikpIHtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0zOTc9c3RhdGljIHN0cnVjdCBza19idWZmICppZ21wdjNfbmV3cGFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTQyMC1cXG5uZXQvaXB2NC9pZ21wLmM6NDIxOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgSUdNUFYzX0FMTF9NQ1IsIDAsXFxubmV0L2lwdjQvaWdtcC5jLTQyMi1cXHRcXHRcXHRcXHQgICAwLCAwLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTc4Mj1zdGF0aWMgaW50IGlnbXBfc2VuZF9yZXBvcnQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTgwNy1cXG5uZXQvaXB2NC9pZ21wLmM6ODA4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgZHN0LCAwLFxcbm5ldC9pcHY0L2lnbXAuYy04MDktXFx0XFx0XFx0XFx0ICAgMCwgMCxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xOTg2PXN0YXRpYyBzdHJ1Y3QgaW5fZGV2aWNlICppcF9tY19maW5kX2RldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcF9tcmVxbiAqaW1yKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXFx0aWYgKCFkZXYpIHtcXG5uZXQvaXB2NC9pZ21wLmM6MjAwMjpcXHRcXHRzdHJ1Y3QgcnRhYmxlICpydCA9IGlwX3JvdXRlX291dHB1dChuZXQsXFxubmV0L2lwdjQvaWdtcC5jLTIwMDMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGltci1cXHUwMDNlaW1yX211bHRpYWRkci5zX2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jPTc1OD1zdHJ1Y3QgZHN0X2VudHJ5ICppbmV0X2Nza19yb3V0ZV9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy03NzYtXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6Nzc3OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTc3OC1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9NzkzPXN0cnVjdCBkc3RfZW50cnkgKmluZXRfY3NrX3JvdXRlX2NoaWxkX3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy04MTMtXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6ODE0OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBmbDQsIHNrKTtcXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTgxNS1cXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM9MTU0MT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaW5ldF9jc2tfcmVidWlsZF9yb3V0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBmbG93aSAqZmwpXFxuLS1cXG5uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jLTE1NDktXFx0aW5ldF9za19pbml0X2Zsb3dpNChpbmV0LCBmbDQpO1xcbm5ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmM6MTU1MDpcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgZmw0LCBzayk7XFxubmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYy0xNTUxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzYtICAgLSB0cmFjZXJvdXRlIGRvZXMgbm90IHdvcmsuIEkgcGxhbm5lZCB0byByZWxheSBJQ01QIGZyb20gdHVubmVsLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjc3OiAgICAgc28gdGhhdCB0aGlzIHByb2JsZW0gd291bGQgYmUgc29sdmVkIGFuZCB0cmFjZXJvdXRlIG91dHB1dFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc4LSAgICAgd291bGQgZXZlbiBtb3JlIGluZm9ybWF0aXZlLiBUaGlzIGlkZWEgYXBwZWFyZWQgdG8gYmUgd3Jvbmc6XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTYzOS1cXHRcXHRcXHQgICAgc2tiLVxcdTAwM2VtYXJrLCBza2JfZ2V0X2hhc2goc2tiKSwga2V5LVxcdTAwM2VmbG93X2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDA6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KGRldl9uZXQoZGV2KSwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNjQxLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTQxPXN0YXRpYyBpbnQgaXBncmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTU2LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjk1NzpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9pcF9ncmUuYy05NTgtXFx0XFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9pcF9pbnB1dC5jPTI2OT1pcF9yY3Zfb3B0aW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDAtXFx0XFx0XFx0XFx0aWYgKElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KSlcXG5uZXQvaXB2NC9pcF9pbnB1dC5jOjMwMTpcXHRcXHRcXHRcXHRcXHRuZXRfaW5mb19yYXRlbGltaXRlZChcXFwic291cmNlIHJvdXRlIG9wdGlvbiAlcEk0IC1cXHUwMDNlICVwSTRcXFxcblxcXCIsXFxubmV0L2lwdjQvaXBfaW5wdXQuYy0zMDItXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aXBoLVxcdTAwM2VzYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lwX29wdGlvbnMuYy0zNC0gKiBXcml0ZSBvcHRpb25zIHRvIElQIGhlYWRlciwgcmVjb3JkIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG9cXG5uZXQvaXB2NC9pcF9vcHRpb25zLmM6MzU6ICogc291cmNlIHJvdXRlIG9wdGlvbiwgYWRkcmVzcyBvZiBvdXRnb2luZyBpbnRlcmZhY2VcXG5uZXQvaXB2NC9pcF9vcHRpb25zLmMtMzYtICogKHdlIHNob3VsZCBhbHJlYWR5IGtub3cgaXQsIHNvIHRoYXQgdGhpcyAgZnVuY3Rpb24gaXMgYWxsb3dlZCBiZVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9NDYyPWludCBfX2lwX3F1ZXVlX3htaXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk0LVxcdFxcdCAqL1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjQ5NTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KG5ldCwgZmw0LCBzayk7XFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtNDk2LVxcdFxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MTYwNT12b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpvcmlnX3NrLFxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMTY0OC1cXHRzZWN1cml0eV9za2JfY2xhc3NpZnlfZmxvdyhza2IsIGZsb3dpNF90b19mbG93aV9jb21tb24oXFx1MDAyNmZsNCkpO1xcbm5ldC9pcHY0L2lwX291dHB1dC5jOjE2NDk6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIFxcdTAwMjZmbDQsIHNrKTtcXG5uZXQvaXB2NC9pcF9vdXRwdXQuYy0xNjUwLVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz04OTI9aW50IGRvX2lwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy05NDYtXFx0fVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6OTQ3OlxcdGlmIChpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtOTQ4LVxcdFxcdHJldHVybiBpcF9tcm91dGVfc2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDA5PWludCBpcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyMi1cXHRcXHRcXHRvcHRuYW1lICE9IElQX1hGUk1fUE9MSUNZIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDIzOlxcdFxcdFxcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQyNC1cXHRcXHRlcnIgPSBuZl9zZXRzb2Nrb3B0KHNrLCBQRl9JTkVULCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MDc9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTE3LVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTUxODpcXHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MTktXFx0XFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE3NjA9aW50IGlwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NzAtXFx0aWYgKGVyciA9PSAtRU5PUFJPVE9PUFQgXFx1MDAyNlxcdTAwMjYgb3B0bmFtZSAhPSBJUF9QS1RPUFRJT05TIFxcdTAwMjZcXHUwMDI2XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzcxOlxcdFxcdFxcdCFpcF9tcm91dGVfb3B0KG9wdG5hbWUpKSB7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzcyLVxcdFxcdGludCBsZW47XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz0yODA9c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTI5OS1cXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5saW5rLCB0dW5uZWwtXFx1MDAzZWZ3bWFyaywgMCwgMCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzAwOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzAxLVxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9NTY5PXZvaWQgaXBfbWRfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTYxMS1cXHRpZiAoIXJ0KSB7XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NjEyOlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXFx1MDAzZW5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNjEzLVxcdFxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYz02Njc9dm9pZCBpcF90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtNzc5LVxcdGlmICghcnQpIHtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYzo3ODA6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy03ODEtXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYz0xNjk9c3RhdGljIG5ldGRldl90eF90IHZ0aV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF92dGkuYy0xODYtXFx0XFx0XFx0ZmwtXFx1MDAzZXUuaXA0LmZsb3dpNF9mbGFncyB8PSBGTE9XSV9GTEFHX0FOWVNSQztcXG5uZXQvaXB2NC9pcF92dGkuYzoxODc6XFx0XFx0XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCBcXHUwMDI2ZmwtXFx1MDAzZXUuaXA0KTtcXG5uZXQvaXB2NC9pcF92dGkuYy0xODgtXFx0XFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3Z0aS5jLTE5OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDYuZmxvd2k2X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY0L2lwX3Z0aS5jOjIwMDpcXHRcXHRcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KGRldl9uZXQoZGV2KSwgTlVMTCwgXFx1MDAyNmZsLVxcdTAwM2V1LmlwNik7XFxubmV0L2lwdjQvaXBfdnRpLmMtMjAxLVxcdFxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2NC9pcGlwLmM9MzU2PXN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM3MS1cXG5uZXQvaXB2NC9pcGlwLmM6MzcyOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0KGRldl9uZXQoY3R4LVxcdTAwM2VkZXYpLCB0aXBoLVxcdTAwM2VkYWRkciwgdGlwaC1cXHUwMDNlc2FkZHIsXFxubmV0L2lwdjQvaXBpcC5jLTM3My1cXHRcXHRcXHQgICAgIGluZXRfZHNmaWVsZF90b19kc2NwKHRpcGgtXFx1MDAzZXRvcyksXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9MTkwMj1zdGF0aWMgaW50IGlwbXJfcHJlcGFyZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTkyNS1cXHRpZiAodmlmLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZJRkZfVFVOTkVMKSB7XFxubmV0L2lwdjQvaXBtci5jOjE5MjY6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfcG9ydHMobmV0LCBcXHUwMDI2Zmw0LCBOVUxMLFxcbm5ldC9pcHY0L2lwbXIuYy0xOTI3LVxcdFxcdFxcdFxcdFxcdCAgIHZpZi1cXHUwMDNlcmVtb3RlLCB2aWYtXFx1MDAzZWxvY2FsLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTE5MzQtXFx0fSBlbHNlIHtcXG5uZXQvaXB2NC9pcG1yLmM6MTkzNTpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9wb3J0cyhuZXQsIFxcdTAwMjZmbDQsIE5VTEwsIGlwaC1cXHUwMDNlZGFkZHIsIDAsXFxubmV0L2lwdjQvaXBtci5jLTE5MzYtXFx0XFx0XFx0XFx0XFx0ICAgMCwgMCxcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci5jPTIyPWludCBpcF9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBhZGRyX3R5cGUpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYy01My1cXHRmaWI0X3J1bGVzX2Vhcmx5X2Zsb3dfZGlzc2VjdChuZXQsIHNrYiwgXFx1MDAyNmZsNCwgXFx1MDAyNmZsa2V5cyk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmM6NTQ6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtNTUtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIuYz05MT1pbnQgbmZfaXBfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LCBzdHJ1Y3QgZmxvd2kgKmZsLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyLmMtOTMte1xcbm5ldC9pcHY0L25ldGZpbHRlci5jOjk0OlxcdHN0cnVjdCBydGFibGUgKnJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbC1cXHUwMDNldS5pcDQpO1xcbm5ldC9pcHY0L25ldGZpbHRlci5jLTk1LVxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtMzgtXFx0Zmw0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfS05PV05fTkg7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6Mzk6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNDAtXFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9waW5nLmM9Njg4PXN0YXRpYyBpbnQgcGluZ192NF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvcGluZy5jLTc4Mi1cXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFxcdTAwMjZmbDQpKTtcXG5uZXQvaXB2NC9waW5nLmM6NzgzOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvcGluZy5jLTc4NC1cXHRpZiAoSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9NDg5PXN0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9yYXcuYy02MzUtXFx0c2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgZmxvd2k0X3RvX2Zsb3dpX2NvbW1vbihcXHUwMDI2Zmw0KSk7XFxubmV0L2lwdjQvcmF3LmM6NjM2OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBcXHUwMDI2Zmw0LCBzayk7XFxubmV0L2lwdjQvcmF3LmMtNjM3LVxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTUwLSAqXFx0Vml0YWx5IEUuIExhdnJvdlxcdDpcXHRSYWNlIGNvbmRpdGlvbiBpbiBpcF9yb3V0ZV9pbnB1dF9zbG93Llxcbm5ldC9pcHY0L3JvdXRlLmM6NTE6ICpcXHRUb2JpYXMgUmluZ3N0cm9tXFx0OlxcdFVuaW5pdGlhbGl6ZWQgcmVzLnR5cGUgaW4gaXBfcm91dGVfb3V0cHV0X3Nsb3cuXFxubmV0L2lwdjQvcm91dGUuYy01Mi0gKlxcdFZsYWRpbWlyIFYuIEl2YW5vdlxcdDpcXHRJUCBydWxlIGluZm8gKGZsb3dpZCkgaXMgcmVhbGx5IHVzZWZ1bC5cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTExNj12b2lkIGlwdjRfdXBkYXRlX3BtdHUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgbXR1LFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMTI1LVxcdFxcdFxcdCAwKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjExMjY6XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExMjctXFx0aWYgKCFJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTExMzQ9c3RhdGljIHZvaWQgX19pcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE0NC1cXG5uZXQvaXB2NC9yb3V0ZS5jOjExNDU6XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoc29ja19uZXQoc2spLCBcXHUwMDI2Zmw0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExNDYtXFx0aWYgKCFJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTExNTI9dm9pZCBpcHY0X3NrX3VwZGF0ZV9wbXR1KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgdTMyIG10dSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE3Ni1cXHRpZiAoUkVBRF9PTkNFKG9kc3QtXFx1MDAzZW9ic29sZXRlKSBcXHUwMDI2XFx1MDAyNiAhb2RzdC1cXHUwMDNlb3BzLVxcdTAwM2VjaGVjayhvZHN0LCAwKSkge1xcbm5ldC9pcHY0L3JvdXRlLmM6MTE3NzpcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNrKSwgXFx1MDAyNmZsNCwgc2spO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTE3OC1cXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTE4OS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjExOTA6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzayksIFxcdTAwMjZmbDQsIHNrKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTExOTEtXFx0XFx0aWYgKElTX0VSUihydCkpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTEyMDU9dm9pZCBpcHY0X3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTIxMi1cXHRfX2J1aWxkX2Zsb3dfa2V5KG5ldCwgXFx1MDAyNmZsNCwgTlVMTCwgaXBoLCBvaWYsIGlwaC1cXHUwMDNldG9zLCBwcm90b2NvbCwgMCwgMCk7XFxubmV0L2lwdjQvcm91dGUuYzoxMjEzOlxcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvcm91dGUuYy0xMjE0LVxcdGlmICghSVNfRVJSKHJ0KSkge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMjIxPXZvaWQgaXB2NF9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTEyMjgtXFx0X19idWlsZF9mbG93X2tleShuZXQsIFxcdTAwMjZmbDQsIHNrLCBpcGgsIDAsIDAsIDAsIDAsIDApO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTIyOTpcXHRydCA9IF9faXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTIzMC1cXHRpZiAoIUlTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjYwND1FWFBPUlRfU1lNQk9MKGlwX3JvdXRlX2lucHV0X25vcmVmKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjYwNi0vKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG5uZXQvaXB2NC9yb3V0ZS5jOjI2MDc6c3RhdGljIHN0cnVjdCBydGFibGUgKl9fbWtyb3V0ZV9vdXRwdXQoY29uc3Qgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI2MDgtXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93aTQgKmZsNCwgaW50IG9yaWdfb2lmLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yNzM1LVxcbm5ldC9pcHY0L3JvdXRlLmM6MjczNjpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd2k0ICpmbDQsXFxubmV0L2lwdjQvcm91dGUuYy0yNzM3LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI3NDktXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY0L3JvdXRlLmM6Mjc1MDpcXHRydGggPSBpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KG5ldCwgZmw0LCBcXHUwMDI2cmVzLCBza2IpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjc1MS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjc1NC19XFxubmV0L2lwdjQvcm91dGUuYzoyNzU1OkVYUE9SVF9TWU1CT0xfR1BMKGlwX3JvdXRlX291dHB1dF9rZXlfaGFzaCk7XFxubmV0L2lwdjQvcm91dGUuYy0yNzU2LVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjc1NzpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNCAqZmw0LFxcbm5ldC9pcHY0L3JvdXRlLmMtMjc1OC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcyxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMjkxOS1tYWtlX3JvdXRlOlxcbm5ldC9pcHY0L3JvdXRlLmM6MjkyMDpcXHRydGggPSBfX21rcm91dGVfb3V0cHV0KHJlcywgZmw0LCBvcmlnX29pZiwgZGV2X291dCwgZmxhZ3MpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMjkyMS1cXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjkzNz1zdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0yOTczLVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk3NDpzdHJ1Y3QgcnRhYmxlICppcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTQgKmZscDQsXFxubmV0L2lwdjQvcm91dGUuYy0yOTc1LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvcm91dGUuYy0yOTc2LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjI5Nzc6XFx0c3RydWN0IHJ0YWJsZSAqcnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkobmV0LCBmbHA0KTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTI5NzgtXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI5OTAtfVxcbm5ldC9pcHY0L3JvdXRlLmM6Mjk5MTpFWFBPUlRfU1lNQk9MX0dQTChpcF9yb3V0ZV9vdXRwdXRfZmxvdyk7XFxubmV0L2lwdjQvcm91dGUuYy0yOTkyLVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0zMzM1PXN0YXRpYyBpbnQgaW5ldF9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM0MjItXFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBuZXQtXFx1MDAzZWxvb3BiYWNrX2RldjtcXG5uZXQvaXB2NC9yb3V0ZS5jOjM0MjM6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5X2hhc2hfcmN1KG5ldCwgXFx1MDAyNmZsNCwgXFx1MDAyNnJlcywgc2tiKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTM0MjQtXFx0XFx0ZXJyID0gMDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MzY5Mj1zdGF0aWMgX19uZXRfZXhpdCB2b2lkIHN5c2N0bF9yb3V0ZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MDEtXFxubmV0L2lwdjQvcm91dGUuYzozNzAyOnN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgc3lzY3RsX3JvdXRlX29wcyA9IHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTM3MDMtXFx0LmluaXQgPSBzeXNjdGxfcm91dGVfbmV0X2luaXQsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM4MzItI2lmZGVmIENPTkZJR19TWVNDVExcXG5uZXQvaXB2NC9yb3V0ZS5jOjM4MzM6XFx0cmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2c3lzY3RsX3JvdXRlX29wcyk7XFxubmV0L2lwdjQvcm91dGUuYy0zODM0LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTQwNT1zdHJ1Y3Qgc29jayAqY29va2llX3Y0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00NjctXFx0c2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKFxcdTAwMjZmbDQpKTtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6NDY4OlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsIFxcdTAwMjZmbDQpO1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy00NjktXFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcC5jPTEyNDY9aW50IHVkcF9zZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L2lwdjQvdWRwLmMtMTQyMS1cXHRcXHRzZWN1cml0eV9za19jbGFzc2lmeV9mbG93KHNrLCBmbG93aTRfdG9fZmxvd2lfY29tbW9uKGZsNCkpO1xcbm5ldC9pcHY0L3VkcC5jOjE0MjI6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhuZXQsIGZsNCwgc2spO1xcbm5ldC9pcHY0L3VkcC5jLTE0MjMtXFx0XFx0aWYgKElTX0VSUihydCkpIHtcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jPTIyNT1zdHJ1Y3QgcnRhYmxlICp1ZHBfdHVubmVsX2RzdF9sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3VkcF90dW5uZWxfY29yZS5jLTI1NC1cXG5uZXQvaXB2NC91ZHBfdHVubmVsX2NvcmUuYzoyNTU6XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxubmV0L2lwdjQvdWRwX3R1bm5lbF9jb3JlLmMtMjU2LVxcdGlmIChJU19FUlIocnQpKSB7XFxuLS1cXG5uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYz0yMT1zdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqX194ZnJtNF9kc3RfbG9va3VwKHN0cnVjdCBmbG93aTQgKmZsNCxcXG4tLVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTM2LVxcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jOjM3OlxcdHJ0ID0gX19pcF9yb3V0ZV9vdXRwdXRfa2V5KHBhcmFtcy1cXHUwMDNlbmV0LCBmbDQpO1xcbm5ldC9pcHY0L3hmcm00X3BvbGljeS5jLTM4LVxcdGlmICghSVNfRVJSKHJ0KSlcXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jPTE5NT1zdGF0aWMgYm9vbCBpY21wdjZfeHJsaW1fYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1OCB0eXBlLFxcbi0tXFxubmV0L2lwdjYvaWNtcC5jLTIxMC1cXHQgKi9cXG5uZXQvaXB2Ni9pY21wLmM6MjExOlxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgZmw2KTtcXG5uZXQvaXB2Ni9pY21wLmMtMjEyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYz0yMzk9c3RhdGljIGJvb2wgaWNtcHY2X3J0X2hhc19wcmVmc3JjKHN0cnVjdCBzb2NrICpzaywgdTggdHlwZSxcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0yNDUtXFxubmV0L2lwdjYvaWNtcC5jOjI0NjpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIGZsNik7XFxubmV0L2lwdjYvaWNtcC5jLTI0Ny1cXHRpZiAoIWRzdC1cXHUwMDNlZXJyb3IpIHtcXG4tLVxcbm5ldC9pcHY2L2lsYS9pbGFfbHd0LmM9Mzg9c3RhdGljIGludCBpbGFfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvaWxhL2lsYV9sd3QuYy03Ny1cXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jOjc4OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG5uZXQvaXB2Ni9pbGEvaWxhX2x3dC5jLTc5LVxcdFxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jPTMzOD1zdGF0aWMgaW50IGlvYW02X291dHB1dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmMtNDE2LVxcbm5ldC9pcHY2L2lvYW02X2lwdHVubmVsLmM6NDE3OlxcdFxcdGRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBOVUxMLCBcXHUwMDI2Zmw2KTtcXG5uZXQvaXB2Ni9pb2FtNl9pcHR1bm5lbC5jLTQxOC1cXHRcXHRpZiAoZHN0LVxcdTAwM2VlcnJvcikge1xcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTktICpcXHRDaGFuZ2VzOlxcbm5ldC9pcHY2L2lwNl9maWIuYzoxMDogKlxcdFl1amkgU0VLSVlBIEBVU0FHSTpcXHRTdXBwb3J0IGRlZmF1bHQgcm91dGUgb24gcm91dGVyIG5vZGU7XFxubmV0L2lwdjYvaXA2X2ZpYi5jLTExLSAqXFx0XFx0XFx0XFx0cmVtb3ZlIGlwNl9udWxsX2VudHJ5IGZyb20gdGhlIHRvcCBvZlxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jPTExMzc9c3RhdGljIGludCBpcDZfZHN0X2xvb2t1cF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNDctXFx0LyogVGhlIGNvcnJlY3Qgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRvIGRvXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNDg6XFx0ICogaXA2X3JvdXRlX2dldF9zYWRkciwgYW5kIHRoZW4gaXA2X3JvdXRlX291dHB1dDsgaG93ZXZlcixcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE0OS1cXHQgKiB0aGUgcm91dGUtc3BlY2lmaWMgcHJlZmVycmVkIHNvdXJjZSBmb3JjZXMgdGhlXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExNTA6XFx0ICogaXA2X3JvdXRlX291dHB1dCBjYWxsIF9iZWZvcmVfIGlwNl9yb3V0ZV9nZXRfc2FkZHIuXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNTEtXFx0ICpcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1Mi1cXHQgKiBJbiBzb3VyY2Ugc3BlY2lmaWMgcm91dGluZyAobm8gc3JjPWFueSBkZWZhdWx0IHJvdXRlKSxcXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE1MzpcXHQgKiBpcDZfcm91dGVfb3V0cHV0IHdpbGwgZmFpbCBnaXZlbiBzcmM9YW55IHNhZGRyLCB0aG91Z2gsIHNvXFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExNTQtXFx0ICogdGhhdCdzIHdoeSB3ZSB0cnkgaXQgYWdhaW4gbGF0ZXIuXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE1OS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmM6MTE2MDpcXHRcXHQqZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIHNrLCBmbDYpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMTYxLVxcdFxcdHJ0ID0gKCpkc3QpLVxcdTAwM2VlcnJvciA/IE5VTEwgOiBkc3RfcnQ2X2luZm8oKmRzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTE4Ny1cXHRpZiAoISpkc3QpXFxubmV0L2lwdjYvaXA2X291dHB1dC5jOjExODg6XFx0XFx0KmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXRfZmxhZ3MobmV0LCBzaywgZmw2LCBmbGFncyk7XFxubmV0L2lwdjYvaXA2X291dHB1dC5jLTExODktXFxuLS1cXG5uZXQvaXB2Ni9pcDZfb3V0cHV0LmMtMTIyOS1cXHRcXHRcXHRtZW1zZXQoXFx1MDAyNmZsX2d3Ni5kYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYzoxMjMwOlxcdFxcdFxcdCpkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFxcdTAwMjZmbF9ndzYpO1xcbm5ldC9pcHY2L2lwNl9vdXRwdXQuYy0xMjMxLVxcdFxcdFxcdGVyciA9ICgqZHN0KS1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9NTY3PWlwNGlwNl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjIyLVxcdC8qIFRyeSB0byBndWVzcyBpbmNvbWluZyBpbnRlcmZhY2UgKi9cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjIzOlxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBcXHUwMDI2Zmw0LCBOVUxMLCBlaXBoLVxcdTAwM2VzYWRkcixcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtNjI0LVxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIElQUFJPVE9fSVBJUCxcXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MzMtXFx0aWYgKHJ0LVxcdTAwM2VydF9mbGFncyBcXHUwMDI2IFJUQ0ZfTE9DQUwpIHtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6NjM0OlxcdFxcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X3BvcnRzKGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpLCBcXHUwMDI2Zmw0LCBOVUxMLFxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy02MzUtXFx0XFx0XFx0XFx0XFx0ICAgZWlwaC1cXHUwMDNlZGFkZHIsIGVpcGgtXFx1MDAzZXNhZGRyLCAwLCAwLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTExMDA9aW50IGlwNl90bmxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX3U4IGRzZmllbGQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTE3OS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTE4MDpcXHRcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgZmw2KTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTE4MS1cXG4tLVxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODM5PXN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjQtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NjU6XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KGN0eC1cXHUwMDNlZGV2KSwgTlVMTCwgXFx1MDAyNmZsNik7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NjYtXFx0aWYgKCFkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdnRpLmM9NDQzPXZ0aTZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmxvd2kgKmZsKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ1OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDQuZmxvd2k0X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY2L2lwNl92dGkuYzo0NjA6XFx0XFx0XFx0cnQgPSBfX2lwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCBcXHUwMDI2ZmwtXFx1MDAzZXUuaXA0KTtcXG5uZXQvaXB2Ni9pcDZfdnRpLmMtNDYxLVxcdFxcdFxcdGlmIChJU19FUlIocnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2X3Z0aS5jLTQ2OS1cXHRcXHRcXHRmbC1cXHUwMDNldS5pcDYuZmxvd2k2X2ZsYWdzIHw9IEZMT1dJX0ZMQUdfQU5ZU1JDO1xcbm5ldC9pcHY2L2lwNl92dGkuYzo0NzA6XFx0XFx0XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChkZXZfbmV0KGRldiksIE5VTEwsIFxcdTAwMjZmbC1cXHUwMDNldS5pcDYpO1xcbm5ldC9pcHY2L2lwNl92dGkuYy00NzEtXFx0XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MjA4Mj1zdGF0aWMgaW50IGlwNm1yX3ByZXBhcmVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yMTEyLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjExMzpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgTlVMTCwgXFx1MDAyNmZsNik7XFxubmV0L2lwdjYvaXA2bXIuYy0yMTE0LVxcdGlmIChkc3QtXFx1MDAzZWVycm9yKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTM5NS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6Mzk2OlxcdGlmIChpcDZfbXJvdXRlX29wdChvcHRuYW1lKSlcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMzk3LVxcdFxcdHJldHVybiBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz05OTk9aW50IGRvX2lwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwNS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTAwNjpcXHRpZiAoaXA2X21yb3V0ZV9vcHQob3B0bmFtZSkpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMDctXFx0XFx0cmV0dXJuIGlwNl9tcm91dGVfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0xNjY0PXZvaWQgbmRpc2Nfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTcwMS1cXG5uZXQvaXB2Ni9uZGlzYy5jOjE3MDI6XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFxcdTAwMjZmbDYpO1xcbm5ldC9pcHY2L25kaXNjLmMtMTcwMy1cXHRpZiAoZHN0LVxcdTAwM2VlcnJvcikge1xcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM9MjQ9aW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2tfcGFydGlhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci5jLTQ5LVxcdGZpYjZfcnVsZXNfZWFybHlfZmxvd19kaXNzZWN0KG5ldCwgc2tiLCBcXHUwMDI2Zmw2LCBcXHUwMDI2ZmxrZXlzKTtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo1MDpcXHRkc3QgPSBpcDZfcm91dGVfb3V0cHV0KG5ldCwgc2ssIFxcdTAwMjZmbDYpO1xcbm5ldC9pcHY2L25ldGZpbHRlci5jLTUxLVxcdGVyciA9IGRzdC1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYz04OT1pbnQgX19uZl9pcDZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTMtXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X3NvY2sgZmFrZV9zayA9IHtcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYzo5NDpcXHRcXHQvKiBtYWtlcyBpcDZfcm91dGVfb3V0cHV0IHNldCBSVDZfTE9PS1VQX0ZfSUZBQ0U6ICovXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtOTUtXFx0XFx0LnNrLnNrX2JvdW5kX2Rldl9pZiA9IDEsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIuYy0xMDEtXFxubmV0L2lwdjYvbmV0ZmlsdGVyLmM6MTAyOlxcdHJlc3VsdCA9IGlwNl9yb3V0ZV9vdXRwdXQobmV0LCBzaywgXFx1MDAyNmZsLVxcdTAwM2V1LmlwNik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyLmMtMTAzLVxcdGVyciA9IHJlc3VsdC1cXHUwMDNlZXJyb3I7XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYz0xOT1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy0zMy1cXHRmbDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19LTk9XTl9OSDtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjEuOTk3NTIxMzkxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY2ODIzNTU3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSWRlbnRpZnlpbmcgS2V5IEZ1bmN0aW9ucyBhbmQgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gcGlucG9pbnRpbmcgZXhhY3RseSB3aGljaCBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkIHdpdGhpbiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyByb3V0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZSBsaXN0cyBmb3IgSVB2NCBhbmQgSVB2Ni5cblxuRmlyc3QsIGxvb2tpbmcgYXQgYG5ldC9pcHY0L3JvdXRlLmNgLCBJIHNlZSB0aGF0IGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgaGFzIGJlZW4gbW9kaWZpZWQuIEl0IG5vdyBjYWxjdWxhdGVzIHRoZSBoYXNoIGJ1Y2tldCB1c2luZyBgZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpYCBhbmQgc3RvcmVzIGl0IGluIGBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdGAuIEFsc28sIGBydF9mbHVzaF9kZXZgIGlzIG1vZGlmaWVkIHRvIGZsdXNoIGZyb20gYSBzcGVjaWZpYyBidWNrZXQuIFRoZW4sIGBpcF9ydF9pbml0YCBpcyBjaGFuZ2VkIHRvIGluaXRpYWxpemUgZWFjaCBidWNrZXQgaW4gdGhlIHRhYmxlIHBlciBDUFUuXG5cbk5leHQsIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgdGhlIGNoYW5nZXMgYXJlIGEgYml0IG1vcmUgaW50cmljYXRlLiBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBtb2RpZmllZCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHJvdXRlJ3MgaW50ZXJmYWNlIGRldmljZSAoYHJ0LVx1MDAzZXJ0NmlfaWRldmApIGRvZXNuJ3QgbWF0Y2ggdGhlIHJvdXRlJ3MgZGV2aWNlIChgcnRfZGV2YCksIHBsYWNpbmcgdGhlIHJvdXRlIGluIGB0YWJsZS1cdTAwM2VtaXNtYXRjaGAgaWYgaXQgZG9lc24ndC4gT3RoZXJ3aXNlLCBpdCB1c2VzIHRoZSBzdGFuZGFyZCBidWNrZXQuIEEgbmV3IGhlbHBlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCwgaGFzIGJlZW4gZXh0cmFjdGVkIGZyb20gYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAuIFRoZSBsYXR0ZXIgaXMgbW9kaWZpZWQgdG8gZmx1c2ggdGhlIG1hdGNoaW5nIGJ1Y2tldCBhbmQgYWxzbyBgdGFibGUtXHUwMDNlbWlzbWF0Y2hgLiBBbHNvLCBgaXA2X3JvdXRlX2luaXRgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaW5pdGlhbGl6ZSBlYWNoIGJ1Y2tldCBhbmQgdGhlIG1pc21hdGNoIGxpc3QgcGVyIENQVS5cblxuTXkgYXR0ZW50aW9uIGlzIGRyYXduIHRvIHRoZSBmYWN0IHRoYXQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgY2FsbGVkIGJ5IGBydDZfZGlzYWJsZV9pcGAg4oCTIHRoaXMgaXMgYSBrZXkgcG9pbnQgc2luY2UgdGhpcyB0eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFuIGludGVyZmFjZSBnb2VzIGRvd24uIE5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZzogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgc3RhdGljPyBJIGp1c3QgZm91bmQgb3V0LCB5ZXMsIGl0J3Mgc3RhdGljISBBbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBpcyBzdGF0aWMgYXMgd2VsbC4gQnV0IHdhaXQsIGhlcmUgaXMgYW4gaW1wb3J0YW50IHBvaW50IHRvIGNvbnNpZGVyLiBcblxuSG93ZXZlciwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAgaXMgbm9uLXN0YXRpYyAoYSBnb29kIHRoaW5nISksIGFuZCBzbyBpcyBgcnQ2X2Rpc2FibGVfaXBgLiBTbyBpcyBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YC4gRXZlbiB0aG91Z2ggYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgc3RhdGljLCBJIGhhdmUgdG8gcmVtZW1iZXIgdGhhdCB2bWxpbnV4IHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IGlubGluZWQgZXhpc3QgaW4ga2FsbHN5bXMgaWYgbm90IGlubGluZWQuXG5cbk5vdywgY29uc2lkZXJpbmcgdGhlIGd1aWRlbGluZXMgZnJvbSBTZWN0aW9uIDQsIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIHRoYXQgaW1wbGVtZW50IHRoZSBsb2dpYyBvciBhcmUgdGhlIGVudHJ5cG9pbnRzIHRvIHRoZSBmZWF0dXJlLiBJdCBzYXlzIHRoYXQgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlbid0IGRpcmVjdGx5IHRhcmdldGFibGUsIGJ1dCB3ZSBzaG91bGQgaWRlbnRpZnkgbm9uLXN0YXRpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhlbS5cblxuU28sIGBydF9hZGRfdW5jYWNoZWRfbGlzdGAgYW5kIGBydF9mbHVzaF9kZXZgIGFyZSBleHBvcnRlZCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbmV0L2lwdjQvcm91dGUuY2AuIEFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpcyBub24tc3RhdGljIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gRmluYWxseSwgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgaXMgY2FsbGVkIGJ5IGBydDZfZGlzYWJsZV9pcGAgaW4gYG5ldC9pcHY2L3JvdXRlLmNgLiBJdCdzIGltcG9ydGFudCB0byBrbm93IHRoZSBjYWxsIHN0cnVjdHVyZSBhbmQgZW50cnkgcG9pbnRzIGluIHRoZSBzeXN0ZW0uXG5cbk5vdywgYSBxdWljayBncmVwIHRvIG1ha2Ugc3VyZTogSXMgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgY2FsbGVkIGFueXdoZXJlIGVsc2U/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwODIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6MjguNjc5ODc5MDI5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzYwMDg2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz0xNzc9c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yMDgtXFxubmV0L2lwdjYvcm91dGUuYzoyMDk6c3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2lwdjYvcm91dGUuYy0yMTAte1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYz01MDc0PXZvaWQgcnQ2X2Rpc2FibGVfaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudClcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNTA3OC1cXHRydDZfc3luY19kb3duX2RldihkZXYsIGV2ZW50KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjUwNzk6XFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KGRldik7XFxubmV0L2lwdjYvcm91dGUuYy01MDgwLVxcdG5laWdoX2lmZG93bihuZF90YWJsZShuZXQpLCBkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOToyOC43Mjc0ODc0NzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5MDY5MjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVW5jYWNoZWQgUm91dGUgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCB3YXMgZGlyZWN0bHkgYWx0ZXJlZC4gR29vZCwgaXQgd2Fzbid0LiBIb3dldmVyLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hgIHdhcyBpbnRyb2R1Y2VkIGFzIGEgaGVscGVyIGZ1bmN0aW9uIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgYW5kIGltcG9ydGFudGx5LCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2YCB3YXMgbW9kaWZpZWQsIGFuZCBgcnQ2X2Rpc2FibGVfaXBgIGlzIHRoZSBub24tc3RhdGljIGNhbGxlciBvZiBpdC5cblxuTm93LCBsZXQncyBicm9hZGVuIHRoZSBzY29wZSBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gIEknbGwgcXVpY2tseSBjaGVjayBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgIGFuZCBgcnRfZmx1c2hfZGV2YCBpbiBgbmV0L2lwdjQvcm91dGUuY2AgLS0gdGhleSdyZSBub24tc3RhdGljLiBBbmQgd2hpbGUgSSdtIGF0IGl0LCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYCBpbiBgbmV0L2lwdjYvcm91dGUuY2AgaXMgYWxzbyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSB0byBxdWlja2x5IHZlcmlmeSBhbGwgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuXG5cbk5leHQsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgdGVzdCBzdWl0ZS4gU3BlY2lmaWNhbGx5LCBJJ20gY2hlY2tpbmcgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaGAuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24ndCBicmVhayBhbnkgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gVGhlIHRlc3QgYHRlc3RfaXB2Nl91bmNhY2hlZF9taXNtYXRjaCgpYCBsb29rcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGl0J3MgZm9jdXNpbmcgb24gbG9jYWwgcm91dGVzIHRocm91Z2ggYSBWUkYsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHRoZSBzY2VuYXJpbyBvZiBhIFZSRiBiZWluZyB1c2VkIGFzIGBkc3QuZGV2YCB3aGlsZSByZXRhaW5pbmcgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIGBydDZpX2lkZXZgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSByYXcgaGVhZGVyIHNlbmRzIGNyZWF0ZSB1bmNhY2hlZCByb3V0ZXMsIGFuZCBuZXRlbSBrZWVwcyB0aGVtIHJlZmVyZW5jZWQgZHVyaW5nIGludGVyZmFjZSBkZWxldGlvbi5cblxuRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBjaGVjayBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgLiBJIHNlZSB0aGF0IHRoZSBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBjb25maWcgb3B0aW9ucyBleGlzdCBpbiBib3RoIHRoZSBJUHY0IGFuZCBJUHY2IEtjb25maWcgZmlsZXMsIGFuZCBhcmUgY29uZGl0aW9uYWwgb24gYElORVRgIGFuZCBgSVBWNmAsIHJlc3BlY3RpdmVseS4gSSBuZWVkIHRvIG5vdGUgaG93IHRoZXNlIGFyZSBoYW5kbGVkIGFuZCBpZiB0aGVyZSdzIGFueSBpbXBsaWNpdCBkZXBlbmRlbmN5LiBJdCdzIGltcG9ydGFudCB0byBjb25maXJtIHRoYXQgSVB2NCBhbmQgSVB2NiByb3V0ZSBoYXNoIGNvbmZpZ3VyYXRpb25zIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuIEkgd2lsbCBhbHNvIGNoZWNrIHdoZXJlIGBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNgIGlzIGRlZmluZWQgaW4gYG5ldC9pcHY0L0tjb25maWdgIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTozMy4zMTgxODM0NzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBJUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRjb25maWcgSVBfTVVMVElDQVNUXFxuICAgNjpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0aW5nXFxcIlxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvZGUgZm9yIGFkZHJlc3Npbmcgc2V2ZXJhbCBuZXR3b3JrZWQgY29tcHV0ZXJzIGF0IG9uY2UsXFxuICAgOTpcXHRcXHQgIGVubGFyZ2luZyB5b3VyIGtlcm5lbCBieSBhYm91dCAyIEtCLiBZb3UgbmVlZCBtdWx0aWNhc3RpbmcgaWYgeW91XFxuICAxMDpcXHRcXHQgIGludGVuZCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgTUJPTkUsIGEgaGlnaCBiYW5kd2lkdGggbmV0d29yayBvbiB0b3BcXG4gIDExOlxcdFxcdCAgb2YgdGhlIEludGVybmV0IHdoaWNoIGNhcnJpZXMgYXVkaW8gYW5kIHZpZGVvIGJyb2FkY2FzdHMuIE1vcmVcXG4gIDEyOlxcdFxcdCAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1CT05FIGlzIG9uIHRoZSBXV1cgYXRcXG4gIDEzOlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd3d3LnNhdmV0ei5jb20vbWJvbmUvXFx1MDAzZS4gRm9yIG1vc3QgcGVvcGxlLCBpdCdzIHNhZmUgdG8gc2F5IE4uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBJUF9BRFZBTkNFRF9ST1VURVJcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIklQOiBhZHZhbmNlZCByb3V0ZXJcXFwiXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIElmIHlvdSBpbnRlbmQgdG8gcnVuIHlvdXIgTGludXggYm94IG1vc3RseSBhcyBhIHJvdXRlciwgaS5lLiBhcyBhXFxuICAxOTpcXHRcXHQgIGNvbXB1dGVyIHRoYXQgZm9yd2FyZHMgYW5kIHJlZGlzdHJpYnV0ZXMgbmV0d29yayBwYWNrZXRzLCBzYXkgWTsgeW91XFxuICAyMDpcXHRcXHQgIHdpbGwgdGhlbiBiZSBwcmVzZW50ZWQgd2l0aCBzZXZlcmFsIG9wdGlvbnMgdGhhdCBhbGxvdyBtb3JlIHByZWNpc2VcXG4gIDIxOlxcdFxcdCAgY29udHJvbCBhYm91dCB0aGUgcm91dGluZyBwcm9jZXNzLlxcbiAgMjI6XFx0XFxuICAyMzpcXHRcXHQgIFRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiB3b24ndCBkaXJlY3RseSBhZmZlY3QgdGhlIGtlcm5lbDpcXG4gIDI0OlxcdFxcdCAgYW5zd2VyaW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwgdGhlXFxuICAyNTpcXHRcXHQgIHF1ZXN0aW9ucyBhYm91dCBhZHZhbmNlZCByb3V0aW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTozMy4zMTgyNzIyNzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODU5MTQyNTI1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBVbmNhY2hlZCBSb3V0ZSBMb2dpYyBDaGFuZ2VzIGZvciBGdXp6aW5nIEZvY3VzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gZXhhbWluaW5nIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB1bmNhY2hlZCByb3V0ZXMsIHNwZWNpZmljYWxseSB0aGUgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZS4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIG9wdGltYWwgY29uZmlndXJhdGlvbiBhbmQgZm9jdXMgZm9yIGZ1enppbmcuXG5cbkZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gTG9va2luZyBhdCBgbmV0L0tjb25maWdgLCBpdCdzIGNsZWFyIHRoYXQgYElORVRgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBJUHY0IGFuZCBgSVBWNmAgZm9yIElQdjYgcm91dGluZy4gVGhlc2UgYXJlIHRoZSB0b3AtbGV2ZWwgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGNvZGUgZGlyZWN0bHkgbW9kaWZpZXMgZmlsZXMgd2l0aGluIGBuZXQvaXB2NGAgYW5kIGBuZXQvaXB2NmAsIHNvIHRoZXkncmUgZXNzZW50aWFsLiBgSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBhbmQgYElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTYCBhcmUgYWxzbyBkZWZpbmVkLCBidXQgdGhleSBoYXZlIGRlZmF1bHRzLCBzbyBlbmFibGluZyBgSU5FVGAgYW5kIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyB2YWxpZGF0ZWQgYnkgY2hlY2tpbmcgdGhlIGBuZXQvTWFrZWZpbGVgLCB3aGljaCBjb25maXJtcyB0aGF0IHRoZSBgaXB2NGAgYW5kIGBpcHY2YCBzdWJkaXJlY3RvcmllcyBhcmUgaW5jbHVkZWQgYmFzZWQgb24gdGhlc2UgYENPTkZJR19gIGZsYWdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IHN5bWJvbHMgZm9yIGZ1enppbmcuIFRoZSBwYXRjaCBzaWduaWZpY2FudGx5IGFsdGVycyBob3cgdW5jYWNoZWQgcm91dGVzIGFyZSBoYW5kbGVkLCBzbyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVpciBhZGRpdGlvbiBhbmQgZmx1c2hpbmcgYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGxpa2UgYHJ0X2FkZF91bmNhY2hlZF9saXN0YCwgYHJ0X2ZsdXNoX2RldmAsIGFuZCBgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkYC4gQWx0aG91Z2ggYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoYCBhbmQgYHJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldmAgYXJlIHN0YXRpYywgYHJ0Nl9kaXNhYmxlX2lwYCB0aGF0IGNhbGxzIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgIGlzIGV4cG9ydGVkLCBzbyBJIGNhbiBpbmNsdWRlIHRoZW0uIFRoZSBgcnQ2X3VuY2FjaGVkX2xpc3RfZGVsYCBmdW5jdGlvbiB3YXNuJ3QgbW9kaWZpZWQgaW4gdGhlIHBhdGNoLiBUaGUgYm9vdC10aW1lIGBfX2luaXRgIGZ1bmN0aW9ucywgbGlrZSBgaXBfcnRfaW5pdGAsIGFyZSBsZXNzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyB0aGUgcGF0Y2ggdGFyZ2V0cyBydW50aW1lIGJlaGF2aW9yLlxuXG5TbywgaGVyZSdzIG15IGxpc3Qgb2YgZm9jdXNlZCBzeW1ib2xzOiBgcnRfYWRkX3VuY2FjaGVkX2xpc3RgLCBgcnRfZmx1c2hfZGV2YCwgYHJ0Nl91bmNhY2hlZF9saXN0X2FkZGAsIGBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaF9kZXZgLCBgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hgLCBhbmQgYHJ0Nl9kaXNhYmxlX2lwYC4gTm9uZSBvZiB0aGVzZSBzZWVtIHRvIGJlIGdlbmVyYWwtcHVycG9zZSBob3QtcGF0aCBvciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbGF0aXZlbHkgdGFyZ2V0ZWQgdG8gdGhlIHVuY2FjaGVkIHJvdXRlIGZ1bmN0aW9uYWxpdHkuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIuIENvbnNpZGVyaW5nIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgSVB2NC9JUHY2IG5ldHdvcmtpbmcgY29kZSwgYWx0ZXJzIHRoZSBmdW5kYW1lbnRhbCB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSAoZnJvbSBwZXItY3B1IGxpc3RzIHRvIHBlci1jcHUgaGFzaCB0YWJsZXMsIHdpdGggYSBzcGVjaWFsIGNhc2UgZm9yIElQdjYpLCBhbmQgdGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIHNvY2tldCBvcGVyYXRpb25zIGFuZCB2aXJ0dWFsIGRldmljZSBtYW5pcHVsYXRpb24gKGxpa2UgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGludGVyZmFjZXMgd2hpbGUgc2VuZGluZyB0cmFmZmljKSwgaXQncyBkZWZpbml0ZWx5IHdvcnRod2hpbGUuIFRoZSBjb2RlIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMsIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBkaXNjb3ZlcmluZyBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGVyZWZvcmUsIG15IGZpbmFsIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AgYXJlOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSU5FVFwiLCBcIklQVjZcIl1gXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJydF9hZGRfdW5jYWNoZWRfbGlzdFwiLCBcInJ0X2ZsdXNoX2RldlwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLCBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoXCIsIFwicnQ2X2Rpc2FibGVfaXBcIl1gXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZyBsb2dpYy4gSXQgcmVzdHJ1Y3R1cmVzIHRoZSB1bmNhY2hlZCByb3V0ZSBkYXRhIHN0cnVjdHVyZSwgaGFuZGxpbmcgcm91dGUgYWRkaXRpb24sIGhhc2hpbmcsIGFuZCBmbHVzaGluZy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgdGhyb3VnaCBuZXR3b3JraW5nIHN5c2NhbGxzIGFuZCB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIG1hbmFnZW1lbnQsIG1ha2luZyBpdCBhbiBleGNlbGxlbnQgdGFyZ2V0IGZvciBmdXp6aW5nLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuIFJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDk2LCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo0MS45MDk3MDA0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTU3MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0X2FkZF91bmNhY2hlZF9saXN0XCIsXG4gICAgXCJydF9mbHVzaF9kZXZcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2FkZFwiLFxuICAgIFwicnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hcIixcbiAgICBcInJ0Nl91bmNhY2hlZF9saXN0X2ZsdXNoX2RldlwiLFxuICAgIFwicnQ2X2Rpc2FibGVfaXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhbHRlcnMgY29yZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29kZSAobmV0L2lwdjQvcm91dGUuYyBhbmQgbmV0L2lwdjYvcm91dGUuYykgYnkgY29udmVydGluZyB0aGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMga2V5ZWQgYnkgbmV0X2RldmljZSBwb2ludGVycyB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucy4gSXQgYWxzbyBhZGRzIGEgbWlzbWF0Y2ggbGlzdCBpbiBJUHY2IHRvIGhhbmRsZSByb3V0ZXMgd2hlcmUgcnQ2aV9pZGV2IGRpZmZlcnMgZnJvbSBkc3QuZGV2IChlLmcuLCBWUkYgY29uZmlndXJhdGlvbnMpLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSBleGVyY2lzZWQgd2hlbiB1bmNhY2hlZCByb3V0ZXMgYXJlIGdlbmVyYXRlZCBhbmQgd2hlbiBuZXR3b3JrIGRldmljZXMgYXJlIGRpc2FibGVkIG9yIHVucmVnaXN0ZXJlZCwgbWFraW5nIHRoZW0gcmVhY2hhYmxlIGFuZCB3ZWxsIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjQxLjk4OTI4MTI2NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2NzExNzk2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo0MS45ODk4MDMyNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzY3MDY1MjgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc2luZ2xlIHBlci1DUFUgdW5jYWNoZWQgcm91dGUgbGlzdHMgaW50byBwZXItQ1BVIGhhc2ggdGFibGVzICh3aXRoIGEgbWlzbWF0Y2ggbGlzdCBmb3IgSVB2NikgdG8gb3B0aW1pemUgZGV2aWNlIGZsdXNoaW5nIGZvciBJUHY0IGFuZCBJUHY2IHVuY2FjaGVkIHJvdXRlcy4gXFxuXFxuQWxsIG5ld2x5IGludHJvZHVjZWQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgcGVyLUNQVSB0YWJsZXMgd2hvc2UgYnVja2V0cyAobGlzdCBoZWFkcyBhbmQgc3BpbmxvY2tzKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QgaW4gaXBfcnRfaW5pdCgpIGFuZCBpcDZfcm91dGVfaW5pdCgpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBhbGxvY2F0aW9ucyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgZXhwb3NlIGtlcm5lbCBkYXRhIG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlIChubyBjb3B5X3RvX3VzZXIsIG5ldGxpbmssIG9yIHNvY2tldCBvcHRpb25zIGNoYW5nZXMpLCBhbmQgY29udGFpbnMgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBcXG5cXG5BbnkgcG90ZW50aWFsIHJpc2tzIGludHJvZHVjZWQgYnkgbGlzdCBoYW5kbGluZywgbG9ja2luZywgb3IgZGV2aWNlIHJlZmVyZW5jZSB0cmFja2luZyAoc3VjaCBhcyByZWZjb3VudGluZyBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgY29uY3VycmVuY3kgaXNzdWVzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBzYW5pdGl6ZXJzIHN1Y2ggYXMgS0FTQU4sIExPQ0tERVAsIGFuZCByZWZjb3VudCB0cmFja2luZy4gQ29uc2VxdWVudGx5LCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4MjIzNDAyNmRjYTFkY2ViNmRmZTdmOTAwMTBkNjlmMjdhMDUyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwMjoxODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L0tjb25maWcgYi9uZXQvaXB2NC9LY29uZmlnXG5pbmRleCAzMDFiNDc2NjAzMDViLi43ZDQwY2EyMmQyYjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvS2NvbmZpZ1xuKysrIGIvbmV0L2lwdjQvS2NvbmZpZ1xuQEAgLTEwMyw2ICsxMDMsMTkgQEAgY29uZmlnIElQX1JPVVRFX1ZFUkJPU0VcbiBjb25maWcgSVBfUk9VVEVfQ0xBU1NJRFxuIFx0Ym9vbFxuIFxuK2NvbmZpZyBJUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFNcbitcdGludCBcIklQdjQgdW5jYWNoZWQgcm91dGUgaGFzaCBiaXRzXCJcbitcdHJhbmdlIDEgMTBcbitcdGRlZmF1bHQgNlxuK1x0aGVscFxuK1x0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgYnVja2V0cyB1c2VkIGluIHRoZSBJUHY0IHVuY2FjaGVkXG4rXHQgIHJvdXRlIGhhc2ggdGFibGUgdG8gMl5JUF9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQX1BOUFxuIFx0Ym9vbCBcIklQOiBrZXJuZWwgbGV2ZWwgYXV0b2NvbmZpZ3VyYXRpb25cIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBkN2RhMmYxYWNiYjU5Li5lMjhlMjE0MGNmNjIxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTc0LDYgKzc0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lnbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbXJvdXRlLmhcdTAwM2VcbkBAIC0xNTUyLDExICsxNTUzLDIxIEBAIHN0cnVjdCB1bmNhY2hlZF9saXN0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhlYWQ7XG4gfTtcbiBcbi1zdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCwgcnRfdW5jYWNoZWRfbGlzdCk7XG4rI2RlZmluZSBSVF9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKVxuK1xuK3N0cnVjdCB1bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUX1VOQ0FDSEVEX0hBU0hfU0laRV07XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcbiBcbiB2b2lkIHJ0X2FkZF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxuIHtcbi1cdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX2xpc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlKTtcbitcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcbitcbitcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCksXG4rXHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xuIFxuQEAgLTE1ODgsMTQgKzE1OTksMTkgQEAgdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGludCBjcHU7XG4gXG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHR1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIoZGV2LFxuK1x0XHRcdFx0XHQgICAgICBDT05GSUdfSVBfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XG4gXG4gXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXHUwMDI2dWwtXHUwMDNlaGVhZCwgZHN0LnJ0X3VuY2FjaGVkKSB7XG4tXHRcdFx0aWYgKHJ0LVx1MDAzZWRzdC5kZXYgIT0gZGV2KVxuK1x0XHRcdGlmIChkc3RfZGV2KFx1MDAyNnJ0LVx1MDAzZWRzdCkgIT0gZGV2KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHJ0LVx1MDAzZWRzdC5kZXZfcmN1LCBibGFja2hvbGVfbmV0ZGV2KTtcbiBcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UoZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuQEAgLTM3NzEsMTAgKzM3ODcsMTYgQEAgaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXG4gXHRpcF90c3RhbXBzID0gaWRlbnRzX2hhc2ggKyAoaXBfaWRlbnRzX21hc2sgKyAxKSAqIHNpemVvZigqaXBfaWRlbnRzKTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gXHUwMDI2cGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpO1xuK1x0XHRzdHJ1Y3QgdW5jYWNoZWRfdGFibGUgKnRhYmxlO1xuK1x0XHRpbnQgYnVja2V0O1xuK1xuK1x0XHR0YWJsZSA9IHBlcl9jcHVfcHRyKFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlRfVU5DQUNIRURfSEFTSF9TSVpFOyBidWNrZXQrKykge1xuK1x0XHRcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IFx1MDAyNnRhYmxlLVx1MDAzZWJ1Y2tldHNbYnVja2V0XTtcbiBcbi1cdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dWwtXHUwMDNlaGVhZCk7XG4tXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuK1x0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuK1x0XHR9XG4gXHR9XG4gI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEXG4gXHRpcF9ydF9hY2N0ID0gX19hbGxvY19wZXJjcHUoMjU2ICogc2l6ZW9mKHN0cnVjdCBpcF9ydF9hY2N0KSwgX19hbGlnbm9mX18oc3RydWN0IGlwX3J0X2FjY3QpKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZ1xuaW5kZXggYzM4MDZjNmFjOTZmOS4uMDI1MzE3ODY2OGJkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L0tjb25maWdcbisrKyBiL25ldC9pcHY2L0tjb25maWdcbkBAIC0xOCw2ICsxOCwxOSBAQCBtZW51Y29uZmlnIElQVjZcbiBcbiBpZiBJUFY2XG4gXG4rY29uZmlnIElQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTXG4rXHRpbnQgXCJJUHY2IHVuY2FjaGVkIHJvdXRlIGhhc2ggYml0c1wiXG4rXHRyYW5nZSAxIDEwXG4rXHRkZWZhdWx0IDZcbitcdGhlbHBcbitcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdXNlZCBpbiB0aGUgSVB2NiB1bmNhY2hlZFxuK1x0ICByb3V0ZSBoYXNoIHRhYmxlIHRvIDJeSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMgYnVja2V0cy4gVGhlXG4rXHQgIGFsbG93ZWQgdmFsdWVzIHNlbGVjdCBiZXR3ZWVuIDIgYW5kIDEwMjQgYnVja2V0cy4gTGFyZ2VyIHZhbHVlc1xuK1x0ICByZWR1Y2UgY29sbGlzaW9ucywgYnV0IGVhY2ggYWRkaXRpb25hbCBiaXQgZG91YmxlcyB0aGUgcGVyLUNQVVxuK1x0ICBtZW1vcnkgdXNlZCBieSB0aGUgdGFibGUuXG4rXG4rXHQgIElmIHVuc3VyZSwgdXNlIHRoZSBkZWZhdWx0IG9mIDYgYml0cyAoNjQgYnVja2V0cykuXG4rXG4gY29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbiBcdGJvb2wgXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcIlxuIFx0aGVscFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA3NTM1YjA5MDY4YTA2Li4wODBkY2UzMjkxNjgyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTQwLDYgKzQwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnNwcm94eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaGFzaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvamhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpcGhhc2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2VcbkBAIC0xMzMsMTEgKzEzNCwyNyBAQCBzdHJ1Y3QgdW5jYWNoZWRfbGlzdCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRoZWFkO1xuIH07XG4gXG4tc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0Nl91bmNhY2hlZF9saXN0KTtcbisjZGVmaW5lIFJUNl9VTkNBQ0hFRF9IQVNIX1NJWkVcdEJJVChDT05GSUdfSVBWNl9VTkNBQ0hFRF9ST1VURV9IQVNIX0JJVFMpXG4rXG4rc3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSB7XG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBidWNrZXRzW1JUNl9VTkNBQ0hFRF9IQVNIX1NJWkVdO1xuK1x0LyogUm91dGVzIHRoYXQgbXVzdCBiZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCB0d28gZGlmZmVyZW50IGRldmljZXMuICovXG4rXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCBtaXNtYXRjaDtcbit9O1xuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XG4gXG4gdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9hZGQoc3RydWN0IHJ0Nl9pbmZvICpydClcbiB7XG4tXHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCk7XG4rXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFx1MDAyNnJ0Nl91bmNhY2hlZF90YWJsZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuK1xuK1x0aWYgKHJ0LVx1MDAzZXJ0NmlfaWRldiBcdTAwMjZcdTAwMjYgcnQtXHUwMDNlcnQ2aV9pZGV2LVx1MDAzZWRldiAhPSBydF9kZXYpXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2g7XG4rXHRlbHNlXG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihydF9kZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuIFxuIFx0cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkX2xpc3QgPSB1bDtcbiBcbkBAIC0xNTcsNDAgKzE3NCw1MSBAQCB2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqc2FmZTtcbitcbitcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnVsLVx1MDAzZWhlYWQpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dWwtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuK1x0XHRzdHJ1Y3QgaW5ldDZfZGV2ICpydF9pZGV2ID0gcnQtXHUwMDNlcnQ2aV9pZGV2O1xuK1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqcnRfZGV2ID0gZHN0X2RldihcdTAwMjZydC1cdTAwM2Vkc3QpO1xuK1x0XHRib29sIGhhbmRsZWQgPSBmYWxzZTtcbitcbitcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuK1x0XHRcdHJ0LVx1MDAzZXJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGJsYWNraG9sZV9uZXRkZXYpO1xuK1x0XHRcdGluNl9kZXZfcHV0KHJ0X2lkZXYpO1xuK1x0XHRcdGhhbmRsZWQgPSB0cnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChydF9kZXYgPT0gZGV2KSB7XG4rXHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4rXHRcdFx0bmV0ZGV2X3JlZl9yZXBsYWNlKHJ0X2RldiwgYmxhY2tob2xlX25ldGRldixcbitcdFx0XHRcdFx0ICAgXHUwMDI2cnQtXHUwMDNlZHN0LmRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbitcdFx0XHRoYW5kbGVkID0gdHJ1ZTtcbitcdFx0fVxuK1x0XHRpZiAoaGFuZGxlZClcbitcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnJ0LVx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0aW50IGNwdTtcbiBcbiBcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbi1cdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX2xpc3QsIGNwdSk7XG4tXHRcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xuK1x0XHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZTtcbitcdFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xuIFxuLVx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZ1bC1cdTAwM2VoZWFkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnVsLVx1MDAzZWxvY2spO1xuLVx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIHNhZmUsIFx1MDAyNnVsLVx1MDAzZWhlYWQsIGRzdC5ydF91bmNhY2hlZCkge1xuLVx0XHRcdHN0cnVjdCBpbmV0Nl9kZXYgKnJ0X2lkZXYgPSBydC1cdTAwM2VydDZpX2lkZXY7XG4tXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRcdFx0Ym9vbCBoYW5kbGVkID0gZmFsc2U7XG4tXG4tXHRcdFx0aWYgKHJ0X2lkZXYgXHUwMDI2XHUwMDI2IHJ0X2lkZXYtXHUwMDNlZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlcnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoYmxhY2tob2xlX25ldGRldik7XG4tXHRcdFx0XHRpbjZfZGV2X3B1dChydF9pZGV2KTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAocnRfZGV2ID09IGRldikge1xuLVx0XHRcdFx0cnQtXHUwMDNlZHN0LmRldiA9IGJsYWNraG9sZV9uZXRkZXY7XG4tXHRcdFx0XHRuZXRkZXZfcmVmX3JlcGxhY2UocnRfZGV2LCBibGFja2hvbGVfbmV0ZGV2LFxuLVx0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0LVx1MDAzZWRzdC5kZXZfdHJhY2tlcixcbi1cdFx0XHRcdFx0XHQgICBHRlBfQVRPTUlDKTtcbi1cdFx0XHRcdGhhbmRsZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0XHRpZiAoaGFuZGxlZClcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cnQtXHUwMDNlZHN0LnJ0X3VuY2FjaGVkKTtcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0dGFibGUgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUsIGNwdSk7XG4rXHRcdHVsID0gXHUwMDI2dGFibGUtXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXG4rXHRcdFx0XHRcdCAgICAgIENPTkZJR19JUFY2X1VOQ0FDSEVEX1JPVVRFX0hBU0hfQklUUyldO1xuK1x0XHRydDZfdW5jYWNoZWRfbGlzdF9mbHVzaCh1bCwgZGV2KTtcbitcdFx0cnQ2X3VuY2FjaGVkX2xpc3RfZmx1c2goXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gsIGRldik7XG4gXHR9XG4gfVxuIFxuQEAgLTY5ODcsMTAgKzcwMTUsMTggQEAgaW50IF9faW5pdCBpcDZfcm91dGVfaW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBwZXJfY3B1X3B0cihcdTAwMjZydDZfdW5jYWNoZWRfbGlzdCwgY3B1KTtcbitcdFx0c3RydWN0IHJ0Nl91bmNhY2hlZF90YWJsZSAqdGFibGU7XG4rXHRcdGludCBidWNrZXQ7XG4rXG4rXHRcdHRhYmxlID0gcGVyX2NwdV9wdHIoXHUwMDI2cnQ2X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xuK1x0XHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcdTAwM2MgUlQ2X1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcbitcdFx0XHRzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSBcdTAwMjZ0YWJsZS1cdTAwM2VidWNrZXRzW2J1Y2tldF07XG4gXG4tXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnVsLVx1MDAzZWhlYWQpO1xuLVx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ1bC1cdTAwM2VoZWFkKTtcbitcdFx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1bC1cdTAwM2Vsb2NrKTtcbitcdFx0fVxuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0YWJsZS1cdTAwM2VtaXNtYXRjaC5oZWFkKTtcbitcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dGFibGUtXHUwMDNlbWlzbWF0Y2gubG9jayk7XG4gXHR9XG4gXG4gb3V0OlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuaW5kZXggYjY0ZGQ4OTE2OTlkMy4uNGY0MDlkMTM1YTk5YSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC92cmYteGZybS10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3ZyZi14ZnJtLXRlc3RzLnNoXG5AQCAtMzg1LDYgKzM4NSwzNyBAQCBydW5fdGVzdHMoKVxuIFx0Y2xlYW51cF94ZnJtX2RldlxuIH1cbiBcbit0ZXN0X2lwdjZfdW5jYWNoZWRfbWlzbWF0Y2goKVxuK3tcbitcdGxvY2FsIHNlbmRlcl9waWRcbitcdGxvY2FsIGJhY2tsb2dcbitcdGxvY2FsIHJjXG4rXG4rXHQjIEEgbG9jYWwgcm91dGUgdGhyb3VnaCBhIFZSRiB1c2VzIHRoZSBWUkYgYXMgZHN0LmRldiB3aGlsZSByZXRhaW5pbmdcbitcdCMgdGhlIFZSRiBtZW1iZXIgaW50ZXJmYWNlIGluIHJ0NmlfaWRldi4gUmF3IGhlYWRlciBzZW5kcyBjcmVhdGUgdW5jYWNoZWRcbitcdCMgcm91dGVzLCBhbmQgbmV0ZW0ga2VlcHMgdGhlbSByZWZlcmVuY2VkIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgZGVsZXRlZC5cbitcdHJ1bl9jbWRfaG9zdDEgdGMgcWRpc2MgcmVwbGFjZSBkZXYgJHtWUkZ9IHJvb3QgbmV0ZW0gbGltaXQgMSBkZWxheSAxMHNcbitcdGlwIC02IC1uZXRucyBcIiRob3N0MVwiIHJvdXRlIGFkZCBsb2NhbCAke0hPU1QxXzZ9LzEyOCBkZXYgZXRoMFxuK1x0aXAgbmV0bnMgZXhlYyBcIiRob3N0MVwiIC4vbXNnX3plcm9jb3B5IC02IFxcXG4rXHRcdC1TICR7SE9TVDFfNn0gLUQgJHtIT1NUMV82fSAtcyAxMjAwIC10IDAgcmF3X2hkcmluY2wgXFxcbitcdFx0XHUwMDNlL2Rldi9udWxsIDJcdTAwM2VcdTAwMjYxIFx1MDAyNlxuK1x0c2VuZGVyX3BpZD0kIVxuK1x0d2FpdCBcIiRzZW5kZXJfcGlkXCJcbitcdHJjPSQ/XG4rXHRsb2dfdGVzdCAkcmMgMCBcIkNyZWF0ZSB1bmNhY2hlZCBJUHY2IHJvdXRlcyB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rXHRbICRyYyAtbmUgMCBdIFx1MDAyNlx1MDAyNiByZXR1cm5cbitcbitcdGJhY2tsb2c9JChpcCBuZXRucyBleGVjIFwiJGhvc3QxXCIgdGMgLXMgcWRpc2Mgc2hvdyBkZXYgJHtWUkZ9KVxuK1x0aWYgISBlY2hvIFwiJGJhY2tsb2dcIiB8IGdyZXAgLUVxICdiYWNrbG9nIC4qIFsxLTldWzAtOV0qcCc7IHRoZW5cbitcdFx0bG9nX3Rlc3QgMSAwIFwiUmV0YWluIHVuY2FjaGVkIElQdjYgcm91dGVzIGluIFZSRiBxZGlzY1wiXG4rXHRcdHJldHVyblxuK1x0ZmlcbitcdGxvZ190ZXN0IDAgMCBcIlJldGFpbiB1bmNhY2hlZCBJUHY2IHJvdXRlcyBpbiBWUkYgcWRpc2NcIlxuK1xuK1x0cnVuX2NtZF9ob3N0MSB0aW1lb3V0IDIgaXAgbGluayBkZWwgZXRoMFxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZsdXNoIHVuY2FjaGVkIElQdjYgcm91dGVzIHdpdGggbWlzbWF0Y2hlZCBkZXZpY2VzXCJcbit9XG4rXG4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiAjIHVzYWdlXG4gXG5AQCAtNDI1LDYgKzQ1NiwxMCBAQCBlY2hvXG4gZWNobyBcIm5ldGVtIHFkaXNjIG9uIFZSRiBkZXZpY2VcIlxuIHJ1bl90ZXN0c1xuIFxuK2VjaG9cbitlY2hvIFwiVW5jYWNoZWQgSVB2NiByb3V0ZSB3aXRoIG1pc21hdGNoZWQgZGV2aWNlc1wiXG4rdGVzdF9pcHY2X3VuY2FjaGVkX21pc21hdGNoXG4rXG4gcHJpbnRmIFwiXFxuVGVzdHMgcGFzc2VkOiAlM2RcXG5cIiAke25zdWNjZXNzfVxuIHByaW50ZiBcIlRlc3RzIGZhaWxlZDogJTNkXFxuXCIgICAke25mYWlsfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NDEuOTg5ODA0NDQ0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk2MDA4MTY1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRXZhbHVhdGlvbjogVW5jYWNoZWQgUm91dGUgSGFzaGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoYXQncyBhIHNlcmlvdXMgY29tbWl0bWVudCwgc28gSSBuZWVkIHRvIGJlIHRob3JvdWdoLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBhdGNoIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBpdCdzIGludHJvZHVjaW5nIGEgaGFzaGVkIGFwcHJvYWNoIHRvIG1hbmFnaW5nIFwidW5jYWNoZWRcIiByb3V0ZXMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgcGVyLUNQVSBsaW5rZWQgbGlzdC4gVGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBgbmV0L2lwdjQvcm91dGUuY2AsIGBuZXQvaXB2Ni9yb3V0ZS5jYCwgYW5kIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBvcHRpb25zLCBwbHVzIGEgbmV3IHNlbGZ0ZXN0LiBUaGUgY29yZSBpZGVhIGlzIHRvIGhhc2ggdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggYSByb3V0ZSB0byBkZXRlcm1pbmUgd2hpY2ggcGVyLUNQVSBidWNrZXQgaXQgYmVsb25ncyB0bywgaW1wcm92aW5nIHRoZSBlZmZpY2llbmN5IG9mIG9wZXJhdGlvbnMgbGlrZSBmbHVzaGluZy5cblxuTm93LCBJIGhhdmUgdG8gYXBwbHkgdGhlIHJ1bGVzIGluIG15IGhlYWQ6ICpJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/KiBJIGtub3cgdGhhdCdzIHRoZSBvbmx5IGp1c3RpZmljYXRpb24gZm9yIEtNU0FOLiBJIG5lZWQgdG8gbG9vayBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhdGNoIG1pZ2h0IGNyZWF0ZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhIHRoYXQgd291bGQgb25seSBiZSBjYXVnaHQgYnkgS01TQU4uIFRoaW5ncyBsaWtlOlxuXG4xLiAgU3RydWN0dXJlcyBnb2luZyB0byB1c2VyIHNwYWNlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbjQuICBQb3RlbnRpYWwgYnVmZmVyIG92ZXJydW5zIG9yIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgZHVlIHRvIGJvdW5kcyBjaGVja3MuXG5cblNvLCBsZXQncyBnbyBsaW5lIGJ5IGxpbmUsIHRoaW5raW5nIGxpa2UgYSBjb21waWxlciBhbmQgbWVtb3J5IGluc3BlY3Rvci5cbiogICBBcmUgYW55IG9mIHRoZXNlIHN0cnVjdHVyZXMgKGUuZy4sIGBydF91bmNhY2hlZF9saXN0YCBvciBgcnQ2X3VuY2FjaGVkX2xpc3RgKSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLCB0aGVzZSBhcmUgYWxsIGludGVybmFsIHJvdXRpbmcgbGlzdHMgbWFuYWdlZCB3aXRoaW4gdGhlIGtlcm5lbC4gVGhleSBhcmUgc3RvcmVkIGluIHBlci1DUFUgdmFyaWFibGVzIGFuZCBlbWJlZGRlZCBpbnRvIGRzdCBlbnRyaWVzLlxuKiAgIEFyZSB0aGUgcGVyLUNQVSB2YXJpYWJsZXMgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IGBERUZJTkVfUEVSX0NQVV9BTElHTkVEYCBpbmRpY2F0ZXMgKnN0YXRpYyogcGVyLUNQVSBhbGxvY2F0aW9uLiBUaGF0IG1lYW5zIHRoZXkgcmVzaWRlIGluIHRoZSBCU1Mgc2VnbWVudCwgd2hpY2ggaXMgKnplcm8taW5pdGlhbGl6ZWQqIGJ5IHRoZSBsaW5rZXIvbG9hZGVyLiBTbywgbm8gY29uY2VybnMgdGhlcmUuXG4qICAgQnV0IGl0J3Mgbm90IGVub3VnaCB0byByZWx5IG9uIHN0YXRpYyB6ZXJvLWluaXRpYWxpemF0aW9uLiBMZXQncyBtYWtlIHN1cmUgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGluZ3MgYW55d2F5LiBBbmQgeWVzLCBpbiBgaXBfcnRfaW5pdGAgYW5kIGBpcDZfcm91dGVfaW5pdGAgdGhlIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYWxsIGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcyB3aXRoaW4gdGhlIGhhc2ggdGFibGUgYnVja2V0cywgdXNpbmcgYElOSVRfTElTVF9IRUFEYCBhbmQgYHNwaW5fbG9ja19pbml0YC4gVGhlIElQdjYgdmVyc2lvbiBhbHNvIGluaXRpYWxpemVzIHRoZSBgbWlzbWF0Y2hgIGxpc3QuXG5cblNvLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCB0aGVyZSBpc24ndCBhbnl0aGluZyBoZXJlIHRoYXQgY3JlYXRlcyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJpc2tzLiBUaGVzZSBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvZGUgZXhwbGljaXRseSBpbml0aWFsaXplcyBldmVyeXRoaW5nLiBUaGVyZSBpc24ndCBhbnkgXCJjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsXCIgbm8gcG90ZW50aWFsIGluZm8gbGVha3MsIGFuZCBubyBzdHJ1Y3R1cmVzIGdvaW5nIHRvIHVzZXIgc3BhY2UuIFRoZSBjaGFuZ2VzIGFyZSBtYWlubHkgYWJvdXQgb3JnYW5pemF0aW9uIGFuZCBjb25jdXJyZW5jeS5cblxuVGhlcmVmb3JlLCBnaXZlbiBteSBleHBlcnQga25vd2xlZGdlIGFuZCByaWdvcm91cyBldmFsdWF0aW9uLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTi1zcGVjaWZpYyByaXNrcy4gSSB3b3VsZCAqbm90KiByZWNvbW1lbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDE0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjUxLjU5MDYyNDA3NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Nzc4NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRfdW5jYWNoZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3JvdXRlLmM9MTU1OD1zdHJ1Y3QgdW5jYWNoZWRfdGFibGUge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNTYxLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTU2MjpzdGF0aWMgREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3QgdW5jYWNoZWRfdGFibGUsIHJ0X3VuY2FjaGVkX3RhYmxlKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NjMtXFxubmV0L2lwdjQvcm91dGUuYz0xNTY0PXZvaWQgcnRfYWRkX3VuY2FjaGVkX2xpc3Qoc3RydWN0IHJ0YWJsZSAqcnQpXFxubmV0L2lwdjQvcm91dGUuYy0xNTY1LXtcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NjY6XFx0c3RydWN0IHVuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFxcdTAwMjZydF91bmNhY2hlZF90YWJsZSk7XFxubmV0L2lwdjQvcm91dGUuYy0xNTY3LVxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bDtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU3MS1cXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzI6XFx0cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0ID0gdWw7XFxubmV0L2lwdjQvcm91dGUuYy0xNTczLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU3NC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzU6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkKTtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1NzYtXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU3OT12b2lkIHJ0X2RlbF91bmNhY2hlZF9saXN0KHN0cnVjdCBydGFibGUgKnJ0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTU4MC17XFxubmV0L2lwdjQvcm91dGUuYzoxNTgxOlxcdHN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdDtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODItXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1ODQtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvcm91dGUuYzoxNTg1OlxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTU4Ni1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNTk2PXZvaWQgcnRfZmx1c2hfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MDQtXFxubmV0L2lwdjQvcm91dGUuYzoxNjA1OlxcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTYwNi1cXHRcXHR1bCA9IFxcdTAwMjZ0YWJsZS1cXHUwMDNlYnVja2V0c1toYXNoX3B0cihkZXYsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MTItXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ1bC1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvcm91dGUuYzoxNjEzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgc2FmZSwgXFx1MDAyNnVsLVxcdTAwM2VoZWFkLCBkc3QucnRfdW5jYWNoZWQpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jLTE2MTQtXFx0XFx0XFx0aWYgKGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpICE9IGRldilcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTYxOC1cXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnQtXFx1MDAzZWRzdC5kZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxubmV0L2lwdjQvcm91dGUuYzoxNjE5OlxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTYyMC1cXHRcXHR9XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTM3Njc9aW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTM3OTItXFxubmV0L2lwdjQvcm91dGUuYzozNzkzOlxcdFxcdHRhYmxlID0gcGVyX2NwdV9wdHIoXFx1MDAyNnJ0X3VuY2FjaGVkX3RhYmxlLCBjcHUpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMzc5NC1cXHRcXHRmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCBcXHUwMDNjIFJUX1VOQ0FDSEVEX0hBU0hfU0laRTsgYnVja2V0KyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDI6MTk6NTEuNjM5MjA5Nzk2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MDAwNjY4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIGBydDZfdW5jYWNoZWRfbGlzdF9kZWxgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpbiBgbmV0L2lwdjYvcm91dGUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciBwb3RlbnRpYWwgcHJvYmxlbXMpIHJlc2lkZSB3aGVuIHJlbW92aW5nIGVudHJpZXMgZnJvbSB0aGUgSVB2NiByb3V0aW5nIGNhY2hlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdW5jYWNoZWQgcm91dGUgZW50cmllcyBhcmUgYmVpbmcgaGFuZGxlZCB0byBlbnN1cmUgY29ycmVjdG5lc3MsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIFRoZSBkZXRhaWxzIGhlcmUgYXJlIGNyaXRpY2FsIGZvciB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIGVmZmljaWVuY3kgb2YgSVB2NiByb3V0aW5nIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBnZXQgY3JhY2tpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoxOTo1My4zMzkyNzk4MDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdHN0YXRpYyBERUZJTkVfUEVSX0NQVV9BTElHTkVEKHN0cnVjdCBydDZfdW5jYWNoZWRfdGFibGUsIHJ0Nl91bmNhY2hlZF90YWJsZSk7XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgcnQ2X3VuY2FjaGVkX2xpc3RfYWRkKHN0cnVjdCBydDZfaW5mbyAqcnQpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRzdHJ1Y3QgcnQ2X3VuY2FjaGVkX3RhYmxlICp0YWJsZSA9IHJhd19jcHVfcHRyKFxcdTAwMjZydDZfdW5jYWNoZWRfdGFibGUpO1xcbiAxNTA6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKnJ0X2RldiA9IGRzdF9kZXYoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiAxNTE6XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRpZiAocnQtXFx1MDAzZXJ0NmlfaWRldiBcXHUwMDI2XFx1MDAyNiBydC1cXHUwMDNlcnQ2aV9pZGV2LVxcdTAwM2VkZXYgIT0gcnRfZGV2KVxcbiAxNTQ6XFx0XFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZW1pc21hdGNoO1xcbiAxNTU6XFx0XFx0ZWxzZVxcbiAxNTY6XFx0XFx0XFx0dWwgPSBcXHUwMDI2dGFibGUtXFx1MDAzZWJ1Y2tldHNbaGFzaF9wdHIocnRfZGV2LFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgQ09ORklHX0lQVjZfVU5DQUNIRURfUk9VVEVfSEFTSF9CSVRTKV07XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdHJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdCA9IHVsO1xcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnVsLVxcdTAwM2Vsb2NrKTtcXG4gMTYyOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QucnRfdW5jYWNoZWQsIFxcdTAwMjZ1bC1cXHUwMDNlaGVhZCk7XFxuIDE2MzpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNjQ6XFx0fVxcbiAxNjU6XFx0XFxuIDE2NjpcXHR2b2lkIHJ0Nl91bmNhY2hlZF9saXN0X2RlbChzdHJ1Y3QgcnQ2X2luZm8gKnJ0KVxcbiAxNjc6XFx0e1xcbiAxNjg6XFx0XFx0c3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gcnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZF9saXN0O1xcbiAxNjk6XFx0XFxuIDE3MDpcXHRcXHRpZiAodWwpIHtcXG4gMTcxOlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNzI6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cnQtXFx1MDAzZWRzdC5ydF91bmNhY2hlZCk7XFxuIDE3MzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dWwtXFx1MDAzZWxvY2spO1xcbiAxNzQ6XFx0XFx0fVxcbiAxNzU6XFx0fVxcbiAxNzY6XFx0XFxuIDE3NzpcXHRzdGF0aWMgdm9pZCBydDZfdW5jYWNoZWRfbGlzdF9mbHVzaChzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwsXFxuIDE3ODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMTc5OlxcdHtcXG4gMTgwOlxcdFxcdHN0cnVjdCBydDZfaW5mbyAqcnQsICpzYWZlO1xcbiAxODE6XFx0XFxuIDE4MjpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2dWwtXFx1MDAzZWhlYWQpKVxcbiAxODM6XFx0XFx0XFx0cmV0dXJuO1xcbiAxODQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDAyOjE5OjUzLjMzOTUwOTg4M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjMyMDkwMjE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBGYWxzZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW4gdGhlc2Ugcm91dGluZyB0YWJsZSBkZWxldGlvbiBmdW5jdGlvbnMsIGBydC1cdTAwM2Vkc3QucnRfdW5jYWNoZWRfbGlzdGAgaXMgY29ycmVjdGx5IGFzc2lnbmVkIHRvIGB1bGAgZHVyaW5nIHRoZSBpbnNlcnRpb24gcHJvY2Vzcy4gU28sIGV2ZW4gaWYgdGhlIHJvdXRpbmcgZW50cnkgbGFuZHMgaW4gYSBkaWZmZXJlbnQgYnVja2V0IHRoYW4gZXhwZWN0ZWQsIHRoZSBkZWxldGlvbiBsb2dpYyBzaG91bGQgc3RpbGwgd29yayBmaW5lLiBUaGF0J3MgZ29vZC5cblxuVGhlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBgaXBfcnRfaW5pdCgpYCBhbmQgYGlwNl9yb3V0ZV9pbml0KClgLCBoYW5kbGUgdGhlIGNydWNpYWwgaW5pdGlhbGl6YXRpb24gb2YgYWxsIHRoZSBgaGVhZGAgYW5kIGBsb2NrYCBmaWVsZHMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3RhdGljLCBib290LXRpbWUgc3RydWN0dXJlcyBmb3IgdGhlIHBlci1DUFUgdGFibGVzLCBzbyBldmVyeXRoaW5nIHNob3VsZCBiZSBjbGVhbiBmcm9tIHRoZSBzdGFydC4gV2UncmUgaGFzaGluZyBgbmV0X2RldmljZWAgcG9pbnRlcnMgaGVyZS5cblxuQ3JpdGljYWxseSwgdGhlcmUgYXJlIG5vIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zLCBubyB1bmluaXRpYWxpemVkIHJlYWRzIGZyb20gdGhlIHN0YWNrIG9yIGhlYXAsIGFuZCBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCB3aGljaCBtZWFucyBubyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgaW4gdGhpcyBhcmVhLlxuXG5Mb29raW5nIGF0IHBvdGVudGlhbCBidWcgdmVjdG9ycywgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgc3RhbmRhcmQgc3VzcGVjdHM6XG4qICAgSGFzaCBjb2xsaXNpb25zIG9yIGxvb2t1cCBidWdzIOKAkyB0aGVzZSB3b3VsZCBiZSBsb2dpY2FsIGlzc3VlcyBpbiBob3cgd2UncmUgaGFzaGluZyB0aGluZ3MuXG4qICAgQ29uY3VycmVuY3kgcHJvYmxlbXMgb3IgbG9ja2luZyBpc3N1ZXMg4oCTIExPQ0tERVAgc2hvdWxkIGJlIGFibGUgdG8gY2F0Y2ggdGhlc2UuXG4qICAgVXNlLWFmdGVyLWZyZWUgb3IgcmVmY291bnQgcHJvYmxlbXMgb24gdGhlIGRldmljZSBvciByb3V0aW5nIGVudHJ5IOKAkyB0aGVzZSBhcmUgS0FTQU4gYW5kIHRoZSByZWZjb3VudCBzYW5pdGl6ZXJzJyB0ZXJyaXRvcnkuXG4qICAgTnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyDigJMgdGhlIGtlcm5lbCdzIHN0YW5kYXJkIGNoZWNrcyBzaG91bGQgaGFuZGxlIHRoZXNlLlxuXG5Ob25lIG9mIHRob3NlIGFyZSBzdWJ0bGUgS01TQU4tc3BlY2lmaWMgaXNzdWVzLiBUaGV5IGFyZSBhbGwgZGV0ZWN0YWJsZSB0aHJvdWdoIG90aGVyIG1lY2hhbmlzbXMgYW5kIHJlcHJlc2VudCB0aGUgZ2VuZXJhbCBjbGFzc2VzIG9mIHZ1bG5lcmFiaWxpdHkgdGhlIGV4aXN0aW5nIHNhbml0aXplcnMgYXJlIGRlc2lnbmVkIHRvIGZpbmQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuTm93LCBsZXQncyBjaGVjayB0aGUgYHNldC1yZXN1bHRzYCByZXF1aXJlbWVudHMgdG8gY29uZmlybS5cblxuKiAgIGBOZWVkc0tNU0FOYDogYm9vbGVhbiAoZmFsc2UpIC0gQ2hlY2suXG4qICAgYEtNU0FOUmVhc29uaW5nYDogc3RyaW5nIGV4cGxhaW5pbmcgd2h5IEtNU0FOIGlzIG5vdCBuZWVkZWQgYW5kIGNvbnRyYXN0aW5nIHdpdGggS0FTQU4vTE9DS0RFUCAtIENoZWNrLlxuXG5FdmVyeXRoaW5nIGlzIGNsZWFyLiBJJ20gY29uZmlkZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxMCwiT3V0cHV0VG9rZW5zIjoyMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwMjoyMDowNS42NjA0MTQ4MjdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHNpbmdsZSBwZXItQ1BVIHVuY2FjaGVkIHJvdXRlIGxpc3RzIGludG8gcGVyLUNQVSBoYXNoIHRhYmxlcyAod2l0aCBhIG1pc21hdGNoIGxpc3QgZm9yIElQdjYpIHRvIG9wdGltaXplIGRldmljZSBmbHVzaGluZyBmb3IgSVB2NCBhbmQgSVB2NiB1bmNhY2hlZCByb3V0ZXMuIFxcblxcbkFsbCBuZXdseSBpbnRyb2R1Y2VkIGRhdGEgc3RydWN0dXJlcyBhcmUgc3RhdGljYWxseSBkZWZpbmVkIHBlci1DUFUgdGFibGVzIHdob3NlIGJ1Y2tldHMgKGxpc3QgaGVhZHMgYW5kIHNwaW5sb2NrcykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGR1cmluZyBib290IGluIGlwX3J0X2luaXQoKSBhbmQgaXA2X3JvdXRlX2luaXQoKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgYWxsb2NhdGlvbnMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGV4cG9zZSBrZXJuZWwgZGF0YSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSAobm8gY29weV90b191c2VyLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucyBjaGFuZ2VzKSwgYW5kIGNvbnRhaW5zIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcy4gXFxuXFxuQW55IHBvdGVudGlhbCByaXNrcyBpbnRyb2R1Y2VkIGJ5IGxpc3QgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGRldmljZSByZWZlcmVuY2UgdHJhY2tpbmcgKHN1Y2ggYXMgcmVmY291bnRpbmcgYnVncywgdXNlLWFmdGVyLWZyZWUsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgc2FuaXRpemVycyBzdWNoIGFzIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVmY291bnQgdHJhY2tpbmcuIENvbnNlcXVlbnRseSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzaW5nbGUgcGVyLUNQVSB1bmNhY2hlZCByb3V0ZSBsaXN0cyBpbnRvIHBlci1DUFUgaGFzaCB0YWJsZXMgKHdpdGggYSBtaXNtYXRjaCBsaXN0IGZvciBJUHY2KSB0byBvcHRpbWl6ZSBkZXZpY2UgZmx1c2hpbmcgZm9yIElQdjQgYW5kIElQdjYgdW5jYWNoZWQgcm91dGVzLiBcXG5cXG5BbGwgbmV3bHkgaW50cm9kdWNlZCBkYXRhIHN0cnVjdHVyZXMgYXJlIHN0YXRpY2FsbHkgZGVmaW5lZCBwZXItQ1BVIHRhYmxlcyB3aG9zZSBidWNrZXRzIChsaXN0IGhlYWRzIGFuZCBzcGlubG9ja3MpIGFyZSBmdWxseSBpbml0aWFsaXplZCBkdXJpbmcgYm9vdCBpbiBpcF9ydF9pbml0KCkgYW5kIGlwNl9yb3V0ZV9pbml0KCkuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGFsbG9jYXRpb25zIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBleHBvc2Uga2VybmVsIGRhdGEgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UgKG5vIGNvcHlfdG9fdXNlciwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMgY2hhbmdlcyksIGFuZCBjb250YWlucyBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMuIFxcblxcbkFueSBwb3RlbnRpYWwgcmlza3MgaW50cm9kdWNlZCBieSBsaXN0IGhhbmRsaW5nLCBsb2NraW5nLCBvciBkZXZpY2UgcmVmZXJlbmNlIHRyYWNraW5nIChzdWNoIGFzIHJlZmNvdW50aW5nIGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHNhbml0aXplcnMgc3VjaCBhcyBLQVNBTiwgTE9DS0RFUCwgYW5kIHJlZmNvdW50IHRyYWNraW5nLiBDb25zZXF1ZW50bHksIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowwmj7c[1] Phase: Succeeded StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 02:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 02:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2] Phase: Succeeded StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 02:20:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 02:20:16 +0000 UTC FinishedAt: 2026-09-15 02:20:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwmj7c/series-workflowwmj7c-convert-artifact-2598851658/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 02:20:27 +0000 UTC FinishedAt: 2026-09-15 02:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 02:20:27 +0000 UTC FinishedAt: 2026-09-15 02:41:07 +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:*cad7995d-3c2e-462d-981b-5d173ca9e580,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-workflowwmj7c/series-workflowwmj7c-convert-artifact-2598851658/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": "97405d05-c2b5-4a53-93ef-08217689a990", "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-workflowwmj7c/series-workflowwmj7c-build-action-3460033592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 02:20:27 +0000 UTC FinishedAt: 2026-09-15 02:40:29 +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:*cad7995d-3c2e-462d-981b-5d173ca9e580,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-workflowwmj7c/series-workflowwmj7c-convert-artifact-2598851658/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": "97405d05-c2b5-4a53-93ef-08217689a990", "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-workflowwmj7c/series-workflowwmj7c-build-action-3460033592/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 02:41:07 +0000 UTC FinishedAt: 2026-09-15 02:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 02:41:07 +0000 UTC FinishedAt: 2026-09-15 02:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 02:41:07 +0000 UTC FinishedAt: 2026-09-15 02:41:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 02:41:07 +0000 UTC FinishedAt: 2026-09-15 02:41:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowwmj7c/series-workflowwmj7c-convert-artifact-3870082533/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 02:41:32 +0000 UTC FinishedAt: 2026-09-15 02:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 02:41:32 +0000 UTC FinishedAt: 2026-09-15 02:43:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*97405d05-c2b5-4a53-93ef-08217689a990,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-workflowwmj7c/series-workflowwmj7c-build-action-3460033592/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-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 02:43:36 +0000 UTC FinishedAt: 2026-09-15 02:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 02:43:36 +0000 UTC FinishedAt: 2026-09-15 02:43:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 02:43:36 +0000 UTC FinishedAt: 2026-09-15 03:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 02:43:36 +0000 UTC FinishedAt: 2026-09-15 03:04:03 +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:*cad7995d-3c2e-462d-981b-5d173ca9e580,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-workflowwmj7c/series-workflowwmj7c-convert-artifact-3870082533/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": "1c85ba19-e4b7-4e26-a571-a9b69cc10c34", "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-workflowwmj7c/series-workflowwmj7c-build-action-2196740657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 02:43:36 +0000 UTC FinishedAt: 2026-09-15 03:03:50 +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:*cad7995d-3c2e-462d-981b-5d173ca9e580,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-workflowwmj7c/series-workflowwmj7c-convert-artifact-3870082533/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": "1c85ba19-e4b7-4e26-a571-a9b69cc10c34", "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-workflowwmj7c/series-workflowwmj7c-build-action-2196740657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 03:04:03 +0000 UTC FinishedAt: 2026-09-15 03:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 03:04:03 +0000 UTC FinishedAt: 2026-09-15 03:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 03:04:03 +0000 UTC FinishedAt: 2026-09-15 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 03:04:03 +0000 UTC FinishedAt: 2026-09-15 03:05:52 +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:*1c85ba19-e4b7-4e26-a571-a9b69cc10c34,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-workflowwmj7c/series-workflowwmj7c-build-action-2196740657/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-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"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:*97405d05-c2b5-4a53-93ef-08217689a990,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c85ba19-e4b7-4e26-a571-a9b69cc10c34,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-workflowwmj7c/series-workflowwmj7c-build-action-3460033592/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-workflowwmj7c/series-workflowwmj7c-build-action-2196740657/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 03:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 03:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"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-workflowwmj7c/series-workflowwmj7c-convert-artifact-2687381610/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 03:06:02 +0000 UTC FinishedAt: 2026-09-15 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 03:06:12 +0000 UTC FinishedAt: 2026-09-15 06:10:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwmj7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rt_add_uncached_list","rt_flush_dev","rt6_uncached_list_add","rt6_uncached_list_flush","rt6_uncached_list_flush_dev","rt6_disable_ip"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"879e280b8486d4612ad1aa050d6fada2dd80cf1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","IPV6"],"series_id":"b8feef7f-ae2b-4258-ac17-b8349622dc25","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 03:06:12 +0000 UTC FinishedAt: 2026-09-15 06:10:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*97405d05-c2b5-4a53-93ef-08217689a990,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1c85ba19-e4b7-4e26-a571-a9b69cc10c34,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-workflowwmj7c/series-workflowwmj7c-build-action-3460033592/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-workflowwmj7c/series-workflowwmj7c-build-action-2196740657/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-workflowwmj7c/series-workflowwmj7c-convert-artifact-2687381610/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}