Name: series-workflowwrgpk Phase: Succeeded StartedAt: 2026-08-26 12:18:15 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[0] Phase: Succeeded StartedAt: 2026-08-26 12:18:15 +0000 UTC FinishedAt: 2026-08-26 12:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 12:18:15 +0000 UTC FinishedAt: 2026-08-26 12:32:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_BCM", "CAN_GW", "CAN_ISOTP", "CAN_RAW", "CAN_KVASER_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_BCM", "CAN_GW", "CAN_ISOTP", "CAN_RAW", "CAN_KVASER_USB" ], "series_id": "e0216bb3-ea73-4223-b89f-2361d36b8790" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "can_send", "can_rcv", "canfd_rcv", "canxl_rcv", "bcm_sendmsg", "bcm_connect", "cgw_create_job", "isotp_bind", "raw_bind", "kvaser_usb_hydra_read_bulk_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0JDTSYjMzQ7LAogICAgJiMzNDtDQU5fR1cmIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O0NBTl9SQVcmIzM0OywKICAgICYjMzQ7Q0FOX0tWQVNFUl9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtjYW5fcmN2JiMzNDssCiAgICAmIzM0O2NhbmZkX3JjdiYjMzQ7LAogICAgJiMzNDtjYW54bF9yY3YmIzM0OywKICAgICYjMzQ7YmNtX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7YmNtX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7Y2d3X2NyZWF0ZV9qb2ImIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtyYXdfYmluZCYjMzQ7LAogICAgJiMzNDtrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBjb25zaXN0cyBvZiB2YXJpb3VzIGJ1ZyBmaXhlcyBhY3Jvc3MgdGhlIENBTiBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgZml4aW5nIDMyLWJpdCBvdmVyZmxvd3MgaW4gYml0IHRpbWluZyBjYWxjdWxhdGlvbnMsIHJlcGxhY2luZyBga2ZyZWVfc2tiYCB3aXRoIGBkZXZfa2ZyZWVfc2tiX2FueWAgZm9yIHNhZmUgZXhlY3V0aW9uIGluIElSUSBjb250ZXh0LCBhZGRpbmcgc3BpbmxvY2tzIHRvIHByb3RlY3QgVFggcmluZyBidWZmZXJzIGluIHRoZSBSb2NrY2hpcCBDQU4gZHJpdmVyLCBmaXhpbmcgdGltZXIgc2h1dGRvd24gaW4gdGhlIEt2YXNlciBQQ0llIGRyaXZlciwgYW5kIGltcHJvdmluZyBVU0IgYnVsayBtZXNzYWdlIHBhcnNpbmcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvZiBmcmFnbWVudGVkIGNvbW1hbmRzLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MuIFRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBhZGRyZXNzIGxvZ2ljIGVycm9ycywgcmFjZSBjb25kaXRpb25zLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIFVCU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGV4cG9zZWQgYnkgdGhlc2UgcGF0Y2hlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgQ0FOIG5ldHdvcmtpbmcgdG8gdXNlIGBjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW5zdGVhZCBvZiBjaGVja2luZyBgZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJiMzOTtzIGJ1bGsgcmVhZCBjYWxsYmFjayB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBjb21tYW5kcyBhbmQgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENBTiBzb2NrZXRzIGFuZCBuZXRsaW5rLCBhcyB3ZWxsIGFzIHRocm91Z2ggVVNCIGVtdWxhdGlvbiwgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbmluZGV4IDQyNDk4ZTlkM2YzOGQuLjI3ODliOTlhYjZhODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuQEAgLTExOSw4ICYjNDM7MTE5LDEyIEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0ICAgICB0c2VnIFx1MDAzZT0gKGJ0Yy1cdTAwM2V0c2VnMV9taW4gJiM0MzsgYnRjLVx1MDAzZXRzZWcyX21pbikgKiAyOyB0c2VnLS0pIHtcbiBcdFx0dHNlZ2FsbCA9IENBTl9TWU5DX1NFRyAmIzQzOyB0c2VnIC8gMjtcbiBcbi1cdFx0LyogQ29tcHV0ZSBhbGwgcG9zc2libGUgdHNlZyBjaG9pY2VzICh0c2VnPXRzZWcxJiM0Mzt0c2VnMikgKi9cbi1cdFx0YnJwID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC1cdTAwM2ViaXRyYXRlKSAmIzQzOyB0c2VnICUgMjtcbiYjNDM7XHRcdC8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpLlxuJiM0MztcdFx0ICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LVx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcbiYjNDM7XHRcdCAqIHVzZXJzcGFjZSBiaXRyYXRlcywgc28gY29tcHV0ZSB0aGUgcHJvZHVjdCBpbiA2NCBiaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJycCA9IGRpdjY0X3U2NChwcml2LVx1MDAzZWNsb2NrLmZyZXEsXG4mIzQzO1x0XHRcdFx0bXVsX3UzMl91MzIodHNlZ2FsbCwgYnQtXHUwMDNlYml0cmF0ZSkpICYjNDM7IHRzZWcgJSAyO1xuIFxuIFx0XHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXG4gXHRcdGJycCA9IChicnAgLyBidGMtXHUwMDNlYnJwX2luYykgKiBidGMtXHUwMDNlYnJwX2luYztcbkBAIC0xMjgsNyAmIzQzOzEzMiw3IEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRiaXRyYXRlID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpO1xuLVx0XHRiaXRyYXRlX2Vycm9yID0gYWJzKGJ0LVx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcbiYjNDM7XHRcdGJpdHJhdGVfZXJyb3IgPSBhYnNfZGlmZihidC1cdTAwM2ViaXRyYXRlLCBiaXRyYXRlKTtcbiBcbiBcdFx0LyogdHNlZyBicnAgYml0ZXJyb3IgKi9cbiBcdFx0aWYgKGJpdHJhdGVfZXJyb3IgXHUwMDNlIGJlc3RfYml0cmF0ZV9lcnJvcilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuaW5kZXggOTVmY2RjMTAyNmY4MC4uZmFhZmIxMDMzZDQyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyIFx1MDAzY3dnQGdyYW5kZWdnZXIuY29tXHUwMDNlXG4gICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2Nhbi5oXHUwMDNlXG5AQCAtNTQsNiAmIzQzOzU1LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChpZHggXHUwMDNlPSBwcml2LVx1MDAzZWVjaG9fc2tiX21heCkge1xuIFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcblwmIzM0OyxcbiBcdFx0XHQgICBfX2Z1bmNfXywgaWR4LCBwcml2LVx1MDAzZWVjaG9fc2tiX21heCk7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC02Miw3ICYjNDM7NjQsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIChza2ItXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MCw3ICYjNDM7OTIsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fSBlbHNlIHtcbiBcdFx0LyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovXG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDslczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG5AQCAtMjIzLDcgJiM0MzsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfY2M7XG4gXHR9XG4gXG5AQCAtMjU0LDcgJiM0MzsyNTYsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfZmQ7XG4gXHR9XG4gXG5AQCAtMjkyLDcgJiM0MzsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfeGw7XG4gXHR9XG4gXG5AQCAtMzg0LDcgJiM0MzszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBFVEhfUF9DQU5YTDpcbi1cdFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4mIzQzO1x0XHRpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4gXHRcdFx0Z290byBpbnZhbF9za2I7XG4gXHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbkBAIC0xNzM5LDYgJiM0MzsxNzM5LDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF90ZWFyZG93bl9jYW5fY3RybHMoc3RydWN0IGt2YXNlcl9wY2llZmQgKnBjaWUpXG4gXHRcdFx0aW93cml0ZTMyKDAsIGNhbi1cdTAwM2VyZWdfYmFzZSAmIzQzOyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XG4gXHRcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcbiYjNDM7XHRcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuIFx0XHRcdGZyZWVfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE4NzksNyAmIzQzOzE4ODAsNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0c3RydWN0IGt2YXNlcl9wY2llZmRfY2FuICpjYW4gPSBwY2llLVx1MDAzZWNhbltpXTtcbiBcbiBcdFx0dW5yZWdpc3Rlcl9jYW5kZXYoY2FuLVx1MDAzZWNhbi5kZXYpO1xuLVx0XHR0aW1lcl9kZWxldGUoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiYjNDM7XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5AQCAtOTIxLDYgJiM0Mzs5MjEsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHByaXYtXHUwMDNlY2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTtcbiBcdHByaXYtXHUwMDNlY2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7XG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4gXG4gXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAobWF0Y2gpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG5pbmRleCAyNGU4N2RhYTFkZjAwLi41OTQyMDIzM2M5MTg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG5AQCAtMTAwLDE0ICYjNDM7MTAwLDI1IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSlcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXHRpZiAoIXNrYikge1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X2hlYWQ7XG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtXHUwMDNldHhfdGFpbDtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5kZXYsXG4gXHRcdFx0ICAgXCYjMzQ7JXM6IGVjaG9fc2tiWyV1XT1OVUxMIHR4X2hlYWQ9MHglMDh4IHR4X3RhaWw9MHglMDh4XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxuLVx0XHRcdCAgIHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7XHRcdFx0ICAgdHhfaGVhZF91bm1hc2tlZCwgdHhfdGFpbF91bm1hc2tlZCk7XG4gXG4gXHRcdHJldHVybiAtRU5PTVNHO1xuIFx0fVxuQEAgLTEyMywxNyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcdTAwMjZmcmFtZV9sZW4pO1xuIFxuIFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfdGFpbCwgcHJpdi1cdTAwM2V0eF90YWlsICYjNDM7IDEpO1xuJiM0MztcdFx0KnR4X2RvbmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXHRcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXHUwMDNlbmRldiwgMCwgMSwgZnJhbWVfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbiBcdFx0XHRcdFx0ICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpO1xuIFxuLVx0XHQqdHhfZG9uZSA9IHRydWU7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0aWYgKCEocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy5cbiBcdCAqXG5AQCAtMTQzLDcgJiM0MzsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSB8fFxuIFx0ICAgIChjZmRfcngtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJiMzOTtlZCBmcmFtZVxuQEAgLTE1MSwyMCAmIzQzOzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICgoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZVxuIFx0ICovXG4gXHRpZiAoY2ZkX25vbWluYWwtXHUwMDNlbGVuICE9IGNmZF9yeC1cdTAwM2VsZW4pXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnRcbiBcdCAqL1xuIFx0aWYgKCEoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fUlRSX0ZMQUcpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1lbWNtcChjZmRfbm9taW5hbC1cdTAwM2VkYXRhLCBjZmRfcngtXHUwMDNlZGF0YSwgY2ZkX25vbWluYWwtXHUwMDNlbGVuKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cbiBcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmtjYW5mZF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMTg1LDYgJiM0MzsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXG4gXHRya2NhbmZkX3htaXRfcmV0cnkocHJpdik7XG4gXG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuaW5kZXggMTIyMDBkY2ZkMzM4OS4uYjM2NzM0MWRkMGFlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiBcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMzMsMTMgJiM0MzszNSwyMiBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gY2ZkLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHO1xuIH1cbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiYjNDM7dW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdGlmIChwcml2LVx1MDAzZWRldnR5cGVfZGF0YS5xdWlya3MgXHUwMDI2IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNiBcdTAwMjZcdTAwMjZcbiBcdCAgICBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKHByaXYpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHR4X2ZyZWUgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHR4X2ZyZWUgPSBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpO1xuIFxuLVx0cmV0dXJuIHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHR4X2ZyZWU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbkBAIC01Nyw4ICYjNDM7NjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFxuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuLVx0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiYjNDM7XHRjb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XG4gfVxuQEAgLTY5LDYgJiM0Mzs4Miw3IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7XG4gXHR1bnNpZ25lZCBpbnQgdHhfaGVhZCwgZnJhbWVfbGVuO1xuIFx0Y29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICpjZmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBlcnI7XG4gXHR1OCBpO1xuIFxuQEAgLTg4LDcgJiM0MzsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG4tXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4mIzQzO1x0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4mIzQzO1x0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xuJiM0MztcdGNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdGlmIChjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHtcbiBcdFx0cmVnX2ZyYW1laW5mbyA9IFJLQ0FORkRfUkVHX0ZEX0ZSQU1FSU5GT19GUkFNRV9GT1JNQVQ7XG5AQCAtMTE0LDcgJiM0MzsxNDAsNiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0XHRcdCAgICBjZmQtXHUwMDNlbGVuKTtcbiBcdH1cbiBcbi1cdHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuIFx0cmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7XG4gXG4gXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTtcbkBAIC0xMjMsMTQgJiM0MzsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgJiM0MzsgaSxcbiBcdFx0XHQgICAgICAqKHUzMiAqKShjZmQtXHUwMDNlZGF0YSAmIzQzOyBpKSk7XG4gXG4tXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcbi1cdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG5ldGRldl9zZW50X3F1ZXVlKHByaXYtXHUwMDNlbmRldiwgZnJhbWVfbGVuKTtcbiYjNDM7XHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4gXG4gXHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF9oZWFkICYjNDM7IDEpO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuIFxuIFx0bmV0aWZfc3VicXVldWVfbWF5YmVfc3RvcChwcml2LVx1MDAzZW5kZXYsIDAsXG4gXHRcdFx0XHQgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLFxuQEAgLTE0Nyw2ICYjNDM7MTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuJiM0MztcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmggYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTQ3NCw2ICYjNDM7NDc1LDcgQEAgc3RydWN0IHJrY2FuZmRfcHJpdiB7XG4gXHRzdHJ1Y3QgY2FuX3J4X29mZmxvYWQgb2ZmbG9hZDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuIFxuJiM0MztcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi9cbiBcdHZvaWQgX19pb21lbSAqcmVncztcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG5AQCAtNTU2LDcgJiM0Mzs1NTgsNyBAQCB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0YXJ0KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4mIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG5pbmRleCBhZTkwZTY3MTZkZTViLi4yYmU4NTFlODkwN2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuQEAgLTc4Nyw3ICYjNDM7Nzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdHJldHVybiAwO1xuIFxuICBvdXRfZnJlZV9pcnE6XG4mIzQzO1x0cHJpdi1cdTAwM2Vmb3JjZV9xdWl0ID0gMTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VoaTMxMTBfbG9jayk7XG4gXHRmcmVlX2lycShzcGktXHUwMDNlaXJxLCBwcml2KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0aGkzMTEwX2h3X3NsZWVwKHNwaSk7XG4gIG91dF9jbG9zZTpcbiBcdGhpMzExMF9wb3dlcl9lbmFibGUocHJpdi1cdTAwM2V0cmFuc2NlaXZlciwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmNcbmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHtcbiBcdHU4IHJ4ZXJyO1xuIFx0dTggdHhlcnI7XG4gXHR1OCB2YWw7XG4tfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4mIzQzO30gX19wYWNrZWQ7XG4gXG4gc3RydWN0IGY4MTYwNF9zZmYge1xuIFx0X19iZTE2IGlkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG5pbmRleCBlZmJiN2JlZDM0YzlkLi5lZmU3YjNlZjQ4OWJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuQEAgLTUzNiw2ICYjNDM7NTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIC1FQUdBSU4gbWVhbnMgaW5jb21wbGV0ZTsgLUVJTlZBTCByZWplY3RzIHplcm8gdG8gZW5zdXJlIHByb2dyZXNzLiAqL1xuJiM0MztzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRcdHNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbilcbiYjNDM7e1xuJiM0MztcdGlmIChyZW1haW5pbmcgXHUwMDNjIHNpemVvZihjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubykpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcmVtYWluaW5nIFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuJiM0MztcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdGlmICghKmNtZF9sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuQEAgLTY3NSw4ICYjNDM7NjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubyxcbiBcdFx0XHRzaXplX3QgY21kX2xlbjtcbiBcbiBcdFx0XHR0bXBfY21kID0gYnVmICYjNDM7IHBvcztcbi1cdFx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZSh0bXBfY21kKTtcbi1cdFx0XHRpZiAocG9zICYjNDM7IGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbiYjNDM7XHRcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciB8fCBwb3MgJiM0MzsgY21kX2xlbiBcdTAwM2UgYWN0dWFsX2xlbikge1xuIFx0XHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0ICAgIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0yMTIwLDIzICYjNDM7MjEzOCw0NyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHR1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4gXHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikge1xuJiM0MztcdFx0Y29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7XG4gXHRcdGludCByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRpbnQgZXJyO1xuIFxuIFx0XHRjbWQgPSAoc3RydWN0IGt2YXNlcl9jbWQgKiljYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdFx0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbiYjNDM7XHRcdFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QoaW50LCBsZW4sIGNtZF9zaXplX2ZpZWxkX2VuZCAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xuJiM0MztcbiYjNDM7XHRcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLCByZW1haW5pbmdfYnl0ZXMpO1xuJiM0MztcdFx0XHR1c2JfcnhfbGVmdG92ZXJfbGVuICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gdXNiX3J4X2xlZnRvdmVyX2xlbjtcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4gXG4tXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuJiM0MztcdFx0XHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2MgY21kX3NpemVfZmllbGRfZW5kKSB7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgXHUwMDI2Y21kX2xlbik7XG4mIzQzO1x0XHRpZiAoZXJyIHx8IGNtZF9sZW4gXHUwMDNjIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLFxuIFx0XHRcdFx0XHRjbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4gXHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovXG4gXHRcdGlmIChyZW1haW5pbmdfYnl0ZXMgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2VcbiBcdFx0XHRcdFx0XHRLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsXG4mIzQzO1x0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYgJiM0MzsgcG9zLFxuIFx0XHQgICAgICAgcmVtYWluaW5nX2J5dGVzKTtcbiBcdFx0cG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4gXG5AQCAtMjE1MiwxMSAmIzQzOzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXG4gXHR3aGlsZSAocG9zIFx1MDAzYyBsZW4pIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuIFx0XHRjbWQgPSBidWYgJiM0MzsgcG9zO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIGxlbiAtIHBvcywgXHUwMDI2Y21kX2xlbik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7Rm9ybWF0IGVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRpZiAocG9zICYjNDM7IGNtZF9sZW4gXHUwMDNlIGxlbikge1xuJiM0MztcdFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyAmIzQzOyBjbWRfbGVuIFx1MDAzZSBsZW4pIHtcbiBcdFx0XHQvKiBXZSBnb3QgZmlyc3QgcGFydCBvZiBhIGNvbW1hbmQgKi9cbiBcdFx0XHRpbnQgbGVmdG92ZXJfYnl0ZXM7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuaW5kZXggYTcwYTAyOTY3MDcxMS4uNzhjNTg3MGUyZjlhMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuQEAgLTc2LDEyICYjNDM7NzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuIFx0Y2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLVx1MDAzZXNrKTtcbi1cdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuIFx0cmV0dXJuIG5za2I7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jXG5pbmRleCA3YmM4NmIxNzZiNGRlLi5lZjQzNWYyMmFjOTMzIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9hZl9jYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9hZl9jYW4uY1xuQEAgLTIyNiw3ICYjNDM7MjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXHUwMDNlZGV2KSkpIHtcbiBcdFx0ZXJyID0gLUVQRVJNO1xuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbkBAIC00NTIsNyAmIzQzOzQ1Miw3IEBAIGludCBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcbiBcbiBcdC8qIGluc2VydCBuZXcgcmVjZWl2ZXIgIChkZXYsY2FuaWQsbWFzaykgLVx1MDAzZSAoZnVuYyxkYXRhKSAqL1xuIFxuLVx0aWYgKGRldiBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpKSlcbiYjNDM7XHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNTE5LDcgJiM0Mzs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXHRzdHJ1Y3QgY2FuX3Jjdl9saXN0c19zdGF0cyAqcmN2X2xpc3RzX3N0YXRzID0gbmV0LVx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XG4gXHRzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7XG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNjg3LDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgdm9pZCBjYW5fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuJiM0MztcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcbiBcdFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuZmRfc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MTksNyAmIzQzOzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgZGV2LVx1MDAzZXR5cGUsIHNrYi1cdTAwM2VsZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vYmNtLmMgYi9uZXQvY2FuL2JjbS5jXG5pbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9iY20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9iY20uY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vYmNtLmhcdTAwM2VcbkBAIC0xNzE5LDcgJiM0MzsxNzIwLDcgQEAgc3RhdGljIGludCBiY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG5AQCAtMTg2Nyw3ICYjNDM7MTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIwMjQsNyAmIzQzOzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9ndy5jIGIvbmV0L2Nhbi9ndy5jXG5pbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9ndy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2d3LmNcbkBAIC01Miw2ICYjNDM7NTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2d3LmhcdTAwM2VcbkBAIC02MDksNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbiYjNDM7XHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXG4gXHRpZiAobXNnID09IE5FVERFVl9VTlJFR0lTVEVSKSB7XG5AQCAtMTE2MCw3ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlc3JjLmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZXNyYy5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cdTAwM2VzcmMuZGV2KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRnd2otXHUwMDNlZHN0LmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGd3ai1cdTAwM2VjY2d3LmRzdF9pZHgpO1xuQEAgLTExNjgsNyAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZ3dqLVx1MDAzZWRzdC5kZXYpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGd3ai1cdTAwM2Vkc3QuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbiYjNDM7XHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXHUwMDNlZHN0LmRldikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogaXMgc2VuZGluZyB0aGUgc2tiIGJhY2sgdG8gdGhlIGluY29taW5nIGludGVyZmFjZSBpbnRlbmRlZD8gKi9cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vaXNvdHAuaFx1MDAzZVxuQEAgLTE2MDYsNyAmIzQzOzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4mIzQzO1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dF9wdXRfZGV2O1xuIFx0fVxuQEAgLTE4OTMsNyAmIzQzOzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jXG5pbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9yYXcuY1xuQEAgLTM0NCw3ICYjNDM7MzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4mIzQzO1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcdTAwMjZcdTAwMjYgbXNnICE9IE5FVERFVl9ET1dOKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG5AQCAtNDg3LDcgJiM0Mzs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlblxuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9CQ00mIzM0OywKICAgICYjMzQ7Q0FOX0dXJiMzNDssCiAgICAmIzM0O0NBTl9JU09UUCYjMzQ7LAogICAgJiMzNDtDQU5fUkFXJiMzNDssCiAgICAmIzM0O0NBTl9LVkFTRVJfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2FuX3NlbmQmIzM0OywKICAgICYjMzQ7Y2FuX3JjdiYjMzQ7LAogICAgJiMzNDtjYW5mZF9yY3YmIzM0OywKICAgICYjMzQ7Y2FueGxfcmN2JiMzNDssCiAgICAmIzM0O2JjbV9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2JjbV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2Nnd19jcmVhdGVfam9iJiMzNDssCiAgICAmIzM0O2lzb3RwX2JpbmQmIzM0OywKICAgICYjMzQ7cmF3X2JpbmQmIzM0OywKICAgICYjMzQ7a3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgQ0FOIG5ldHdvcmtpbmcgdG8gdXNlIGBjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW5zdGVhZCBvZiBjaGVja2luZyBgZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJiMzOTtzIGJ1bGsgcmVhZCBjYWxsYmFjayB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBjb21tYW5kcyBhbmQgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENBTiBzb2NrZXRzIGFuZCBuZXRsaW5rLCBhcyB3ZWxsIGFzIHRocm91Z2ggVVNCIGVtdWxhdGlvbiwgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYwppbmRleCA0MjQ5OGU5ZDNmMzhkLi4yNzg5Yjk5YWI2YTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jCkBAIC0xMTksOCAmIzQzOzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwKIAkgICAgIHRzZWcgJmd0Oz0gKGJ0Yy0mZ3Q7dHNlZzFfbWluICYjNDM7IGJ0Yy0mZ3Q7dHNlZzJfbWluKSAqIDI7IHRzZWctLSkgewogCQl0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICYjNDM7IHRzZWcgLyAyOwogCi0JCS8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpICovCi0JCWJycCA9IHByaXYtJmd0O2Nsb2NrLmZyZXEgLyAodHNlZ2FsbCAqIGJ0LSZndDtiaXRyYXRlKSAmIzQzOyB0c2VnICUgMjsKJiM0MzsJCS8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpLgomIzQzOwkJICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LSZndDtiaXRyYXRlIGNhbiB3cmFwIHRvIHplcm8gZm9yIGxhcmdlCiYjNDM7CQkgKiB1c2Vyc3BhY2UgYml0cmF0ZXMsIHNvIGNvbXB1dGUgdGhlIHByb2R1Y3QgaW4gNjQgYml0LgomIzQzOwkJICovCiYjNDM7CQlicnAgPSBkaXY2NF91NjQocHJpdi0mZ3Q7Y2xvY2suZnJlcSwKJiM0MzsJCQkJbXVsX3UzMl91MzIodHNlZ2FsbCwgYnQtJmd0O2JpdHJhdGUpKSAmIzQzOyB0c2VnICUgMjsKIAogCQkvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovCiAJCWJycCA9IChicnAgLyBidGMtJmd0O2JycF9pbmMpICogYnRjLSZndDticnBfaW5jOwpAQCAtMTI4LDcgJiM0MzsxMzIsNyBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwKIAkJCWNvbnRpbnVlOwogCiAJCWJpdHJhdGUgPSBwcml2LSZndDtjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpOwotCQliaXRyYXRlX2Vycm9yID0gYWJzKGJ0LSZndDtiaXRyYXRlIC0gYml0cmF0ZSk7CiYjNDM7CQliaXRyYXRlX2Vycm9yID0gYWJzX2RpZmYoYnQtJmd0O2JpdHJhdGUsIGJpdHJhdGUpOwogCiAJCS8qIHRzZWcgYnJwIGJpdGVycm9yICovCiAJCWlmIChiaXRyYXRlX2Vycm9yICZndDsgYmVzdF9iaXRyYXRlX2Vycm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMKaW5kZXggOTVmY2RjMTAyNmY4MC4uZmFhZmIxMDMzZDQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFdvbGZnYW5nIEdyYW5kZWdnZXIgJmx0O3dnQGdyYW5kZWdnZXIuY29tJmd0OwogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvY2FuLmgmZ3Q7CkBAIC01NCw2ICYjNDM7NTUsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChpZHggJmd0Oz0gcHJpdi0mZ3Q7ZWNob19za2JfbWF4KSB7CiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0OyVzOiBCVUchIFRyeWluZyB0byBhY2Nlc3MgY2FuX3ByaXY6OmVjaG9fc2tiIG91dCBvZiBib3VuZHMgKCV1L21heCAldSlcbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIGlkeCwgcHJpdi0mZ3Q7ZWNob19za2JfbWF4KTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjIsNyAmIzQzOzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgKHNrYi0mZ3Q7cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSAmYW1wOyZhbXA7CiAJICAgICBza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSAmYW1wOyZhbXA7CiAJICAgICBza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkwLDcgJiM0Mzs5Miw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfSBlbHNlIHsKIAkJLyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovCiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0OyVzOiBCVUchIGVjaG9fc2tiICVkIGlzIG9jY3VwaWVkIVxuJiMzNDssIF9fZnVuY19fLCBpZHgpOwotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0yMjMsNyAmIzQzOzIyNSw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZikKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfY2M7CiAJfQogCkBAIC0yNTQsNyAmIzQzOzI1Niw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfZmQ7CiAJfQogCkBAIC0yOTIsNyAmIzQzOzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfeGw7CiAJfQogCkBAIC0zODQsNyAmIzQzOzM4Niw3IEBAIGJvb2wgY2FuX2Ryb3BwZWRfaW52YWxpZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJYnJlYWs7CiAKIAljYXNlIEVUSF9QX0NBTlhMOgotCQlpZiAoIWNhbl9pc19jYW54bF9za2Ioc2tiKSkKJiM0MzsJCWlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkKIAkJCWdvdG8gaW52YWxfc2tiOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwppbmRleCBkOGM5YmZiMjAyMzA0Li5hMDU5N2RiNzIwODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwpAQCAtMTczOSw2ICYjNDM7MTczOSw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfdGVhcmRvd25fY2FuX2N0cmxzKHN0cnVjdCBrdmFzZXJfcGNpZWZkICpwY2llKQogCQkJaW93cml0ZTMyKDAsIGNhbi0mZ3Q7cmVnX2Jhc2UgJiM0MzsgS1ZBU0VSX1BDSUVGRF9LQ0FOX0lFTl9SRUcpOwogCQkJa3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pOwogCQkJa3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pOwomIzQzOwkJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKIAkJCWZyZWVfY2FuZGV2KGNhbi0mZ3Q7Y2FuLmRldik7CiAJCX0KIAl9CkBAIC0xODc5LDcgJiM0MzsxODgwLDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXN0cnVjdCBrdmFzZXJfcGNpZWZkX2NhbiAqY2FuID0gcGNpZS0mZ3Q7Y2FuW2ldOwogCiAJCXVucmVnaXN0ZXJfY2FuZGV2KGNhbi0mZ3Q7Y2FuLmRldik7Ci0JCXRpbWVyX2RlbGV0ZSgmYW1wO2Nhbi0mZ3Q7YmVjX3BvbGxfdGltZXIpOwomIzQzOwkJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2Nhbi0mZ3Q7YmVjX3BvbGxfdGltZXIpOwogCQlrdmFzZXJfcGNpZWZkX3B3bV9zdG9wKGNhbik7CiAJCWt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYwppbmRleCAzN2MxYzIyYzQwYzlmLi4xY2FlODY5NzNkYTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMKQEAgLTkyMSw2ICYjNDM7OTIxLDcgQEAgc3RhdGljIGludCBya2NhbmZkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcHJpdi0mZ3Q7Y2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTsKIAlwcml2LSZndDtjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjsKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKIAogCW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAobWF0Y2gpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKaW5kZXggMjRlODdkYWExZGYwMC4uNTk0MjAyMzNjOTE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKQEAgLTEwMCwxNCAmIzQzOzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICpjZmRfbm9taW5hbDsKIAljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCB0eF90YWlsOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJdHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7CiAJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X3RhaWxdOwogCWlmICghc2tiKSB7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZF91bm1hc2tlZCA9IHByaXYtJmd0O3R4X2hlYWQ7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtJmd0O3R4X3RhaWw7CiYjNDM7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCQluZXRkZXZfZXJyKHByaXYtJmd0O25kZXYsCiAJCQkgICAmIzM0OyVzOiBlY2hvX3NrYlsldV09TlVMTCB0eF9oZWFkPTB4JTA4eCB0eF90YWlsPTB4JTA4eFxuJiMzNDssCiAJCQkgICBfX2Z1bmNfXywgdHhfdGFpbCwKLQkJCSAgIHByaXYtJmd0O3R4X2hlYWQsIHByaXYtJmd0O3R4X3RhaWwpOwomIzQzOwkJCSAgIHR4X2hlYWRfdW5tYXNrZWQsIHR4X3RhaWxfdW5tYXNrZWQpOwogCiAJCXJldHVybiAtRU5PTVNHOwogCX0KQEAgLTEyMywxNyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJCXJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCAmYW1wO2ZyYW1lX2xlbik7CiAKIAkJV1JJVEVfT05DRShwcml2LSZndDt0eF90YWlsLCBwcml2LSZndDt0eF90YWlsICYjNDM7IDEpOwomIzQzOwkJKnR4X2RvbmUgPSB0cnVlOwomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKIAkJbmV0aWZfc3VicXVldWVfY29tcGxldGVkX3dha2UocHJpdi0mZ3Q7bmRldiwgMCwgMSwgZnJhbWVfbGVuLAogCQkJCQkgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSwKIAkJCQkJICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpOwogCi0JCSp0eF9kb25lID0gdHJ1ZTsKLQogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIShwcml2LSZndDtkZXZ0eXBlX2RhdGEucXVpcmtzICZhbXA7IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNikpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogRXJyYXR1bSA2OiBFeHRlbmRlZCBmcmFtZXMgbWF5IGJlIHNlbmQgYXMgc3RhbmRhcmQgZnJhbWVzLgogCSAqCkBAIC0xNDMsNyAmIzQzOzE1NSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKIAkgKi8KIAlpZiAoIShjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykgfHwKIAkgICAgKGNmZF9yeC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogTm90IGFmZmVjdGVkIGlmOgogCSAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJiMzOTtlZCBmcmFtZQpAQCAtMTUxLDIwICYjNDM7MTYzLDIwIEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKIAkgKi8KIAlpZiAoKGNmZF9ub21pbmFsLSZndDtjYW5faWQgJmFtcDsgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpICE9CiAJICAgIChjZmRfcngtJmd0O2Nhbl9pZCAmYW1wOyAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogTm90IGFmZmVjdGVkIGlmOgogCSAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZQogCSAqLwogCWlmIChjZmRfbm9taW5hbC0mZ3Q7bGVuICE9IGNmZF9yeC0mZ3Q7bGVuKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIHRoZSBkYXRhIG9mIG5vbiBSVFIgZnJhbWVzIGlzIGRpZmZlcmVudAogCSAqLwogCWlmICghKGNmZF9ub21pbmFsLSZndDtjYW5faWQgJmFtcDsgQ0FOX1JUUl9GTEFHKSAmYW1wOyZhbXA7CiAJICAgIG1lbWNtcChjZmRfbm9taW5hbC0mZ3Q7ZGF0YSwgY2ZkX3J4LSZndDtkYXRhLCBjZmRfbm9taW5hbC0mZ3Q7bGVuKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi8KIAl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmtjYW5mZF9zdGF0cy0mZ3Q7c3luY3ApOwpAQCAtMTg1LDYgJiM0MzsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAKIAlya2NhbmZkX3htaXRfcmV0cnkocHJpdik7CiAKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCmluZGV4IDEyMjAwZGNmZDMzODkuLmIzNjczNDFkZDBhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpCiAJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiAJaWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTMzLDEzICYjNDM7MzUsMjIgQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogCXJldHVybiBjZmQtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUc7CiB9CiAKLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQomIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgdHhfZnJlZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiAJaWYgKHByaXYtJmd0O2RldnR5cGVfZGF0YS5xdWlya3MgJmFtcDsgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82ICZhbXA7JmFtcDsKIAkgICAgcmtjYW5mZF90eF90YWlsX2lzX2VmZihwcml2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQl0eF9mcmVlID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJdHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7CiAKLQlyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHR4X2ZyZWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKQEAgLTU3LDggJiM0Mzs2OCwxMCBAQCBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAKIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwotCWNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTsKJiM0MzsJY29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpOwomIzQzOwljb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKIAogCXJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7CiB9CkBAIC02OSw2ICYjNDM7ODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJdTMyIHJlZ19mcmFtZWluZm8sIHJlZ19pZCwgcmVnX2NtZDsKIAl1bnNpZ25lZCBpbnQgdHhfaGVhZCwgZnJhbWVfbGVuOwogCWNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAJdTggaTsKIApAQCAtODgsNyAmIzQzOzEwMiwxOSBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQljZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLSZndDtkYXRhOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsJdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7CiYjNDM7CWZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpOwomIzQzOwllcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJCW5kZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBwcml2LSZndDtjYW4uZWNob19za2JbdHhfaGVhZF07CiYjNDM7CWNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItJmd0O2RhdGE7CiAKIAlpZiAoY2ZkLSZndDtjYW5faWQgJmFtcDsgQ0FOX0VGRl9GTEFHKSB7CiAJCXJlZ19mcmFtZWluZm8gPSBSS0NBTkZEX1JFR19GRF9GUkFNRUlORk9fRlJBTUVfRk9STUFUOwpAQCAtMTE0LDcgJiM0MzsxNDAsNiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCQkJCSAgICBjZmQtJmd0O2xlbik7CiAJfQogCi0JdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7CiAJcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7CiAKIAlya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTsKQEAgLTEyMywxNCAmIzQzOzE0OCwxMiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJrY2FuZmRfd3JpdGUocHJpdiwgUktDQU5GRF9SRUdfRkRfVFhEQVRBMCAmIzQzOyBpLAogCQkJICAgICAgKih1MzIgKikoY2ZkLSZndDtkYXRhICYjNDM7IGkpKTsKIAotCWZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpOwotCWVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pOwotCWlmICghZXJyKQotCQluZXRkZXZfc2VudF9xdWV1ZShwcml2LSZndDtuZGV2LCBmcmFtZV9sZW4pOwomIzQzOwluZXRkZXZfc2VudF9xdWV1ZShwcml2LSZndDtuZGV2LCBmcmFtZV9sZW4pOwogCiAJV1JJVEVfT05DRShwcml2LSZndDt0eF9oZWFkLCBwcml2LSZndDt0eF9oZWFkICYjNDM7IDEpOwogCiAJcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKIAogCW5ldGlmX3N1YnF1ZXVlX21heWJlX3N0b3AocHJpdi0mZ3Q7bmRldiwgMCwKIAkJCQkgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLApAQCAtMTQ3LDYgJiM0MzsxNzAsOCBAQCB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cywKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKJiM0MzsKIAl0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTsKIAlza2IgPSBwcml2LSZndDtjYW4uZWNob19za2JbdHhfdGFpbF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVzZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKQEAgLTQ3NCw2ICYjNDM7NDc1LDcgQEAgc3RydWN0IHJrY2FuZmRfcHJpdiB7CiAJc3RydWN0IGNhbl9yeF9vZmZsb2FkIG9mZmxvYWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAKJiM0MzsJc3BpbmxvY2tfdCB0eF9sb2NrOyAvKiBwcm90ZWN0cyB0eF9oZWFkLCB0eF90YWlsIGFuZCBlY2hvX3NrYiAqLwogCXZvaWQgX19pb21lbSAqcmVnczsKIAl1bnNpZ25lZCBpbnQgdHhfaGVhZDsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKQEAgLTU1Niw3ICYjNDM7NTU4LDcgQEAgdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdGFydChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcF9zeW5jKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogCi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiYjNDM7dW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYwppbmRleCBhZTkwZTY3MTZkZTViLi4yYmU4NTFlODkwN2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMKQEAgLTc4Nyw3ICYjNDM7Nzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlX2lycToKJiM0MzsJcHJpdi0mZ3Q7Zm9yY2VfcXVpdCA9IDE7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2hpMzExMF9sb2NrKTsKIAlmcmVlX2lycShzcGktJmd0O2lycSwgcHJpdik7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtoaTMxMTBfbG9jayk7CiAJaGkzMTEwX2h3X3NsZWVwKHNwaSk7CiAgb3V0X2Nsb3NlOgogCWhpMzExMF9wb3dlcl9lbmFibGUocHJpdi0mZ3Q7dHJhbnNjZWl2ZXIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMKaW5kZXggZjEyMzE4MjY4ZTQ2Yi4uNGMxNDdiOWQ2ZDY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jCkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0cnVjdCBmODE2MDRfaW50X2RhdGEgewogCXU4IHJ4ZXJyOwogCXU4IHR4ZXJyOwogCXU4IHZhbDsKLX0gX19wYWNrZWQgX19hbGlnbmVkKDQpOwomIzQzO30gX19wYWNrZWQ7CiAKIHN0cnVjdCBmODE2MDRfc2ZmIHsKIAlfX2JlMTYgaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYwppbmRleCBlZmJiN2JlZDM0YzlkLi5lZmU3YjNlZjQ4OWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMKQEAgLTUzNiw2ICYjNDM7NTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKiAtRUFHQUlOIG1lYW5zIGluY29tcGxldGU7IC1FSU5WQUwgcmVqZWN0cyB6ZXJvIHRvIGVuc3VyZSBwcm9ncmVzcy4gKi8KJiM0MztzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCwKJiM0MzsJCQkJCXNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbikKJiM0Mzt7CiYjNDM7CWlmIChyZW1haW5pbmcgJmx0OyBzaXplb2YoY21kLSZndDtoZWFkZXIuY21kX25vKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwlpZiAoY21kLSZndDtoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCAmYW1wOyZhbXA7CiYjNDM7CSAgICByZW1haW5pbmcgJmx0OyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CSpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpOwomIzQzOwlpZiAoISpjbWRfbGVuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqCiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IGt2YXNlcl9jbWQgKmNtZCkKQEAgLTY3NSw4ICYjNDM7NjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubywKIAkJCXNpemVfdCBjbWRfbGVuOwogCiAJCQl0bXBfY21kID0gYnVmICYjNDM7IHBvczsKLQkJCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpOwotCQkJaWYgKHBvcyAmIzQzOyBjbWRfbGVuICZndDsgYWN0dWFsX2xlbikgewomIzQzOwkJCWVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngodG1wX2NtZCwgYWN0dWFsX2xlbiAtIHBvcywgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCQlpZiAoZXJyIHx8IHBvcyAmIzQzOyBjbWRfbGVuICZndDsgYWN0dWFsX2xlbikgewogCQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwKIAkJCQkJCSAgICAmIzM0O0Zvcm1hdCBlcnJvclxuJiMzNDspOwogCQkJCWJyZWFrOwpAQCAtMjEyMCwyMyAmIzQzOzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldiwKIAlzcGluX2xvY2tfaXJxc2F2ZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKIAl1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuOwogCWlmICh1c2JfcnhfbGVmdG92ZXJfbGVuKSB7CiYjNDM7CQljb25zdCBzaXplX3QgY21kX3NpemVfZmllbGRfZW5kID0gb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KTsKIAkJaW50IHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCWludCBlcnI7CiAKIAkJY21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXI7CiAKLQkJY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTsKJiM0MzsJCWlmIChjbWQtJmd0O2hlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1c2JfcnhfbGVmdG92ZXJfbGVuICZsdDsgY21kX3NpemVfZmllbGRfZW5kKSB7CiYjNDM7CQkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QoaW50LCBsZW4sIGNtZF9zaXplX2ZpZWxkX2VuZCAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pOwomIzQzOwomIzQzOwkJCW1lbWNweShjYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7CiYjNDM7CQkJdXNiX3J4X2xlZnRvdmVyX2xlbiAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwomIzQzOwkJCWNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyX2xlbiA9IHVzYl9yeF9sZWZ0b3Zlcl9sZW47CiYjNDM7CQkJcG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7CiAKLQkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sCiYjNDM7CQkJaWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4gJmx0OyBjbWRfc2l6ZV9maWVsZF9lbmQpIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCB1c2JfcnhfbGVmdG92ZXJfbGVuLCAmYW1wO2NtZF9sZW4pOwomIzQzOwkJaWYgKGVyciB8fCBjbWRfbGVuICZsdDsgdXNiX3J4X2xlZnRvdmVyX2xlbikgewomIzQzOwkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4gLSBwb3MsCiAJCQkJCWNtZF9sZW4gLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTsKIAkJLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyZmxvdyB1c2JfcnhfbGVmdG92ZXIgKi8KIAkJaWYgKHJlbWFpbmluZ19ieXRlcyAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuICZndDsKIAkJCQkJCUtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHsKIAkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCW1lbWNweShjYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsCiYjNDM7CQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmICYjNDM7IHBvcywKIAkJICAgICAgIHJlbWFpbmluZ19ieXRlcyk7CiAJCXBvcyAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwogCkBAIC0yMTUyLDExICYjNDM7MjE5NCwxNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAKIAl3aGlsZSAocG9zICZsdDsgbGVuKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwogCQljbWQgPSBidWYgJiM0MzsgcG9zOwogCi0JCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7CiYjNDM7CQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgbGVuIC0gcG9zLCAmYW1wO2NtZF9sZW4pOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0O0Zvcm1hdCBlcnJvclxuJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAotCQlpZiAocG9zICYjNDM7IGNtZF9sZW4gJmd0OyBsZW4pIHsKJiM0MzsJCWlmIChlcnIgPT0gLUVBR0FJTiB8fCBwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGxlbikgewogCQkJLyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovCiAJCQlpbnQgbGVmdG92ZXJfYnl0ZXM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKaW5kZXggYTcwYTAyOTY3MDcxMS4uNzhjNTg3MGUyZjlhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKQEAgLTc2LDEyICYjNDM7NzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghbnNrYikpIHsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAljYW5fc2tiX3NldF9vd25lcihuc2tiLCBza2ItJmd0O3NrKTsKLQljb25zdW1lX3NrYihza2IpOwomIzQzOwlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIG5za2I7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjI2LDcgJiM0MzsyMjYsNyBAQCBpbnQgY2FuX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxvb3ApCiAJCWdvdG8gaW52YWxfc2tiOwogCX0KIAotCWlmICh1bmxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSkgewomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItJmd0O2RldikpKSB7CiAJCWVyciA9IC1FUEVSTTsKIAkJZ290byBpbnZhbF9za2I7CiAJfQpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBpbnQgY2FuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAKIAkvKiBpbnNlcnQgbmV3IHJlY2VpdmVyICAoZGV2LGNhbmlkLG1hc2spIC0mZ3Q7IChmdW5jLGRhdGEpICovCiAKLQlpZiAoZGV2ICZhbXA7JmFtcDsgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpCiYjNDM7CWlmIChkZXYgJmFtcDsmYW1wOyAhY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRldiAmYW1wOyZhbXA7ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKQpAQCAtNTE5LDcgJiM0Mzs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAJc3RydWN0IGNhbl9yY3ZfbGlzdHNfc3RhdHMgKnJjdl9saXN0c19zdGF0cyA9IG5ldC0mZ3Q7Y2FuLnJjdl9saXN0c19zdGF0czsKIAlzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7CiAKLQlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmIChkZXYgJmFtcDsmYW1wOyAhY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybjsKIAogCWlmIChkZXYgJmFtcDsmYW1wOyAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSkKQEAgLTY4Nyw3ICYjNDM7Njg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2Nhbl9za2Ioc2tiKSkpIHsKIAkJcHJfd2Fybl9vbmNlKCYjMzQ7UEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcbiYjMzQ7LAogCQkJICAgICBkZXYtJmd0O3R5cGUsIHNrYi0mZ3Q7bGVuKTsKQEAgLTcwMyw3ICYjNDM7NzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAodW5saWtlbHkoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiYjNDM7CWlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHwKIAkJICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuZmRfc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gRkQgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CkBAIC03MTksNyAmIzQzOzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAodW5saWtlbHkoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiYjNDM7CWlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHwKIAkJICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vYmNtLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9za2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vYmNtLmgmZ3Q7CkBAIC0xNzE5LDcgJiM0MzsxNzIwLDcgQEAgc3RhdGljIGludCBiY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCWdvdG8gb3V0X3JlbGVhc2U7CiAJCQl9CiAKLQkJCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJCWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJCQlkZXZfcHV0KGRldik7CiAJCQkJcmV0ID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dF9yZWxlYXNlOwpAQCAtMTg2Nyw3ICYjNDM7MTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCWlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgJmFtcDsmYW1wOyBtc2cgIT0gTkVUREVWX0RPV04pCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTIwMjQsNyAmIzQzOzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQkJZGV2X3B1dChkZXYpOwogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL25ldC9jYW4vZ3cuYyBiL25ldC9jYW4vZ3cuYwppbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2d3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9ndy5jCkBAIC01Miw2ICYjNDM7NTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jYW4vY2FuLW1sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vc2tiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2d3LmgmZ3Q7CkBAIC02MDksNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKG1zZyA9PSBORVRERVZfVU5SRUdJU1RFUikgewpAQCAtMTE2MCw3ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZ3dqLSZndDtzcmMuZGV2KQogCQlnb3RvIG91dDsKIAotCWlmIChnd2otJmd0O3NyYy5kZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLSZndDtzcmMuZGV2KSkKIAkJZ290byBvdXQ7CiAKIAlnd2otJmd0O2RzdC5kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBnd2otJmd0O2NjZ3cuZHN0X2lkeCk7CkBAIC0xMTY4LDcgJiM0MzsxMTY5LDcgQEAgc3RhdGljIGludCBjZ3dfY3JlYXRlX2pvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJaWYgKCFnd2otJmd0O2RzdC5kZXYpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGd3ai0mZ3Q7ZHN0LmRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otJmd0O2RzdC5kZXYpKQogCQlnb3RvIG91dDsKIAogCS8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovCmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmMKaW5kZXggMTU1NTMwYWVkY2UyZS4uNDU2MGQ1YTU2N2VjZiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtNjUsNiAmIzQzOzY1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL3NrYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9pc290cC5oJmd0OwpAQCAtMTYwNiw3ICYjNDM7MTYwNyw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsCiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wdXRfZGV2OwogCX0KQEAgLTE4OTMsNyAmIzQzOzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCWlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgJmFtcDsmYW1wOyBtc2cgIT0gTkVUREVWX0RPV04pCiAJCXJldHVybiBOT1RJRllfRE9ORTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IDgyZDljMDQ5OWM5NWYuLjhlMmUxMTRhYmNiOTkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9yYXcuYwpAQCAtMzQ0LDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW50IHJhd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC00ODcsNyAmIzQzOzQ4Nyw3IEBAIHN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbGVuCiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSB7CiYjNDM7CQlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXRfcHV0X2RldjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ0FOIFN1YnN5c3RlbSBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgQ0FOIHN1YnN5c3RlbS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGUgYnJlYWR0aCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UgaGF2ZSBjaGFuZ2VzIHRvdWNoaW5nIHZhcmlvdXMgbGV2ZWxzLCBmcm9tIGxvdy1sZXZlbCBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucyBhbGwgdGhlIHdheSB1cCB0byB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4KCjEuICAqKlNhZmV0eSBhbmQgQ29ycmVjdG5lc3M6KiogVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY2Agd2l0aCB0aGUgYGRpdjY0X3U2NGAsIGBtdWxfdTMyX3UzMmAsIGFuZCBgYWJzX2RpZmZgIHJlcGxhY2UgaXMgY3JpdGljYWwuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgMzItYml0IHdyYXAtYXJvdW5kIGlzc3Vlcywgd2hpY2ggYXJlIHN1YnRsZSBidXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IGJpdCB0aW1pbmcgY29uZmlndXJhdGlvbnMuIFNpbWlsYXJseSwgdGhlIHJlcGxhY2VtZW50IG9mIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBpbiBzZXZlcmFsIGZpbGVzLCBwYXJ0aWN1bGFybHkgYGRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNgIGFuZCBgaW5jbHVkZS9saW51eC9jYW4vc2tiLmhgLCBhbmQgYGNvbnN1bWVfc2tiYCB3aXRoIGBkZXZfY29uc3VtZV9za2JfYW55YCBpbiBpbmNsdWRlLCBpbmRpY2F0ZXMgYW4gZWZmb3J0IHRvIGltcHJvdmUgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgcHJldmVudCBtZW1vcnkgbGVha3MsIGVzcGVjaWFsbHkgb24gZXJyb3IgcGF0aHMuIFRoZSBsb2NraW5nIGNoYW5nZXMgdG8gYHJvY2tjaGlwX2NhbmZkYCBhbmQgdGhlIGFkZGl0aW9uIG9mIHNhZmV0eSBjaGVja3MgaW4gdGhlIGt2YXNlcl91c2IgZHJpdmVyIGFsc28gaW1wcm92ZSByb2J1c3RuZXNzLiBUaGUgY2hhbmdlIHRvIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBzdWdnZXN0cyBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4KCjIuICAqKlJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWw6KiogVGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBjb3JlIENBTiBuZXR3b3JraW5nIGNvZGUgKGBuZXQvY2FuL2ApIGFuZCB0aGUgVVNCIENBTiBkZXZpY2UgZHJpdmVycy4gVGhlIGNoYW5nZXMgdGhhdCB1c2UgYCFjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW4gbmV0L2NhbiBhZmZlY3QgdGhlIGNvcmUgQ0FOIG9wZXJhdGlvbiBhbmQgYXJlIG9mIGh1Z2UgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvY2FuL2FmX2Nhbi5jYCwgYG5ldC9jYW4vYmNtLmNgLCBgbmV0L2Nhbi9ndy5jYCwgYG5ldC9jYW4vaXNvdHAuY2AsIGFuZCBgbmV0L2Nhbi9yYXcuY2AsIHdoaWNoIGNvbnRyb2wgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIEZ1bmN0aW9ucyBsaWtlIGBjYW5fc2VuZGAsIGBjYW5fcmN2YCwgYGNhbmZkX3JjdmAsIGBjYW54bF9yY3ZgLCBgYmNtX3NlbmRtc2dgLCBgYmNtX2Nvbm5lY3RgLCBgY2d3X2NyZWF0ZV9qb2JgLCBgaXNvdHBfYmluZGAsIGFuZCBgcmF3X2JpbmRgIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhleSBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggQUZcX0NBTiBzb2NrZXRzLCBtYWtpbmcgdGhlbSBlYXN5IHRvIHRlc3QuCgogICAgVGhlIGNoYW5nZXMgaW4gYGt2YXNlcl91c2JfaHlkcmEuY2AsIHRob3VnaCBzcGVjaWZpYyB0byBLdmFzZXIgVVNCIGRldmljZXMsIGFyZSBhbHNvIHJlbGV2YW50LiBVU0IgQ0FOIGRldmljZXMgYXJlIGVtdWxhdGFibGUgdXNpbmcgdG9vbHMgbGlrZSBkdW1teVxfaGNkIG9yIHN5ei11c2IsIGVuYWJsaW5nIGZvY3VzZWQgZnV6emluZyBpbiB0aGlzIGFyZWEuIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AgaXMgYW4gb2J2aW91cyBzdGFydGluZyBwb2ludCBoZXJlLgoKMy4gICoqUHJpb3JpdGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb246KiogV2hpbGUgb3RoZXIgY2hhbmdlcyBpbiB0aGUgc2VyaWVzIG1pZ2h0IGludHJvZHVjZSBwb3RlbnRpYWwgYnVncywgdGhleSBhcmUgbGlrZWx5IGhhcmRlciB0byByZWFjaCBmcm9tIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlLiBUaGVyZWZvcmUsIHRoZSBjb3JlIENBTiBhbmQgVVNCIENBTiBhc3BlY3RzIHRha2UgcHJpb3JpdHkuCgogICAgVG8gZnV6eiBlZmZlY3RpdmVseSwgSSYjMzk7bGwgbmVlZCBhIGtlcm5lbCBjb25maWd1cmVkIHdpdGggYENBTmAsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGBDQU5fSVNPVFBgLCBgQ0FOX1JBV2AsIGFuZCBgQ0FOX0tWQVNFUl9VU0JgIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBBRlxfQ0FOIHNvY2tldCB0eXBlcyBhbmQgVVNCIENBTiBzdXBwb3J0LCBnaXZpbmcgbWUgdGhlIGJyb2FkZXN0IGNvdmVyYWdlIHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBzZXJpZXMgaGFzIHNldmVyYWwgY2hhbmdlcyB0aGF0IGFyZSBiZW5lZmljaWFsIHRvIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY29yZSBDQU4gbmV0d29ya2luZyBjb2RlIGFuZCBVU0IgQ0FOIGRyaXZlciBjb2RlIGR1ZSB0byB0aGVpciBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9MjI9aWYgQ0FOXG5uZXQvY2FuL0tjb25maWctMjMtXG5uZXQvY2FuL0tjb25maWc6MjQ6Y29uZmlnIENBTl9SQVdcbm5ldC9jYW4vS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1JhdyBDQU4gUHJvdG9jb2wgKHJhdyBhY2Nlc3Mgd2l0aCBDQU4tSUQgZmlsdGVyaW5nKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZy0zMy1cbm5ldC9jYW4vS2NvbmZpZzozNDpjb25maWcgQ0FOX0JDTVxubmV0L2Nhbi9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IE1hbmFnZXIgQ0FOIFByb3RvY29sICh3aXRoIGNvbnRlbnQgZmlsdGVyaW5nKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZy00NS1cbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXG5uZXQvY2FuL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXCYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnXCYjMzQ7XG5uZXQvY2FuL0tjb25maWctNTgtXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxubmV0L2Nhbi9LY29uZmlnLTYwLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ0FOIENvbmZpZ3VyYXRpb24gUG9zc2liaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQ0FOIGNvbmZpZ3VyYXRpb25zOiBgQ0FOX1JBV2AsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGFuZCBgQ0FOX0lTT1RQYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEkmIzM5O20gcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGVpciByb2xlcyBpbiByYXcgZnJhbWUgdHJhbnNtaXNzaW9uLCBicm9hZGNhc3QgY29tbXVuaWNhdGlvbiBtYW5hZ2VtZW50LCBnYXRld2F5IGZ1bmN0aW9uYWxpdHksIGFuZCBJU08tVFAgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseS4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIHdvcmsgaW5kaXZpZHVhbGx5IGFuZCBpbiBjb21iaW5hdGlvbiBmb3IgdmFyaW91cyBzZXR1cHMuCgpCdXQgc29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgQ0FOX0tWQVNFUl9VU0JgLiBLdmFzZXIgVVNCIGludGVyZmFjZXMgYXJlIHByZXR0eSB1YmlxdWl0b3VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgbm90ZXMgSSBzaG91bGQgYmUgYmVhcmluZyBpbiBtaW5kIGZvciBjb21wYXRpYmlsaXR5IG9yIG9wdGltaXphdGlvbi4gSSBzaG91bGQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZHJpdmVyIG9wdGlvbnMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBudWFuY2VzIG9mIGhvdyB0aGUgS3Zhc2VyIGludGVyZmFjZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRob3NlIG1vcmUgY29tbW9uIGNvbmZpZ3VyYXRpb25zIEkgbWVudGlvbmVkIGVhcmxpZXIuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgY29uZmlndXJlZCBvcHRpbWFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9LVkFTRVJfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZz01ND1jb25maWcgQ0FOX0dTX1VTQlxuLS1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02Ni1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2Nzpjb25maWcgQ0FOX0tWQVNFUl9VU0JcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBDQU4vVVNCIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmZpcm1pbmcgQ0FOIENvbmZpZ3VyYXRpb24gYW5kIExvb2tpbmcgZm9yIEZ1cnRoZXIgQWRqdXN0bWVudHMqKgoKQWxyaWdodCwgdGhhdCBmaXJzdCBjaGVjayBjb25maXJtcyBpdC4gTXkgaW5pdGlhbCBodW5jaCBhYm91dCB1c2luZyBgQ0FOX0tWQVNFUl9VU0JgIGZvciB0aGUgS3Zhc2VyIGludGVyZmFjZSBpcyBzcG90LW9uLiBOb3cgdGhhdCB0aGF0JiMzOTtzIHZhbGlkYXRlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGhlIENBTiBidXMgaXRzZWxmLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGludGVyZmFjZSB0eXBlIGFuZCBmb3JnZXR0aW5nIGFib3V0IHRoaW5ncyBsaWtlIGJhdWQgcmF0ZSwgYXJiaXRyYXRpb24gSURzLCBvciBhY2NlcHRhbmNlIGZpbHRlcnMuIFNvLCBsZXQmIzM5O3MgZXhwYW5kIHRoZSBzY29wZSBhIGxpdHRsZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgQ0FOIHNldHVwIGlzIGZ1bGx5IGRpYWxlZCBpbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvcnJlY3Qgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxubmV0L2Nhbi9LY29uZmlnLTIzLVxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXG5uZXQvY2FuL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctMzMtXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cbm5ldC9jYW4vS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctNDUtXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xubmV0L2Nhbi9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENBTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQ0FOIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ0FOYCwgYENBTl9SQVdgLCBgQ0FOX0JDTWAsIGBDQU5fR1dgLCBgQ0FOX0lTT1RQYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRm9yICYjMzQ7Y29yZSBDQU4sJiMzNDsgSSYjMzk7bSB0aGlua2luZzogYGNhbl9zZW5kYCwgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIHBvdGVudGlhbGx5IGBjYW54bF9yY3ZgLCBhcyB3ZWxsIGFzIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYW5kIGByYXdfYmluZGAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMgZm9yIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGNvbnRyb2wuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgVVNCIENBTiBzaWRlLCBhbmQgcmlnaHQgbm93IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgLgoKTm93LCBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgZm9yIG5hbWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp0aGVyZSogYW5kLCBjcml0aWNhbGx5LCBub3QgbWFnaWNhbGx5IG9wdGltaXplZCBhd2F5IGJ5IHRoZSBjb21waWxlciB0aHJvdWdoIGlubGluaW5nIG9yIHN0YXRpYyBkZWNsYXJhdGlvbiBpbiBhIHdheSB0aGF0IHdvdWxkIHByZXZlbnQgZnV6emluZyBmcm9tIGVmZmVjdGl2ZWx5IHJlYWNoaW5nIHRoZW0uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdXp6ZXIgY2FuIGFjdHVhbGx5ICpzZWUqIHRoZXNlIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZSBpbnB1dHMuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIGNhbl9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9hZl9jYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2FmX2Nhbi5jPTExND1zdGF0aWMgaW50IGNhbl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy0yMDEtICovXG5uZXQvY2FuL2FmX2Nhbi5jOjIwMjppbnQgY2FuX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxvb3ApXG5uZXQvY2FuL2FmX2Nhbi5jLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIEV4cG9ydGVkIEZ1bmN0aW9ucyoqCgpSaWdodCwgYGNhbl9zZW5kYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2hlbiBJIHNlZSB0aGF0IGEgZnVuY3Rpb24gaXMgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqaW50ZW5kZWQqIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb2R1bGUgb3IgbGlicmFyeS4gSXQmIzM5O3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW5kIGl0cyBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMgd2l0aCBhbiBleWUgZm9yIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgZm9yIGV4dGVybmFsIGNvbnN1bWVycy4gCgpTZWNvbmQsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgcHJvYmFibHkgYSBnYXRla2VlcGVyLCBhbiBvcmNoZXN0cmF0b3IsIG9yIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiB0b29sIHRoYXQgdGhlIHdpZGVyIHN5c3RlbSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBhbnkgY2hhbmdlcyBJIG1pZ2h0IG1ha2UuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBtb2R1bGUgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgY2FuX3NlbmRgLgoKRmluYWxseSwgaXQmIzM5O3MgYWJvdXQgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbi4gQW55IG1vZGlmaWNhdGlvbiB0byBgY2FuX3NlbmRgIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJyZWFrIGV4aXN0aW5nIGludGVncmF0aW9ucy4gU28sIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcywgYm90aCB3aXRoaW4gdGhlIGN1cnJlbnQgcHJvamVjdCBhbmQgYW55IGV4dGVybmFsIGNvZGUgdGhhdCBtaWdodCBiZSBjYWxsaW5nIGl0LCB0byBhc3Nlc3MgdGhlIHJpc2tzIGFuZCBwbGFuIGFjY29yZGluZ2x5LiBJdCBkaWN0YXRlcyB0aGUgbmVlZCB0byBoYXZlIGV4dHJlbWVseSByaWdvcm91cyB0ZXN0aW5nIGFuZCwgcG9zc2libHksIHZlcnNpb25pbmcgc3RyYXRlZ2llcyBpZiBjaGFuZ2VzIGFyZSB1bmF2b2lkYWJsZS4gVGhpcyBhbGwgYWZmZWN0cyBkZXNpZ24gY2hvaWNlcy4gVGhlIGZhY3QgdGhhdCB0aGUgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIGlzIGEgZmFjdCB0aGF0IEkgaW1tZWRpYXRlbHkgbmVlZCB0byBidWlsZCBvZmYgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBjYW5fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9hZl9jYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2FmX2Nhbi5jPTU3Mz1zdGF0aWMgaW5saW5lIHZvaWQgZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVjZWl2ZXIgKnJjdilcbi0tXG5uZXQvY2FuL2FmX2Nhbi5jLTU3OC1cbm5ldC9jYW4vYWZfY2FuLmM6NTc5OnN0YXRpYyBpbnQgY2FuX3Jjdl9maWx0ZXIoc3RydWN0IGNhbl9kZXZfcmN2X2xpc3RzICpkZXZfcmN2X2xpc3RzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2Nhbi9hZl9jYW4uYy01ODAte1xuLS1cbm5ldC9jYW4vYWZfY2FuLmM9NjU0PXN0YXRpYyB2b2lkIGNhbl9yZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy02ODYtXG5uZXQvY2FuL2FmX2Nhbi5jOjY4NzpzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jYW4vYWZfY2FuLmMtNjg4LVx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzExCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBpbiB0aGUgU3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBjYW5fcmN2YC4uLiBUaGF0JiMzOTtzIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBIbW0sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGVjaG5pY2FsbHkgaXQgKmlzKiBhbiBlbnRyeSBwb2ludCwganVzdCBub3QgaW4gdGhlIG1vc3QgY29udmVudGlvbmFsIHNlbnNlLiBXZSBjb3VsZCBpbmNsdWRlIGl0LCBidXQsIGZvciBjbGFyaXR5LCBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciB0byBmb2N1cyBvbiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIG9yLCBldmVuIG1vcmUgdXNlZnVsbHksIHRoZSBvbmVzIHRoYXQgYXJlIGFjdHVhbGx5IGludm9rZWQgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIHRoZSAqcmVhbCogc3RhcnRpbmcgcG9pbnRzIG9mIGludGVyYWN0aW9uLgoKTm93LCBsb29raW5nIGF0IHRoZSBsaXN0IG9mIHNvY2tldCBvcGVyYXRpb25zLi4uIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYHJhd19iaW5kYC4uLiBZZXAsIHRob3NlIGFyZSBhbGwgcmlnaHQgb24gdGhlIG1vbmV5LiBTb2NrZXQgb3BlcmF0aW9ucywgTmV0bGluayBvcGVyYXRpb25zIOKAkyB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBlbnRyeSBwb2ludHMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlLiBUaGV5IHByb3ZpZGUgdGhlIGdhdGV3YXkgZm9yIHVzZXItbGV2ZWwgYXBwbGljYXRpb25zIHRvIGludGVyZmFjZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIFdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2s7IHRob3NlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBiY21fc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vYmNtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9iY20uYz0xNjAzPXN0YXRpYyBpbnQgYmNtX3R4X3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgaWZpbmRleCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jYW4vYmNtLmMtMTY1MS0gKi9cbm5ldC9jYW4vYmNtLmM6MTY1MjpzdGF0aWMgaW50IGJjbV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvY2FuL2JjbS5jLTE2NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNQoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBiY21fc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGEgc29ja2V0IG9wZXJhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGltcGxpZXMgYSB0aWdodGx5IGJvdW5kIG9yIHNwZWNpYWxpemVkIGNvbW11bmljYXRpb24gcGF0aCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBwcm9iYWJseSBhIGhpZ2hseS1vcHRpbWl6ZWQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgYXBwcm9hY2guIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBHaXZlbiBpdHMgc3RhdGljIG5hdHVyZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbnN0cmFpbnRzIGluIGl0cyB1c2FnZSBvciBwb3RlbnRpYWwgY2hhbGxlbmdlcyBpbiBtb2RpZmljYXRpb24gaWYgaXQmIzM5O3MgZGVlcGx5IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUbyBnZXQgYSBoYW5kbGUgb24gaXQsIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGdpdmUgc29tZSBpbXBvcnRhbnQgY29udGV4dCBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBgYmNtX3NlbmRtc2dgLiBJdCYjMzk7cyBsaWtlbHkgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgZGF0YSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gdGhhdCBgYmNtX3NlbmRtc2dgIGlzIG1hbmlwdWxhdGluZywgcG90ZW50aWFsbHkgZGV0YWlsaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IHRoZSBVU0IgbGV2ZWwuIFRoaXMgY291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmF3IENBTiBvciBvdGhlciBpbmR1c3RyaWFsIHByb3RvY29scy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHJlYWQgYW5kIGhvdyB0aGF0IGRhdGEgZW5kcyB1cCBvbiB0aGUgc29ja2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZCkga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmM9MjEwNT1zdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfZmx1c2hfcXVldWUoc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYy0yMTI1LSAqL1xuZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYzoyMTI2OnN0YXRpYyB2b2lkIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jLTIxMjctXHRcdFx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMwoJCQkJCQkJb3V0cHV0OiAyNjkKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ0FOIE5ldHdvcmtpbmcgJmFtcDsgVVNCIFVSQiBDb21wbGV0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB3aGlsZSBpdCBzZWVtcyBzdGF0aWMgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGlzIGFjdHVhbGx5IGEgY2FsbGJhY2sgZm9yIFVTQiBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb21wbGV0aW9uLiBUaGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG15IFVTQiBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0JiMzOTtzIGEga2V5IHNwb3QgdG8gcHJvYmUgdGhlIENBTiBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgZnVuY3Rpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBSaWdodCwgSSBzZWU6IGBjYW5fc2VuZGAsIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYHJhd19iaW5kYCwgYW5kIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaGl0dGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgY2FuX3JjdmAgaXMgYWxzbyBzdGF0aWMuIFl1cCwgaXQgaXMuIEJ1dCwgaXMgdGhlcmUgYSBiZXR0ZXIgZW50cnkgcG9pbnQ/IEFoLCBgY2FuX3JlY2VpdmVgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBgY2FuX3JjdmAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgZGV2X2FkZF9wYWNrYC4uLiBUaGF0JiMzOTtzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUgaXQuIEkgc2hvdWxkIGFsc28gZ3JhYiBgY2FuX3JjdmAsIGBjYW5mZF9yY3ZgLCBhbmQgYGNhbnhsX3JjdmAgdG9vLgoKTm93LCB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCBoZXJlPyBMZXQmIzM5O3Mgc2VlOiBgQ0FOYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYENBTl9JU09UUGAsIGBDQU5fUkFXYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAuCgpUaGUgbG9naWMgYmVoaW5kIHRoaXMgc2VsZWN0aW9uIGlzIHRoYXQgdGhlIHBhdGNoIHNlcmllcyBJJiMzOTttIGV4YW1pbmluZyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyBmcm9tIGNoZWNraW5nIGBkZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0NBTmAgdG8gdXNpbmcgYGNhbl9nZXRfbWxfcHJpdihkZXYpYC4gVGhpcyBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgbGlrZSBSQVcsIEJDTSwgR1csIGFuZCBJU09UUC4gSXQgYWxzbyBpbmNsdWRlcyBhIGZpeCBmb3IgdGhlIEt2YXNlciBVU0IgZHJpdmVyOyB0aGUgYnVsayByZWFkIGNhbGxiYWNrIGhhZCBhIGJ1ZyByZWxhdGVkIHRvIHBhcnRpYWwgY29tbWFuZHMsIHRoYXQgY291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGFsbCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdmlhIENBTiBzb2NrZXRzIG9yIG5ldGxpbmssIGFuZCBhbHNvIHRocm91Z2ggVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBjbGVhcmx5IGhhcyBmdW5jdGlvbmFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fQkNNJiMzNDssCiAgICAmIzM0O0NBTl9HVyYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX1JBVyYjMzQ7LAogICAgJiMzNDtDQU5fS1ZBU0VSX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nhbl9zZW5kJiMzNDssCiAgICAmIzM0O2Nhbl9yY3YmIzM0OywKICAgICYjMzQ7Y2FuZmRfcmN2JiMzNDssCiAgICAmIzM0O2NhbnhsX3JjdiYjMzQ7LAogICAgJiMzNDtiY21fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtiY21fY29ubmVjdCYjMzQ7LAogICAgJiMzNDtjZ3dfY3JlYXRlX2pvYiYjMzQ7LAogICAgJiMzNDtpc290cF9iaW5kJiMzNDssCiAgICAmIzM0O3Jhd19iaW5kJiMzNDssCiAgICAmIzM0O2t2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU5gLCB3aGljaCBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgKFJBVywgQkNNLCBHVywgSVNPVFApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciYjMzk7cyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fQkNNJiMzNDssCiAgICAmIzM0O0NBTl9HVyYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX1JBVyYjMzQ7LAogICAgJiMzNDtDQU5fS1ZBU0VSX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nhbl9zZW5kJiMzNDssCiAgICAmIzM0O2Nhbl9yY3YmIzM0OywKICAgICYjMzQ7Y2FuZmRfcmN2JiMzNDssCiAgICAmIzM0O2NhbnhsX3JjdiYjMzQ7LAogICAgJiMzNDtiY21fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtiY21fY29ubmVjdCYjMzQ7LAogICAgJiMzNDtjZ3dfY3JlYXRlX2pvYiYjMzQ7LAogICAgJiMzNDtpc290cF9iaW5kJiMzNDssCiAgICAmIzM0O3Jhd19iaW5kJiMzNDssCiAgICAmIzM0O2t2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU5gLCB3aGljaCBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgKFJBVywgQkNNLCBHVywgSVNPVFApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciYjMzk7cyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWE1NzhkYjcwY2E1ZjE2NzE2ZGQ4Y2ZjMjg0NzEwNWJiNmI5NDFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTI6MjE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMKaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYwpAQCAtMTE5LDggJiM0MzsxMTksMTIgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsCiAJICAgICB0c2VnICZndDs9IChidGMtJmd0O3RzZWcxX21pbiAmIzQzOyBidGMtJmd0O3RzZWcyX21pbikgKiAyOyB0c2VnLS0pIHsKIAkJdHNlZ2FsbCA9IENBTl9TWU5DX1NFRyAmIzQzOyB0c2VnIC8gMjsKIAotCQkvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzEmIzQzO3RzZWcyKSAqLwotCQlicnAgPSBwcml2LSZndDtjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC0mZ3Q7Yml0cmF0ZSkgJiM0MzsgdHNlZyAlIDI7CiYjNDM7CQkvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzEmIzQzO3RzZWcyKS4KJiM0MzsJCSAqIEEgMzIgYml0IHRzZWdhbGwgKiBidC0mZ3Q7Yml0cmF0ZSBjYW4gd3JhcCB0byB6ZXJvIGZvciBsYXJnZQomIzQzOwkJICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC4KJiM0MzsJCSAqLwomIzQzOwkJYnJwID0gZGl2NjRfdTY0KHByaXYtJmd0O2Nsb2NrLmZyZXEsCiYjNDM7CQkJCW11bF91MzJfdTMyKHRzZWdhbGwsIGJ0LSZndDtiaXRyYXRlKSkgJiM0MzsgdHNlZyAlIDI7CiAKIAkJLyogY2hvb3NlIGJycCBzdGVwIHdoaWNoIGlzIHBvc3NpYmxlIGluIHN5c3RlbSAqLwogCQlicnAgPSAoYnJwIC8gYnRjLSZndDticnBfaW5jKSAqIGJ0Yy0mZ3Q7YnJwX2luYzsKQEAgLTEyOCw3ICYjNDM7MTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsCiAJCQljb250aW51ZTsKIAogCQliaXRyYXRlID0gcHJpdi0mZ3Q7Y2xvY2suZnJlcSAvIChicnAgKiB0c2VnYWxsKTsKLQkJYml0cmF0ZV9lcnJvciA9IGFicyhidC0mZ3Q7Yml0cmF0ZSAtIGJpdHJhdGUpOwomIzQzOwkJYml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LSZndDtiaXRyYXRlLCBiaXRyYXRlKTsKIAogCQkvKiB0c2VnIGJycCBiaXRlcnJvciAqLwogCQlpZiAoYml0cmF0ZV9lcnJvciAmZ3Q7IGJlc3RfYml0cmF0ZV9lcnJvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jCmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyICZsdDt3Z0BncmFuZGVnZ2VyLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2Nhbi5oJmd0OwpAQCAtNTQsNiAmIzQzOzU1LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoaWR4ICZndDs9IHByaXYtJmd0O2VjaG9fc2tiX21heCkgewogCQluZXRkZXZfZXJyKGRldiwgJiMzNDslczogQlVHISBUcnlpbmcgdG8gYWNjZXNzIGNhbl9wcml2OjplY2hvX3NrYiBvdXQgb2YgYm91bmRzICgldS9tYXggJXUpXG4mIzM0OywKIAkJCSAgIF9fZnVuY19fLCBpZHgsIHByaXYtJmd0O2VjaG9fc2tiX21heCk7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTYyLDcgJiM0Mzs2NCw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJICAgIChza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgJmFtcDsmYW1wOwogCSAgICAgc2tiLSZndDtwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5GRCkgJmFtcDsmYW1wOwogCSAgICAgc2tiLSZndDtwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5YTCkpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05MCw3ICYjNDM7OTIsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0gZWxzZSB7CiAJCS8qIGxvY2tpbmcgcHJvYmxlbSB3aXRoIG5ldGlmX3N0b3BfcXVldWUoKSA/PyAqLwogCQluZXRkZXZfZXJyKGRldiwgJiMzNDslczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcbiYjMzQ7LCBfX2Z1bmNfXywgaWR4KTsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMjIzLDcgJiM0MzsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX2NjOwogCX0KIApAQCAtMjU0LDcgJiM0MzsyNTYsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX2ZkOwogCX0KIApAQCAtMjkyLDcgJiM0MzsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX3hsOwogCX0KIApAQCAtMzg0LDcgJiM0MzszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWJyZWFrOwogCiAJY2FzZSBFVEhfUF9DQU5YTDoKLQkJaWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpCiYjNDM7CQlpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpCiAJCQlnb3RvIGludmFsX3NrYjsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKaW5kZXggZDhjOWJmYjIwMjMwNC4uYTA1OTdkYjcyMDg2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKQEAgLTE3MzksNiAmIzQzOzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSkKIAkJCWlvd3JpdGUzMigwLCBjYW4tJmd0O3JlZ19iYXNlICYjNDM7IEtWQVNFUl9QQ0lFRkRfS0NBTl9JRU5fUkVHKTsKIAkJCWt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTsKIAkJCWt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTsKJiM0MzsJCQl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7Y2FuLSZndDtiZWNfcG9sbF90aW1lcik7CiAJCQlmcmVlX2NhbmRldihjYW4tJmd0O2Nhbi5kZXYpOwogCQl9CiAJfQpAQCAtMTg3OSw3ICYjNDM7MTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtJmd0O2NhbltpXTsKIAogCQl1bnJlZ2lzdGVyX2NhbmRldihjYW4tJmd0O2Nhbi5kZXYpOwotCQl0aW1lcl9kZWxldGUoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKJiM0MzsJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKIAkJa3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pOwogCQlrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMKaW5kZXggMzdjMWMyMmM0MGM5Zi4uMWNhZTg2OTczZGE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jCkBAIC05MjEsNiAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXByaXYtJmd0O2Nhbi5kb19zZXRfbW9kZSA9IHJrY2FuZmRfc2V0X21vZGU7CiAJcHJpdi0mZ3Q7Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7CiAJcHJpdi0mZ3Q7bmRldiA9IG5kZXY7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiAKIAltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2Rldik7CiAJaWYgKG1hdGNoKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCkBAIC0xMDAsMTQgJiM0MzsxMDAsMjUgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCWNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7CiAJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCXR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpOwogCXNrYiA9IHByaXYtJmd0O2Nhbi5lY2hvX3NrYlt0eF90YWlsXTsKIAlpZiAoIXNrYikgewomIzQzOwkJY29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LSZndDt0eF9oZWFkOwomIzQzOwkJY29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWxfdW5tYXNrZWQgPSBwcml2LSZndDt0eF90YWlsOwomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKIAkJbmV0ZGV2X2Vycihwcml2LSZndDtuZGV2LAogCQkJICAgJiMzNDslczogZWNob19za2JbJXVdPU5VTEwgdHhfaGVhZD0weCUwOHggdHhfdGFpbD0weCUwOHhcbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIHR4X3RhaWwsCi0JCQkgICBwcml2LSZndDt0eF9oZWFkLCBwcml2LSZndDt0eF90YWlsKTsKJiM0MzsJCQkgICB0eF9oZWFkX3VubWFza2VkLCB0eF90YWlsX3VubWFza2VkKTsKIAogCQlyZXR1cm4gLUVOT01TRzsKIAl9CkBAIC0xMjMsMTcgJiM0MzsxMzQsMTggQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCQlya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShwcml2LCB0cywgJmFtcDtmcmFtZV9sZW4pOwogCiAJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7dHhfdGFpbCwgcHJpdi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKTsKJiM0MzsJCSp0eF9kb25lID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiAJCW5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtJmd0O25kZXYsIDAsIDEsIGZyYW1lX2xlbiwKIAkJCQkJICAgICAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksCiAJCQkJCSAgICAgIFJLQ0FORkRfVFhfU1RBUlRfVEhSRVNIT0xEKTsKIAotCQkqdHhfZG9uZSA9IHRydWU7Ci0KIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCEocHJpdi0mZ3Q7ZGV2dHlwZV9kYXRhLnF1aXJrcyAmYW1wOyBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy4KIAkgKgpAQCAtMTQzLDcgJiM0MzsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJICovCiAJaWYgKCEoY2ZkX25vbWluYWwtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUcpIHx8CiAJICAgIChjZmRfcngtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUcpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIHN0YW5kYXJkIHBhcnQgYW5kIFJUUiBmbGFnIG9mIHRoZSBUWCYjMzk7ZWQgZnJhbWUKQEAgLTE1MSwyMCAmIzQzOzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJICovCiAJaWYgKChjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSAhPQogCSAgICAoY2ZkX3J4LSZndDtjYW5faWQgJmFtcDsgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIGxlbmd0aCBpcyBub3QgdGhlIHNhbWUKIAkgKi8KIAlpZiAoY2ZkX25vbWluYWwtJmd0O2xlbiAhPSBjZmRfcngtJmd0O2xlbikKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBOb3QgYWZmZWN0ZWQgaWY6CiAJICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnQKIAkgKi8KIAlpZiAoIShjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9SVFJfRkxBRykgJmFtcDsmYW1wOwogCSAgICBtZW1jbXAoY2ZkX25vbWluYWwtJmd0O2RhdGEsIGNmZF9yeC0mZ3Q7ZGF0YSwgY2ZkX25vbWluYWwtJmd0O2xlbikpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogQWZmZWN0ZWQgYnkgRXJyYXR1bSA2ICovCiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3JrY2FuZmRfc3RhdHMtJmd0O3N5bmNwKTsKQEAgLTE4NSw2ICYjNDM7MTk3LDkgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCiAJcmtjYW5mZF94bWl0X3JldHJ5KHByaXYpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwppbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogCWNvbnN0IHN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3R4X2xvY2spOwomIzQzOwogCWlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0zMywxMyAmIzQzOzM1LDIyIEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKIAlyZXR1cm4gY2ZkLSZndDtjYW5faWQgJmFtcDsgQ0FOX0VGRl9GTEFHOwogfQogCi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKJiM0Mzt1bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgaW50IHR4X2ZyZWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCWlmIChwcml2LSZndDtkZXZ0eXBlX2RhdGEucXVpcmtzICZhbXA7IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNiAmYW1wOyZhbXA7CiAJICAgIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYocHJpdikpCi0JCXJldHVybiAwOwomIzQzOwkJdHhfZnJlZSA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXR4X2ZyZWUgPSBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpOwogCi0JcmV0dXJuIHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiB0eF9mcmVlOwogfQogCiBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCkBAIC01Nyw4ICYjNDM7NjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogewotCWNvbnN0IHVuc2lnbmVkIGludCB0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTsKLQljb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTsKJiM0MzsJY29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X3RhaWwpOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiAKIAlya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpOwogfQpAQCAtNjksNiAmIzQzOzgyLDcgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7CiAJdW5zaWduZWQgaW50IHR4X2hlYWQsIGZyYW1lX2xlbjsKIAljb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCXU4IGk7CiAKQEAgLTg4LDcgJiM0MzsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JY2ZkID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CXR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwomIzQzOwlmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTsKJiM0MzsJZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X2hlYWRdOwomIzQzOwljZmQgPSAoY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLSZndDtkYXRhOwogCiAJaWYgKGNmZC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykgewogCQlyZWdfZnJhbWVpbmZvID0gUktDQU5GRF9SRUdfRkRfRlJBTUVJTkZPX0ZSQU1FX0ZPUk1BVDsKQEAgLTExNCw3ICYjNDM7MTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJCQkgICAgY2ZkLSZndDtsZW4pOwogCX0KIAotCXR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwogCXJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpOwogCiAJcmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWEZSQU1FSU5GTywgcmVnX2ZyYW1laW5mbyk7CkBAIC0xMjMsMTQgJiM0MzsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgJiM0MzsgaSwKIAkJCSAgICAgICoodTMyICopKGNmZC0mZ3Q7ZGF0YSAmIzQzOyBpKSk7CiAKLQlmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTsKLQllcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTsKLQlpZiAoIWVycikKLQkJbmV0ZGV2X3NlbnRfcXVldWUocHJpdi0mZ3Q7bmRldiwgZnJhbWVfbGVuKTsKJiM0MzsJbmV0ZGV2X3NlbnRfcXVldWUocHJpdi0mZ3Q7bmRldiwgZnJhbWVfbGVuKTsKIAogCVdSSVRFX09OQ0UocHJpdi0mZ3Q7dHhfaGVhZCwgcHJpdi0mZ3Q7dHhfaGVhZCAmIzQzOyAxKTsKIAogCXJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiAKIAluZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtJmd0O25kZXYsIDAsCiAJCQkJICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSwKQEAgLTE0Nyw2ICYjNDM7MTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsCiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiAJdHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7CiAJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X3RhaWxdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCmluZGV4IDk1YmVhOWJmZDhhMmYuLjJkYzNhNDFhZmUzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZWNvdW50ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CkBAIC00NzQsNiAmIzQzOzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYgewogCXN0cnVjdCBjYW5fcnhfb2ZmbG9hZCBvZmZsb2FkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCiYjNDM7CXNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi8KIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJdW5zaWduZWQgaW50IHR4X2hlYWQ7CiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CkBAIC01NTYsNyAmIzQzOzU1OCw3IEBAIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RhcnQoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Aoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIAotdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwomIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMKaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jCkBAIC03ODcsNyAmIzQzOzc4NywxMCBAQCBzdGF0aWMgaW50IGhpMzExMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZV9pcnE6CiYjNDM7CXByaXYtJmd0O2ZvcmNlX3F1aXQgPSAxOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtoaTMxMTBfbG9jayk7CiAJZnJlZV9pcnEoc3BpLSZndDtpcnEsIHByaXYpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7aGkzMTEwX2xvY2spOwogCWhpMzExMF9od19zbGVlcChzcGkpOwogIG91dF9jbG9zZToKIAloaTMxMTBfcG93ZXJfZW5hYmxlKHByaXYtJmd0O3RyYW5zY2VpdmVyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jCmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYwpAQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHsKIAl1OCByeGVycjsKIAl1OCB0eGVycjsKIAl1OCB2YWw7Ci19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKJiM0Mzt9IF9fcGFja2VkOwogCiBzdHJ1Y3QgZjgxNjA0X3NmZiB7CiAJX19iZTE2IGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMKaW5kZXggZWZiYjdiZWQzNGM5ZC4uZWZlN2IzZWY0ODliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jCkBAIC01MzYsNiAmIzQzOzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovCiYjNDM7c3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHN0cnVjdCBrdmFzZXJfY21kICpjbWQsCiYjNDM7CQkJCQlzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pCiYjNDM7ewomIzQzOwlpZiAocmVtYWluaW5nICZsdDsgc2l6ZW9mKGNtZC0mZ3Q7aGVhZGVyLmNtZF9ubykpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKJiM0MzsJaWYgKGNtZC0mZ3Q7aGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgJmFtcDsmYW1wOwomIzQzOwkgICAgcmVtYWluaW5nICZsdDsgb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwkqY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTsKJiM0MzsJaWYgKCEqY21kX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKgoga3Zhc2VyX3VzYl9oeWRyYV9uZXRfcHJpdl9mcm9tX2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBrdmFzZXJfY21kICpjbWQpCkBAIC02NzUsOCAmIzQzOzY5Myw4IEBAIHN0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV93YWl0X2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LCB1OCBjbWRfbm8sCiAJCQlzaXplX3QgY21kX2xlbjsKIAogCQkJdG1wX2NtZCA9IGJ1ZiAmIzQzOyBwb3M7Ci0JCQljbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZSh0bXBfY21kKTsKLQkJCWlmIChwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGFjdHVhbF9sZW4pIHsKJiM0MzsJCQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHRtcF9jbWQsIGFjdHVhbF9sZW4gLSBwb3MsICZhbXA7Y21kX2xlbik7CiYjNDM7CQkJaWYgKGVyciB8fCBwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGFjdHVhbF9sZW4pIHsKIAkJCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsCiAJCQkJCQkgICAgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKIAkJCQlicmVhazsKQEAgLTIxMjAsMjMgJiM0MzsyMTM4LDQ3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsCiAJc3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAJdXNiX3J4X2xlZnRvdmVyX2xlbiA9IGNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyX2xlbjsKIAlpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikgewomIzQzOwkJY29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7CiAJCWludCByZW1haW5pbmdfYnl0ZXM7CiYjNDM7CQlpbnQgZXJyOwogCiAJCWNtZCA9IChzdHJ1Y3Qga3Zhc2VyX2NtZCAqKWNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyOwogCi0JCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7CiYjNDM7CQlpZiAoY21kLSZndDtoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdXNiX3J4X2xlZnRvdmVyX2xlbiAmbHQ7IGNtZF9zaXplX2ZpZWxkX2VuZCkgewomIzQzOwkJCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KGludCwgbGVuLCBjbWRfc2l6ZV9maWVsZF9lbmQgLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTsKJiM0MzsKJiM0MzsJCQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLCByZW1haW5pbmdfYnl0ZXMpOwomIzQzOwkJCXVzYl9yeF9sZWZ0b3Zlcl9sZW4gJiM0Mzs9IHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuOwomIzQzOwkJCXBvcyAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwogCi0JCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLAomIzQzOwkJCWlmICh1c2JfcnhfbGVmdG92ZXJfbGVuICZsdDsgY21kX3NpemVfZmllbGRfZW5kKSB7CiYjNDM7CQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCWlmIChlcnIgfHwgY21kX2xlbiAmbHQ7IHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsICYjMzQ7Rm9ybWF0IGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLAogCQkJCQljbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7CiAJCS8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovCiAJCWlmIChyZW1haW5pbmdfYnl0ZXMgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiAmZ3Q7CiAJCQkJCQlLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7CiAJCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsICYjMzQ7Rm9ybWF0IGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLAomIzQzOwkJbWVtY3B5KGNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyICYjNDM7IHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiAmIzQzOyBwb3MsCiAJCSAgICAgICByZW1haW5pbmdfYnl0ZXMpOwogCQlwb3MgJiM0Mzs9IHJlbWFpbmluZ19ieXRlczsKIApAQCAtMjE1MiwxMSAmIzQzOzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldiwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpOwogCiAJd2hpbGUgKHBvcyAmbHQ7IGxlbikgewomIzQzOwkJaW50IGVycjsKJiM0MzsKIAkJY21kID0gYnVmICYjNDM7IHBvczsKIAotCQljbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpOwomIzQzOwkJZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIGxlbiAtIHBvcywgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVBR0FJTikgewomIzQzOwkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiAKLQkJaWYgKHBvcyAmIzQzOyBjbWRfbGVuICZndDsgbGVuKSB7CiYjNDM7CQlpZiAoZXJyID09IC1FQUdBSU4gfHwgcG9zICYjNDM7IGNtZF9sZW4gJmd0OyBsZW4pIHsKIAkJCS8qIFdlIGdvdCBmaXJzdCBwYXJ0IG9mIGEgY29tbWFuZCAqLwogCQkJaW50IGxlZnRvdmVyX2J5dGVzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaCBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCmluZGV4IGE3MGEwMjk2NzA3MTEuLjc4YzU4NzBlMmY5YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCkBAIC03NiwxMiAmIzQzOzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIW5za2IpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLSZndDtzayk7Ci0JY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwogCXJldHVybiBuc2tiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA3YmM4NmIxNzZiNGRlLi5lZjQzNWYyMmFjOTMzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTIyNiw3ICYjNDM7MjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKQogCQlnb3RvIGludmFsX3NrYjsKIAl9CiAKLQlpZiAodW5saWtlbHkoc2tiLSZndDtkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoc2tiLSZndDtkZXYpKSkgewogCQllcnIgPSAtRVBFUk07CiAJCWdvdG8gaW52YWxfc2tiOwogCX0KQEAgLTQ1Miw3ICYjNDM7NDUyLDcgQEAgaW50IGNhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLAogCiAJLyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtJmd0OyAoZnVuYyxkYXRhKSAqLwogCi0JaWYgKGRldiAmYW1wOyZhbXA7IChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikpKQomIzQzOwlpZiAoZGV2ICZhbXA7JmFtcDsgIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChkZXYgJmFtcDsmYW1wOyAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSkKQEAgLTUxOSw3ICYjNDM7NTE5LDcgQEAgdm9pZCBjYW5fcnhfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLAogCXN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtJmd0O2Nhbi5yY3ZfbGlzdHNfc3RhdHM7CiAJc3RydWN0IGNhbl9kZXZfcmN2X2xpc3RzICpkZXZfcmN2X2xpc3RzOwogCi0JaWYgKGRldiAmYW1wOyZhbXA7IGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoZGV2ICZhbXA7JmFtcDsgIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAoZGV2ICZhbXA7JmFtcDsgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpCkBAIC02ODcsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGNhbl9yZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCWlmICh1bmxpa2VseShkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHwKJiM0MzsJaWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAogCQkgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbmZkX3NrYihza2IpKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxuJiMzNDssCiAJCQkgICAgIGRldi0mZ3Q7dHlwZSwgc2tiLSZndDtsZW4pOwpAQCAtNzE5LDcgJiM0Mzs3MTksNyBAQCBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbnhsX3NrYihza2IpKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIFhMIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxuJiMzNDssCiAJCQkgICAgIGRldi0mZ3Q7dHlwZSwgc2tiLSZndDtsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggM2Q2MzdhMWUwYWMxYS4uNjA0MDY0MzlhMTNmNyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2JjbS5jCkBAIC01NCw2ICYjNDM7NTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jYW4vY2FuLW1sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vc2tiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2JjbS5oJmd0OwpAQCAtMTcxOSw3ICYjNDM7MTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCQlnb3RvIG91dF9yZWxlYXNlOwogCQkJfQogCi0JCQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJCQlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7CiAJCQkJZGV2X3B1dChkZXYpOwogCQkJCXJldCA9IC1FTk9ERVY7CiAJCQkJZ290byBvdXRfcmVsZWFzZTsKQEAgLTE4NjcsNyAmIzQzOzE4NjgsNyBAQCBzdGF0aWMgaW50IGJjbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC0yMDI0LDcgJiM0MzsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludAogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZmFpbDsKIAkJfQotCQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJCWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJCWRldl9wdXQoZGV2KTsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2d3LmMgYi9uZXQvY2FuL2d3LmMKaW5kZXggMGVjOTlmNjhhYTQ1Mi4uZDk5MTJkZWE3MzhiYSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9ndy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vZ3cuYwpAQCAtNTIsNiAmIzQzOzUyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL3NrYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9ndy5oJmd0OwpAQCAtNjA5LDcgJiM0Mzs2MTAsNyBAQCBzdGF0aWMgaW50IGNnd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChtc2cgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKQEAgLTExNjAsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlpZiAoIWd3ai0mZ3Q7c3JjLmRldikKIAkJZ290byBvdXQ7CiAKLQlpZiAoZ3dqLSZndDtzcmMuZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGd3ai0mZ3Q7c3JjLmRldikpCiAJCWdvdG8gb3V0OwogCiAJZ3dqLSZndDtkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLSZndDtjY2d3LmRzdF9pZHgpOwpAQCAtMTE2OCw3ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZ3dqLSZndDtkc3QuZGV2KQogCQlnb3RvIG91dDsKIAotCWlmIChnd2otJmd0O2RzdC5kZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLSZndDtkc3QuZGV2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiBpcyBzZW5kaW5nIHRoZSBza2IgYmFjayB0byB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIGludGVuZGVkPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vaXNvdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmMKQEAgLTY1LDYgJiM0Mzs2NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9za2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vaXNvdHAuaCZndDsKQEAgLTE2MDYsNyAmIzQzOzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbAogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSB7CiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcHV0X2RldjsKIAl9CkBAIC0xODkzLDcgJiM0MzsxODk0LDcgQEAgc3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vcmF3LmMKQEAgLTM0NCw3ICYjNDM7MzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOwogCi0JaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJaWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiAmYW1wOyZhbXA7IG1zZyAhPSBORVRERVZfRE9XTikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNDg3LDcgJiM0Mzs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlbgogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0X3B1dF9kZXY7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDEwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ0FOIFN1YnN5c3RlbSBQYXRjaCBTZXJpZXMgUmV2aWV3OiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgQ0FOIHN1YnN5c3RlbSBwYXRjaCBzZXJpZXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhbmFseXNpcy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGNoYW5nZWQgZmlsZXMgY2FyZWZ1bGx5LgoKRmlyc3QgdXAsIGBjYWxjX2JpdHRpbWluZy5jYCB1c2VzIGBkaXY2NF91NjRgIGFuZCBgbXVsX3UzMl91MzJgIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvd3MgYW5kIHRoZSBgYWJzX2RpZmZgIG1hY3JvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyB0aGVyZTsgdGhpcyBpcyBnb29kLCBzb2xpZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGVuLCBgc2tiLmNgIHN3aXRjaGVzIHRvIGBkZXZfa2ZyZWVfc2tiX2FueWAgYW5kIGFkZHMgYSBjaGVjayBmb3IgQ0FOX0NBUF9YTC4gU291bmRzIGxpa2UgYSBzdGFuZGFyZCBTS0IgY2xlYW51cC9zYWZldHkgaW1wcm92ZW1lbnQsIG5vdCBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIHJlYWRzLgoKYGt2YXNlcl9wY2llZmRfY29yZS5jYCByZXBsYWNlcyBgdGltZXJfZGVsZXRlYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jYC4gRmluZS4gTm8gcHJvYmxlbS4KCkluIHRoZSBgcm9ja2NoaXBfY2FuZmRgIGZpbGVzLCB3ZSBzZWUgYHNwaW5fbG9ja19pbml0YCBhbmQgcHJvdGVjdGVkIGFjY2Vzc2VzIGZvciB0aGUgVFggcGF0aC4gVGhpcyBpcyBhbGwgYWJvdXQgdGhyZWFkIHNhZmV0eSwgYnV0IHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpgaGkzMTF4LmNgIGFkZHMgYSBgZm9yY2VfcXVpdGAgZmxhZyBhbmQgbXV0ZXggcHJvdGVjdGlvbiBhcm91bmQgYGZyZWVfaXJxYC4gQWdhaW4sIHRoaXMgbG9va3MgbGlrZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYW5kIGxvY2tpbmcsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLgoKVGhlIHJlbW92YWwgb2YgYF9fYWxpZ25lZCg0KWAgZnJvbSBgZjgxNjA0LmNgJiMzOTtzIGBpbnRfZGF0YWAgc3RydWN0dXJlIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSByZW1vdmluZyBhbGlnbm1lbnQsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdmFyaWFibGVzIG9yIHN0cnVjdHMuCgpOb3csIHRoZSBga3Zhc2VyX3VzYl9oeWRyYS5jYCBjaGFuZ2VzIGFyZSBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHRoZSBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgIGZ1bmN0aW9uLiBJIGhhZCBhIGRlZXBlciBsb29rLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGNoYW5nZXMgdG8gaG93IGl0IGhhbmRsZXMgY29tbWFuZCBmcmFnbWVudGF0aW9uLiBJdCBhZGRzIHNpemUgY2hlY2tzLCBjb3BpZXMgZGF0YSBpbnRvIGB1c2JfcnhfbGVmdG92ZXJgLCBhbmQgdmVyaWZpZXMgdGhhdCBpdCBkb2VzbiYjMzk7dCByZWFkIG91dCBvZiBib3VuZHMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uICpyZWNlaXZlcyogZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlLiBUaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaXRzZWxmLCBvciBpcyB0aGUgZGV2aWNlJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBhbmQgaXMgYmVpbmcgd3JpdHRlbiBpbnRvIHRoZSBidWZmZXIuIElmIHRoZSBkZXZpY2UgZG9lc24mIzM5O3QgcHJvdmlkZSBlbm91Z2ggZGF0YSwgd2Ugbm93IGdldCBgLUVBR0FJTmAgaW5zdGVhZCBvZiBwb3RlbnRpYWxseSByZWFkaW5nIGdhcmJhZ2UuIFRoaXMgaXMgZ29vZDogdGhlIGRhdGEgY29tZXMgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UsIHdoaWNoIG1ha2VzIGl0IHNhZmUuCgpUaGUgY2hhbmdlcyBpbiBgc2tiLmhgIGFyZSBqdXN0IG1vcmUgU0tCIG1hbmFnZW1lbnQgdXBkYXRlcyAodXNpbmcgYGRldl9rZnJlZV9za2JfYW55YCBhbmQgYGRldl9jb25zdW1lX3NrYl9hbnlgKSwgc2FmZS4KCkZpbmFsbHksIHRoZSBgYWZfY2FuLmNgLCBgYmNtLmNgLCBgZ3cuY2AsIGBpc290cC5jYCwgYW5kIGByYXcuY2AgdXBkYXRlcyB1c2luZyBgIWNhbl9nZXRfbWxfcHJpdihkZXYpYCBkb24mIzM5O3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpTbywgb3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGxvY2tpbmcgZml4ZXMsIGJvdW5kcyBjaGVja3MsIDMyLWJpdCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhIHRpbWVyIHNodXRkb3duLCBhbmQgaW1wcm92ZWQgVVNCIGNvbW1hbmQgaGFuZGxpbmcuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIFVTQiBjaGFuZ2VzIGNhcmVmdWxseSBoYW5kbGUgdGhlIGRhdGEgY29taW5nICpmcm9tKiB0aGUgZGV2aWNlLiBUaGUgQ0FOIGNoYW5nZXMgZGVhbCB3aXRoIHRoZSB2ZXJ5IG1hdHVyZSBTS0IgbWFuYWdlbWVudCBhbmQgY29ycmVjdCBsb2NraW5nL3N5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgZmluZS4KClRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzIHRoYXQgbWlnaHQgY3JvcCB1cC4gVGhpcyBpcyBhIHNvbGlkIHBhdGNoIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyMjowMS40NzA1MDkxNDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAyOTQxNDg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fQkNNXCIsXG4gICAgXCJDQU5fR1dcIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX1JBV1wiLFxuICAgIFwiQ0FOX0tWQVNFUl9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYW5fc2VuZFwiLFxuICAgIFwiY2FuX3JjdlwiLFxuICAgIFwiY2FuZmRfcmN2XCIsXG4gICAgXCJjYW54bF9yY3ZcIixcbiAgICBcImJjbV9zZW5kbXNnXCIsXG4gICAgXCJiY21fY29ubmVjdFwiLFxuICAgIFwiY2d3X2NyZWF0ZV9qb2JcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcInJhd19iaW5kXCIsXG4gICAgXCJrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCwgd2hpY2ggYWZmZWN0cyBob3cgQ0FOIGRldmljZXMgYXJlIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCBhY3Jvc3MgdmFyaW91cyBDQU4gcHJvdG9jb2xzIChSQVcsIEJDTSwgR1csIElTT1RQKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIncyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjIyOjAxLjQ3MDUxNjIxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDQzMjYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTI6MjE6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXFxuaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcXG5AQCAtMTE5LDggKzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCxcXG4gXFx0ICAgICB0c2VnIFxcdTAwM2U9IChidGMtXFx1MDAzZXRzZWcxX21pbiArIGJ0Yy1cXHUwMDNldHNlZzJfbWluKSAqIDI7IHRzZWctLSkge1xcbiBcXHRcXHR0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICsgdHNlZyAvIDI7XFxuIFxcbi1cXHRcXHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpICovXFxuLVxcdFxcdGJycCA9IHByaXYtXFx1MDAzZWNsb2NrLmZyZXEgLyAodHNlZ2FsbCAqIGJ0LVxcdTAwM2ViaXRyYXRlKSArIHRzZWcgJSAyO1xcbitcXHRcXHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpLlxcbitcXHRcXHQgKiBBIDMyIGJpdCB0c2VnYWxsICogYnQtXFx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcXG4rXFx0XFx0ICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJycCA9IGRpdjY0X3U2NChwcml2LVxcdTAwM2VjbG9jay5mcmVxLFxcbitcXHRcXHRcXHRcXHRtdWxfdTMyX3UzMih0c2VnYWxsLCBidC1cXHUwMDNlYml0cmF0ZSkpICsgdHNlZyAlIDI7XFxuIFxcbiBcXHRcXHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXFxuIFxcdFxcdGJycCA9IChicnAgLyBidGMtXFx1MDAzZWJycF9pbmMpICogYnRjLVxcdTAwM2VicnBfaW5jO1xcbkBAIC0xMjgsNyArMTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0Yml0cmF0ZSA9IHByaXYtXFx1MDAzZWNsb2NrLmZyZXEgLyAoYnJwICogdHNlZ2FsbCk7XFxuLVxcdFxcdGJpdHJhdGVfZXJyb3IgPSBhYnMoYnQtXFx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcXG4rXFx0XFx0Yml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LVxcdTAwM2ViaXRyYXRlLCBiaXRyYXRlKTtcXG4gXFxuIFxcdFxcdC8qIHRzZWcgYnJwIGJpdGVycm9yICovXFxuIFxcdFxcdGlmIChiaXRyYXRlX2Vycm9yIFxcdTAwM2UgYmVzdF9iaXRyYXRlX2Vycm9yKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xcbmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciBcXHUwMDNjd2dAZ3JhbmRlZ2dlci5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2Nhbi5oXFx1MDAzZVxcbkBAIC01NCw2ICs1NSw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChpZHggXFx1MDAzZT0gcHJpdi1cXHUwMDNlZWNob19za2JfbWF4KSB7XFxuIFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiJXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgX19mdW5jX18sIGlkeCwgcHJpdi1cXHUwMDNlZWNob19za2JfbWF4KTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTYyLDcgKzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0ICAgIChza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICBza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOWEwpKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTkwLDcgKzkyLDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovXFxuIFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiJXM6IEJVRyEgZWNob19za2IgJWQgaXMgb2NjdXBpZWQhXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KTtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMyw3ICsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXFxuIFxcbiBcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG4gXFx0aWYgKCFjc3gpIHtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yX2NjO1xcbiBcXHR9XFxuIFxcbkBAIC0yNTQsNyArMjU2LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuIFxcdGlmICghY3N4KSB7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnJvcl9mZDtcXG4gXFx0fVxcbiBcXG5AQCAtMjkyLDcgKzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbiBcXHRpZiAoIWNzeCkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0Z290byBvdXRfZXJyb3JfeGw7XFxuIFxcdH1cXG4gXFxuQEAgLTM4NCw3ICszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBFVEhfUF9DQU5YTDpcXG4tXFx0XFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXFxuK1xcdFxcdGlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSlcXG4gXFx0XFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xcbkBAIC0xNzM5LDYgKzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSlcXG4gXFx0XFx0XFx0aW93cml0ZTMyKDAsIGNhbi1cXHUwMDNlcmVnX2Jhc2UgKyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XFxuIFxcdFxcdFxcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcXG4gXFx0XFx0XFx0a3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pO1xcbitcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZjYW4tXFx1MDAzZWJlY19wb2xsX3RpbWVyKTtcXG4gXFx0XFx0XFx0ZnJlZV9jYW5kZXYoY2FuLVxcdTAwM2VjYW4uZGV2KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE4NzksNyArMTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtXFx1MDAzZWNhbltpXTtcXG4gXFxuIFxcdFxcdHVucmVnaXN0ZXJfY2FuZGV2KGNhbi1cXHUwMDNlY2FuLmRldik7XFxuLVxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2Y2FuLVxcdTAwM2ViZWNfcG9sbF90aW1lcik7XFxuK1xcdFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNmNhbi1cXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xcbiBcXHRcXHRrdmFzZXJfcGNpZWZkX3B3bV9zdG9wKGNhbik7XFxuIFxcdFxcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcXG5AQCAtOTIxLDYgKzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwcml2LVxcdTAwM2VjYW4uZG9fc2V0X21vZGUgPSBya2NhbmZkX3NldF9tb2RlO1xcbiBcXHRwcml2LVxcdTAwM2VjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjtcXG4gXFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4gXFxuIFxcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAobWF0Y2gpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xcbmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xcbkBAIC0xMDAsMTQgKzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XFxuIFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSlcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0dHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7XFxuIFxcdHNrYiA9IHByaXYtXFx1MDAzZWNhbi5lY2hvX3NrYlt0eF90YWlsXTtcXG4gXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVxcdTAwM2V0eF9oZWFkO1xcbitcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtXFx1MDAzZXR4X3RhaWw7XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHRcXHRuZXRkZXZfZXJyKHByaXYtXFx1MDAzZW5kZXYsXFxuIFxcdFxcdFxcdCAgIFxcXCIlczogZWNob19za2JbJXVdPU5VTEwgdHhfaGVhZD0weCUwOHggdHhfdGFpbD0weCUwOHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxcbi1cXHRcXHRcXHQgICBwcml2LVxcdTAwM2V0eF9oZWFkLCBwcml2LVxcdTAwM2V0eF90YWlsKTtcXG4rXFx0XFx0XFx0ICAgdHhfaGVhZF91bm1hc2tlZCwgdHhfdGFpbF91bm1hc2tlZCk7XFxuIFxcbiBcXHRcXHRyZXR1cm4gLUVOT01TRztcXG4gXFx0fVxcbkBAIC0xMjMsMTcgKzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdFxcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcXHUwMDI2ZnJhbWVfbGVuKTtcXG4gXFxuIFxcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNldHhfdGFpbCwgcHJpdi1cXHUwMDNldHhfdGFpbCArIDEpO1xcbitcXHRcXHQqdHhfZG9uZSA9IHRydWU7XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuIFxcdFxcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXFx1MDAzZW5kZXYsIDAsIDEsIGZyYW1lX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJLQ0FORkRfVFhfU1RBUlRfVEhSRVNIT0xEKTtcXG4gXFxuLVxcdFxcdCp0eF9kb25lID0gdHJ1ZTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFxcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy5cXG4gXFx0ICpcXG5AQCAtMTQzLDcgKzE1NSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcXG4gXFx0ICovXFxuIFxcdGlmICghKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHx8XFxuIFxcdCAgICAoY2ZkX3J4LVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LyogTm90IGFmZmVjdGVkIGlmOlxcbiBcXHQgKiAtIHN0YW5kYXJkIHBhcnQgYW5kIFJUUiBmbGFnIG9mIHRoZSBUWCdlZCBmcmFtZVxcbkBAIC0xNTEsMjAgKzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdCAqL1xcbiBcXHRpZiAoKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cXG4gXFx0ICAgIChjZmRfcngtXFx1MDAzZWNhbl9pZCBcXHUwMDI2IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIE5vdCBhZmZlY3RlZCBpZjpcXG4gXFx0ICogLSBsZW5ndGggaXMgbm90IHRoZSBzYW1lXFxuIFxcdCAqL1xcbiBcXHRpZiAoY2ZkX25vbWluYWwtXFx1MDAzZWxlbiAhPSBjZmRfcngtXFx1MDAzZWxlbilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIE5vdCBhZmZlY3RlZCBpZjpcXG4gXFx0ICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnRcXG4gXFx0ICovXFxuIFxcdGlmICghKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fUlRSX0ZMQUcpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBtZW1jbXAoY2ZkX25vbWluYWwtXFx1MDAzZWRhdGEsIGNmZF9yeC1cXHUwMDNlZGF0YSwgY2ZkX25vbWluYWwtXFx1MDAzZWxlbikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cXG4gXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmtjYW5mZF9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbkBAIC0xODUsNiArMTk3LDkgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxcbiBcXG4gXFx0cmtjYW5mZF94bWl0X3JldHJ5KHByaXYpO1xcbiBcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcXG5pbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcXG5AQCAtMTQsNiArMTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuIFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jayk7XFxuK1xcbiBcXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTMzLDEzICszNSwyMiBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiBjZmQtXFx1MDAzZWNhbl9pZCBcXHUwMDI2IENBTl9FRkZfRkxBRztcXG4gfVxcbiBcXG4tdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuK3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuIFxcdGlmIChwcml2LVxcdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFxcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82IFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKHByaXYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dHhfZnJlZSA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XFxuIFxcbi1cXHRyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHR4X2ZyZWU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcXG5AQCAtNTcsOCArNjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxcbiBcXG4gdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XFxuLVxcdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xcbitcXHRjb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4gXFxuIFxcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XFxuIH1cXG5AQCAtNjksNiArODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0eF9oZWFkLCBmcmFtZV9sZW47XFxuIFxcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpO1xcbiBcXG5AQCAtODgsNyArMTAyLDE5IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbi1cXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcXG4rXFx0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XFxuK1xcdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbitcXG4rXFx0c2tiID0gcHJpdi1cXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xcbitcXHRjZmQgPSAoY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0aWYgKGNmZC1cXHUwMDNlY2FuX2lkIFxcdTAwMjYgQ0FOX0VGRl9GTEFHKSB7XFxuIFxcdFxcdHJlZ19mcmFtZWluZm8gPSBSS0NBTkZEX1JFR19GRF9GUkFNRUlORk9fRlJBTUVfRk9STUFUO1xcbkBAIC0xMTQsNyArMTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY2ZkLVxcdTAwM2VsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcXG4gXFx0cmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7XFxuIFxcbiBcXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTtcXG5AQCAtMTIzLDE0ICsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgKyBpLFxcbiBcXHRcXHRcXHQgICAgICAqKHUzMiAqKShjZmQtXFx1MDAzZWRhdGEgKyBpKSk7XFxuIFxcbi1cXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcXG4tXFx0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XFxuLVxcdGlmICghZXJyKVxcbi1cXHRcXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVxcdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xcbitcXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVxcdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xcbiBcXG4gXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2V0eF9oZWFkLCBwcml2LVxcdTAwM2V0eF9oZWFkICsgMSk7XFxuIFxcbiBcXHRya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRuZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtXFx1MDAzZW5kZXYsIDAsXFxuIFxcdFxcdFxcdFxcdCAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXFxuQEAgLTE0Nyw2ICsxNzAsOCBAQCB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cyxcXG4gXFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4rXFxuIFxcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xcbiBcXHRza2IgPSBwcml2LVxcdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXFxuaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG5AQCAtNDc0LDYgKzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYge1xcbiBcXHRzdHJ1Y3QgY2FuX3J4X29mZmxvYWQgb2ZmbG9hZDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuIFxcbitcXHRzcGlubG9ja190IHR4X2xvY2s7IC8qIHByb3RlY3RzIHR4X2hlYWQsIHR4X3RhaWwgYW5kIGVjaG9fc2tiICovXFxuIFxcdHZvaWQgX19pb21lbSAqcmVncztcXG4gXFx0dW5zaWduZWQgaW50IHR4X2hlYWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbkBAIC01NTYsNyArNTU4LDcgQEAgdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdGFydChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdG9wKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gXFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXFxuaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xcbkBAIC03ODcsNyArNzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiAgb3V0X2ZyZWVfaXJxOlxcbitcXHRwcml2LVxcdTAwM2Vmb3JjZV9xdWl0ID0gMTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VoaTMxMTBfbG9jayk7XFxuIFxcdGZyZWVfaXJxKHNwaS1cXHUwMDNlaXJxLCBwcml2KTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlaGkzMTEwX2xvY2spO1xcbiBcXHRoaTMxMTBfaHdfc2xlZXAoc3BpKTtcXG4gIG91dF9jbG9zZTpcXG4gXFx0aGkzMTEwX3Bvd2VyX2VuYWJsZShwcml2LVxcdTAwM2V0cmFuc2NlaXZlciwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXFxuaW5kZXggZjEyMzE4MjY4ZTQ2Yi4uNGMxNDdiOWQ2ZDY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IGY4MTYwNF9pbnRfZGF0YSB7XFxuIFxcdHU4IHJ4ZXJyO1xcbiBcXHR1OCB0eGVycjtcXG4gXFx0dTggdmFsO1xcbi19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTtcXG4rfSBfX3BhY2tlZDtcXG4gXFxuIHN0cnVjdCBmODE2MDRfc2ZmIHtcXG4gXFx0X19iZTE2IGlkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xcbmluZGV4IGVmYmI3YmVkMzRjOWQuLmVmZTdiM2VmNDg5YmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcXG5AQCAtNTM2LDYgKzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovXFxuK3N0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHRcXHRzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pXFxuK3tcXG4rXFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHNpemVvZihjbWQtXFx1MDAzZWhlYWRlci5jbWRfbm8pKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuK1xcdGlmIChjbWQtXFx1MDAzZWhlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByZW1haW5pbmcgXFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuK1xcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xcbitcXHRpZiAoISpjbWRfbGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKlxcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrdmFzZXJfY21kICpjbWQpXFxuQEAgLTY3NSw4ICs2OTMsOCBAQCBzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfd2FpdF9jbWQoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwgdTggY21kX25vLFxcbiBcXHRcXHRcXHRzaXplX3QgY21kX2xlbjtcXG4gXFxuIFxcdFxcdFxcdHRtcF9jbWQgPSBidWYgKyBwb3M7XFxuLVxcdFxcdFxcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpO1xcbi1cXHRcXHRcXHRpZiAocG9zICsgY21kX2xlbiBcXHUwMDNlIGFjdHVhbF9sZW4pIHtcXG4rXFx0XFx0XFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcXHUwMDI2Y21kX2xlbik7XFxuK1xcdFxcdFxcdGlmIChlcnIgfHwgcG9zICsgY21kX2xlbiBcXHUwMDNlIGFjdHVhbF9sZW4pIHtcXG4gXFx0XFx0XFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRm9ybWF0IGVycm9yXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxMjAsMjMgKzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XFxuIFxcdHVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSBjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XFxuIFxcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XFxuK1xcdFxcdGNvbnN0IHNpemVfdCBjbWRfc2l6ZV9maWVsZF9lbmQgPSBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpO1xcbiBcXHRcXHRpbnQgcmVtYWluaW5nX2J5dGVzO1xcbitcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0Y21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXI7XFxuIFxcbi1cXHRcXHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xcbitcXHRcXHRpZiAoY21kLVxcdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdXNiX3J4X2xlZnRvdmVyX2xlbiBcXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xcbitcXHRcXHRcXHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdChpbnQsIGxlbiwgY21kX3NpemVfZmllbGRfZW5kIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XFxuK1xcbitcXHRcXHRcXHRtZW1jcHkoY2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7XFxuK1xcdFxcdFxcdHVzYl9yeF9sZWZ0b3Zlcl9sZW4gKz0gcmVtYWluaW5nX2J5dGVzO1xcbitcXHRcXHRcXHRjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuO1xcbitcXHRcXHRcXHRwb3MgKz0gcmVtYWluaW5nX2J5dGVzO1xcbiBcXG4tXFx0XFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sXFxuK1xcdFxcdFxcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuIFxcdTAwM2MgY21kX3NpemVfZmllbGRfZW5kKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgXFx1MDAyNmNtZF9sZW4pO1xcbitcXHRcXHRpZiAoZXJyIHx8IGNtZF9sZW4gXFx1MDAzYyB1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiRm9ybWF0IGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiAtIHBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0Y21kX2xlbiAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xcbiBcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJmbG93IHVzYl9yeF9sZWZ0b3ZlciAqL1xcbiBcXHRcXHRpZiAocmVtYWluaW5nX2J5dGVzICsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcXHUwMDNlXFxuIFxcdFxcdFxcdFxcdFxcdFxcdEtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJGb3JtYXQgZXJyb3JcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdG1lbWNweShjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZixcXG4rXFx0XFx0bWVtY3B5KGNhcmRfZGF0YS1cXHUwMDNldXNiX3J4X2xlZnRvdmVyICsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmICsgcG9zLFxcbiBcXHRcXHQgICAgICAgcmVtYWluaW5nX2J5dGVzKTtcXG4gXFx0XFx0cG9zICs9IHJlbWFpbmluZ19ieXRlcztcXG4gXFxuQEAgLTIxNTIsMTEgKzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcXG4gXFxuIFxcdHdoaWxlIChwb3MgXFx1MDAzYyBsZW4pIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuIFxcdFxcdGNtZCA9IGJ1ZiArIHBvcztcXG4gXFxuLVxcdFxcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XFxuK1xcdFxcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCBsZW4gLSBwb3MsIFxcdTAwMjZjbWRfbGVuKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIkZvcm1hdCBlcnJvclxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHBvcyArIGNtZF9sZW4gXFx1MDAzZSBsZW4pIHtcXG4rXFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyArIGNtZF9sZW4gXFx1MDAzZSBsZW4pIHtcXG4gXFx0XFx0XFx0LyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovXFxuIFxcdFxcdFxcdGludCBsZWZ0b3Zlcl9ieXRlcztcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcXG5pbmRleCBhNzBhMDI5NjcwNzExLi43OGM1ODcwZTJmOWEyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcXG5AQCAtNzYsMTIgKzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuIFxcdGNhbl9za2Jfc2V0X293bmVyKG5za2IsIHNrYi1cXHUwMDNlc2spO1xcbi1cXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuIFxcdHJldHVybiBuc2tiO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uY1xcbmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9hZl9jYW4uY1xcbisrKyBiL25ldC9jYW4vYWZfY2FuLmNcXG5AQCAtMjI2LDcgKzIyNiw3IEBAIGludCBjYW5fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbG9vcClcXG4gXFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSkge1xcbitcXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXFx1MDAzZWRldikpKSB7XFxuIFxcdFxcdGVyciA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdH1cXG5AQCAtNDUyLDcgKzQ1Miw3IEBAIGludCBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcXG4gXFxuIFxcdC8qIGluc2VydCBuZXcgcmVjZWl2ZXIgIChkZXYsY2FuaWQsbWFzaykgLVxcdTAwM2UgKGZ1bmMsZGF0YSkgKi9cXG4gXFxuLVxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpXFxuK1xcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXFxuQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXFxuIFxcdHN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtXFx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XFxuIFxcdHN0cnVjdCBjYW5fZGV2X3Jjdl9saXN0cyAqZGV2X3Jjdl9saXN0cztcXG4gXFxuLVxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoZGV2IFxcdTAwMjZcXHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4ge1xcbi1cXHRpZiAodW5saWtlbHkoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XFxuK1xcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4gXFx0XFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuX3NrYihza2IpKSkge1xcbiBcXHRcXHRwcl93YXJuX29uY2UoXFxcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNldHlwZSwgc2tiLVxcdTAwM2VsZW4pO1xcbkBAIC03MDMsNyArNzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4rXFx0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxcbiBcXHRcXHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5mZF9za2Ioc2tiKSkpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXR5cGUsIHNrYi1cXHUwMDNlbGVuKTtcXG5AQCAtNzE5LDcgKzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgY2FueGxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4rXFx0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxcbiBcXHRcXHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIFhMIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXR5cGUsIHNrYi1cXHUwMDNlbGVuKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmNcXG5pbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NFxcbi0tLSBhL25ldC9jYW4vYmNtLmNcXG4rKysgYi9uZXQvY2FuL2JjbS5jXFxuQEAgLTU0LDYgKzU0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vYmNtLmhcXHUwMDNlXFxuQEAgLTE3MTksNyArMTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF9yZWxlYXNlO1xcbkBAIC0xODY3LDcgKzE4NjgsNyBAQCBzdGF0aWMgaW50IGJjbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuIFxcbi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXFxuIFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gXFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcXHUwMDI2XFx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXFxuIFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG5AQCAtMjAyNCw3ICsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludFxcbiBcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vZ3cuYyBiL25ldC9jYW4vZ3cuY1xcbmluZGV4IDBlYzk5ZjY4YWE0NTIuLmQ5OTEyZGVhNzM4YmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9ndy5jXFxuKysrIGIvbmV0L2Nhbi9ndy5jXFxuQEAgLTUyLDYgKzUyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vZ3cuaFxcdTAwM2VcXG5AQCAtNjA5LDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xcbiBcXG4tXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxcbitcXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIFxcbiBcXHRpZiAobXNnID09IE5FVERFVl9VTlJFR0lTVEVSKSB7XFxuQEAgLTExNjAsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIWd3ai1cXHUwMDNlc3JjLmRldilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoZ3dqLVxcdTAwM2VzcmMuZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cXHUwMDNlc3JjLmRldikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0Z3dqLVxcdTAwM2Vkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLVxcdTAwM2VjY2d3LmRzdF9pZHgpO1xcbkBAIC0xMTY4LDcgKzExNjksNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0aWYgKCFnd2otXFx1MDAzZWRzdC5kZXYpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKGd3ai1cXHUwMDNlZHN0LmRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxcbitcXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXFx1MDAzZWRzdC5kZXYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovXFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXFxuKysrIGIvbmV0L2Nhbi9pc290cC5jXFxuQEAgLTY1LDYgKzY1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vaXNvdHAuaFxcdTAwM2VcXG5AQCAtMTYwNiw3ICsxNjA3LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4tXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0Z290byBvdXRfcHV0X2RldjtcXG4gXFx0fVxcbkBAIC0xODkzLDcgKzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFxuLVxcdGlmIChkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcXG4rXFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiBcXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFxcdTAwMjZcXHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuY1xcbmluZGV4IDgyZDljMDQ5OWM5NWYuLjhlMmUxMTRhYmNiOTkgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xcbisrKyBiL25ldC9jYW4vcmF3LmNcXG5AQCAtMzQ0LDcgKzM0NCw3IEBAIHN0YXRpYyBpbnQgcmF3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFxuLVxcdGlmIChkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcXG4rXFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiBcXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFxcdTAwMjZcXHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIGludCByYXdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW5cXG4gXFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0X2RldjtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyMjowMy4xNjU5NDE4MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODk2OTE5NDAyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fQkNNXCIsXG4gICAgXCJDQU5fR1dcIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX1JBV1wiLFxuICAgIFwiQ0FOX0tWQVNFUl9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYW5fc2VuZFwiLFxuICAgIFwiY2FuX3JjdlwiLFxuICAgIFwiY2FuZmRfcmN2XCIsXG4gICAgXCJjYW54bF9yY3ZcIixcbiAgICBcImJjbV9zZW5kbXNnXCIsXG4gICAgXCJiY21fY29ubmVjdFwiLFxuICAgIFwiY2d3X2NyZWF0ZV9qb2JcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcInJhd19iaW5kXCIsXG4gICAgXCJrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCwgd2hpY2ggYWZmZWN0cyBob3cgQ0FOIGRldmljZXMgYXJlIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCBhY3Jvc3MgdmFyaW91cyBDQU4gcHJvdG9jb2xzIChSQVcsIEJDTSwgR1csIElTT1RQKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIncyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG5AQCAtMTE5LDggKzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCxcbiBcdCAgICAgdHNlZyBcdTAwM2U9IChidGMtXHUwMDNldHNlZzFfbWluICsgYnRjLVx1MDAzZXRzZWcyX21pbikgKiAyOyB0c2VnLS0pIHtcbiBcdFx0dHNlZ2FsbCA9IENBTl9TWU5DX1NFRyArIHRzZWcgLyAyO1xuIFxuLVx0XHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpICovXG4tXHRcdGJycCA9IHByaXYtXHUwMDNlY2xvY2suZnJlcSAvICh0c2VnYWxsICogYnQtXHUwMDNlYml0cmF0ZSkgKyB0c2VnICUgMjtcbitcdFx0LyogQ29tcHV0ZSBhbGwgcG9zc2libGUgdHNlZyBjaG9pY2VzICh0c2VnPXRzZWcxK3RzZWcyKS5cbitcdFx0ICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LVx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcbitcdFx0ICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC5cbitcdFx0ICovXG4rXHRcdGJycCA9IGRpdjY0X3U2NChwcml2LVx1MDAzZWNsb2NrLmZyZXEsXG4rXHRcdFx0XHRtdWxfdTMyX3UzMih0c2VnYWxsLCBidC1cdTAwM2ViaXRyYXRlKSkgKyB0c2VnICUgMjtcbiBcbiBcdFx0LyogY2hvb3NlIGJycCBzdGVwIHdoaWNoIGlzIHBvc3NpYmxlIGluIHN5c3RlbSAqL1xuIFx0XHRicnAgPSAoYnJwIC8gYnRjLVx1MDAzZWJycF9pbmMpICogYnRjLVx1MDAzZWJycF9pbmM7XG5AQCAtMTI4LDcgKzEzMiw3IEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRiaXRyYXRlID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpO1xuLVx0XHRiaXRyYXRlX2Vycm9yID0gYWJzKGJ0LVx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcbitcdFx0Yml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LVx1MDAzZWJpdHJhdGUsIGJpdHJhdGUpO1xuIFxuIFx0XHQvKiB0c2VnIGJycCBiaXRlcnJvciAqL1xuIFx0XHRpZiAoYml0cmF0ZV9lcnJvciBcdTAwM2UgYmVzdF9iaXRyYXRlX2Vycm9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG5pbmRleCA5NWZjZGMxMDI2ZjgwLi5mYWFmYjEwMzNkNDIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuQEAgLTQsNiArNCw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciBcdTAwM2N3Z0BncmFuZGVnZ2VyLmNvbVx1MDAzZVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2Nhbi5oXHUwMDNlXG5AQCAtNTQsNiArNTUsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGlkeCBcdTAwM2U9IHByaXYtXHUwMDNlZWNob19za2JfbWF4KSB7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcIiVzOiBCVUchIFRyeWluZyB0byBhY2Nlc3MgY2FuX3ByaXY6OmVjaG9fc2tiIG91dCBvZiBib3VuZHMgKCV1L21heCAldSlcXG5cIixcbiBcdFx0XHQgICBfX2Z1bmNfXywgaWR4LCBwcml2LVx1MDAzZWVjaG9fc2tiX21heCk7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTYyLDcgKzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCAgICAoc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5GRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5YTCkpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MCw3ICs5Miw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBsb2NraW5nIHByb2JsZW0gd2l0aCBuZXRpZl9zdG9wX3F1ZXVlKCkgPz8gKi9cbiBcdFx0bmV0ZGV2X2VycihkZXYsIFwiJXM6IEJVRyEgZWNob19za2IgJWQgaXMgb2NjdXBpZWQhXFxuXCIsIF9fZnVuY19fLCBpZHgpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdH1cbiBcbkBAIC0yMjMsNyArMjI1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2Nhbl9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9mcmFtZSAqKmNmKVxuIFxuIFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG4gXHRpZiAoIWNzeCkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfY2M7XG4gXHR9XG4gXG5AQCAtMjU0LDcgKzI1Niw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuIFx0aWYgKCFjc3gpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gb3V0X2Vycm9yX2ZkO1xuIFx0fVxuIFxuQEAgLTI5Miw3ICsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIG91dF9lcnJvcl94bDtcbiBcdH1cbiBcbkBAIC0zODQsNyArMzg2LDcgQEAgYm9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgRVRIX1BfQ0FOWEw6XG4tXHRcdGlmICghY2FuX2lzX2NhbnhsX3NrYihza2IpKVxuK1x0XHRpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4gXHRcdFx0Z290byBpbnZhbF9za2I7XG4gXHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbkBAIC0xNzM5LDYgKzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSlcbiBcdFx0XHRpb3dyaXRlMzIoMCwgY2FuLVx1MDAzZXJlZ19iYXNlICsgS1ZBU0VSX1BDSUVGRF9LQ0FOX0lFTl9SRUcpO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcbiBcdFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4rXHRcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuIFx0XHRcdGZyZWVfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE4NzksNyArMTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtXHUwMDNlY2FuW2ldO1xuIFxuIFx0XHR1bnJlZ2lzdGVyX2NhbmRldihjYW4tXHUwMDNlY2FuLmRldik7XG4tXHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuK1x0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4gXHRcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5pbmRleCAzN2MxYzIyYzQwYzlmLi4xY2FlODY5NzNkYTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xuQEAgLTkyMSw2ICs5MjEsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHByaXYtXHUwMDNlY2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTtcbiBcdHByaXYtXHUwMDNlY2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7XG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChtYXRjaCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbkBAIC0xMDAsMTQgKzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZF9ub21pbmFsO1xuIFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHR0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiBcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X3RhaWxdO1xuIFx0aWYgKCFza2IpIHtcbitcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X2hlYWQ7XG4rXHRcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsX3VubWFza2VkID0gcHJpdi1cdTAwM2V0eF90YWlsO1xuK1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmRldixcbiBcdFx0XHQgICBcIiVzOiBlY2hvX3NrYlsldV09TlVMTCB0eF9oZWFkPTB4JTA4eCB0eF90YWlsPTB4JTA4eFxcblwiLFxuIFx0XHRcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxuLVx0XHRcdCAgIHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF90YWlsKTtcbitcdFx0XHQgICB0eF9oZWFkX3VubWFza2VkLCB0eF90YWlsX3VubWFza2VkKTtcbiBcbiBcdFx0cmV0dXJuIC1FTk9NU0c7XG4gXHR9XG5AQCAtMTIzLDE3ICsxMzQsMTggQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0XHRya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShwcml2LCB0cywgXHUwMDI2ZnJhbWVfbGVuKTtcbiBcbiBcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXR4X3RhaWwsIHByaXYtXHUwMDNldHhfdGFpbCArIDEpO1xuK1x0XHQqdHhfZG9uZSA9IHRydWU7XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXHRcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXHUwMDNlbmRldiwgMCwgMSwgZnJhbWVfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbiBcdFx0XHRcdFx0ICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpO1xuIFxuLVx0XHQqdHhfZG9uZSA9IHRydWU7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0aWYgKCEocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogRXJyYXR1bSA2OiBFeHRlbmRlZCBmcmFtZXMgbWF5IGJlIHNlbmQgYXMgc3RhbmRhcmQgZnJhbWVzLlxuIFx0ICpcbkBAIC0xNDMsNyArMTU1LDcgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0ICovXG4gXHRpZiAoIShjZmRfbm9taW5hbC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRykgfHxcbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJ2VkIGZyYW1lXG5AQCAtMTUxLDIwICsxNjMsMjAgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0ICovXG4gXHRpZiAoKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpICE9XG4gXHQgICAgKGNmZF9yeC1cdTAwM2VjYW5faWQgXHUwMDI2IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZVxuIFx0ICovXG4gXHRpZiAoY2ZkX25vbWluYWwtXHUwMDNlbGVuICE9IGNmZF9yeC1cdTAwM2VsZW4pXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBOb3QgYWZmZWN0ZWQgaWY6XG4gXHQgKiAtIHRoZSBkYXRhIG9mIG5vbiBSVFIgZnJhbWVzIGlzIGRpZmZlcmVudFxuIFx0ICovXG4gXHRpZiAoIShjZmRfbm9taW5hbC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9SVFJfRkxBRykgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWVtY21wKGNmZF9ub21pbmFsLVx1MDAzZWRhdGEsIGNmZF9yeC1cdTAwM2VkYXRhLCBjZmRfbm9taW5hbC1cdTAwM2VsZW4pKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogQWZmZWN0ZWQgYnkgRXJyYXR1bSA2ICovXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJrY2FuZmRfc3RhdHMtXHUwMDNlc3luY3ApO1xuQEAgLTE4NSw2ICsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXG4gXHRya2NhbmZkX3htaXRfcmV0cnkocHJpdik7XG4gXG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuaW5kZXggMTIyMDBkY2ZkMzM4OS4uYjM2NzM0MWRkMGFlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuQEAgLTE0LDYgKzE0LDggQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuK1xuIFx0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMzMsMTMgKzM1LDIyIEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiBcdHJldHVybiBjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUc7XG4gfVxuIFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuK3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIHtcbitcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuIFx0aWYgKHByaXYtXHUwMDNlZGV2dHlwZV9kYXRhLnF1aXJrcyBcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYocHJpdikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHR0eF9mcmVlID0gMDtcbitcdGVsc2VcbitcdFx0dHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XG4gXG4tXHRyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gdHhfZnJlZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuQEAgLTU3LDggKzY4LDEwIEBAIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGludCB0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcbi1cdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcbitcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbitcdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF90YWlsKTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XG4gfVxuQEAgLTY5LDYgKzgyLDcgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0dTMyIHJlZ19mcmFtZWluZm8sIHJlZ19pZCwgcmVnX2NtZDtcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkLCBmcmFtZV9sZW47XG4gXHRjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFx0dTggaTtcbiBcbkBAIC04OCw3ICsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG4tXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVx1MDAzZWRhdGE7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcdHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuK1x0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4rXHRlcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTtcbitcdGlmIChlcnIpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbitcdFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4rXG4rXHRza2IgPSBwcml2LVx1MDAzZWNhbi5lY2hvX3NrYlt0eF9oZWFkXTtcbitcdGNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdGlmIChjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHtcbiBcdFx0cmVnX2ZyYW1laW5mbyA9IFJLQ0FORkRfUkVHX0ZEX0ZSQU1FSU5GT19GUkFNRV9GT1JNQVQ7XG5AQCAtMTE0LDcgKzE0MCw2IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRcdFx0ICAgIGNmZC1cdTAwM2VsZW4pO1xuIFx0fVxuIFxuLVx0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4gXHRyZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcbiBcbiBcdHJrY2FuZmRfd3JpdGUocHJpdiwgUktDQU5GRF9SRUdfRkRfVFhGUkFNRUlORk8sIHJlZ19mcmFtZWluZm8pO1xuQEAgLTEyMywxNCArMTQ4LDEyIEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWERBVEEwICsgaSxcbiBcdFx0XHQgICAgICAqKHUzMiAqKShjZmQtXHUwMDNlZGF0YSArIGkpKTtcbiBcbi1cdGZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpO1xuLVx0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XG4tXHRpZiAoIWVycilcbi1cdFx0bmV0ZGV2X3NlbnRfcXVldWUocHJpdi1cdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xuK1x0bmV0ZGV2X3NlbnRfcXVldWUocHJpdi1cdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xuIFxuIFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXR4X2hlYWQsIHByaXYtXHUwMDNldHhfaGVhZCArIDEpO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXG4gXHRuZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtXHUwMDNlbmRldiwgMCxcbiBcdFx0XHRcdCAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXG5AQCAtMTQ3LDYgKzE3MCw4IEBAIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLFxuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuK1xuIFx0dHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7XG4gXHRza2IgPSBwcml2LVx1MDAzZWNhbi5lY2hvX3NrYlt0eF90YWlsXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG5pbmRleCA5NWJlYTliZmQ4YTJmLi4yZGMzYTQxYWZlMzJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTQ3NCw2ICs0NzUsNyBAQCBzdHJ1Y3QgcmtjYW5mZF9wcml2IHtcbiBcdHN0cnVjdCBjYW5fcnhfb2ZmbG9hZCBvZmZsb2FkO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gXG4rXHRzcGlubG9ja190IHR4X2xvY2s7IC8qIHByb3RlY3RzIHR4X2hlYWQsIHR4X3RhaWwgYW5kIGVjaG9fc2tiICovXG4gXHR2b2lkIF9faW9tZW0gKnJlZ3M7XG4gXHR1bnNpZ25lZCBpbnQgdHhfaGVhZDtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuQEAgLTU1Niw3ICs1NTgsNyBAQCB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0YXJ0KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbmluZGV4IGFlOTBlNjcxNmRlNWIuLjJiZTg1MWU4OTA3ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG5AQCAtNzg3LDcgKzc4NywxMCBAQCBzdGF0aWMgaW50IGhpMzExMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4gXHRyZXR1cm4gMDtcbiBcbiAgb3V0X2ZyZWVfaXJxOlxuK1x0cHJpdi1cdTAwM2Vmb3JjZV9xdWl0ID0gMTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWhpMzExMF9sb2NrKTtcbiBcdGZyZWVfaXJxKHNwaS1cdTAwM2VpcnEsIHByaXYpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWhpMzExMF9sb2NrKTtcbiBcdGhpMzExMF9od19zbGVlcChzcGkpO1xuICBvdXRfY2xvc2U6XG4gXHRoaTMxMTBfcG93ZXJfZW5hYmxlKHByaXYtXHUwMDNldHJhbnNjZWl2ZXIsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5pbmRleCBmMTIzMTgyNjhlNDZiLi40YzE0N2I5ZDZkNjkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xuQEAgLTE2OSw3ICsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHtcbiBcdHU4IHJ4ZXJyO1xuIFx0dTggdHhlcnI7XG4gXHR1OCB2YWw7XG4tfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4rfSBfX3BhY2tlZDtcbiBcbiBzdHJ1Y3QgZjgxNjA0X3NmZiB7XG4gXHRfX2JlMTYgaWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbmluZGV4IGVmYmI3YmVkMzRjOWQuLmVmZTdiM2VmNDg5YmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG5AQCAtNTM2LDYgKzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIC1FQUdBSU4gbWVhbnMgaW5jb21wbGV0ZTsgLUVJTlZBTCByZWplY3RzIHplcm8gdG8gZW5zdXJlIHByb2dyZXNzLiAqL1xuK3N0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kLFxuK1x0XHRcdFx0XHRzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pXG4re1xuK1x0aWYgKHJlbWFpbmluZyBcdTAwM2Mgc2l6ZW9mKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vKSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHRpZiAoY21kLVx1MDAzZWhlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJlbWFpbmluZyBcdTAwM2Mgb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHQqY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTtcbitcdGlmICghKmNtZF9sZW4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqXG4ga3Zhc2VyX3VzYl9oeWRyYV9uZXRfcHJpdl9mcm9tX2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcbkBAIC02NzUsOCArNjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubyxcbiBcdFx0XHRzaXplX3QgY21kX2xlbjtcbiBcbiBcdFx0XHR0bXBfY21kID0gYnVmICsgcG9zO1xuLVx0XHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpO1xuLVx0XHRcdGlmIChwb3MgKyBjbWRfbGVuIFx1MDAzZSBhY3R1YWxfbGVuKSB7XG4rXHRcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0XHRpZiAoZXJyIHx8IHBvcyArIGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbiBcdFx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XHRcdCAgICBcIkZvcm1hdCBlcnJvclxcblwiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIxMjAsMjMgKzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fbG9ja19pcnFzYXZlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0dXNiX3J4X2xlZnRvdmVyX2xlbiA9IGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuO1xuIFx0aWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbitcdFx0Y29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7XG4gXHRcdGludCByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdGludCBlcnI7XG4gXG4gXHRcdGNtZCA9IChzdHJ1Y3Qga3Zhc2VyX2NtZCAqKWNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXI7XG4gXG4tXHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XG4rXHRcdGlmIChjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbitcdFx0XHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdChpbnQsIGxlbiwgY21kX3NpemVfZmllbGRfZW5kIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4rXG4rXHRcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7XG4rXHRcdFx0dXNiX3J4X2xlZnRvdmVyX2xlbiArPSByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuO1xuK1x0XHRcdHBvcyArPSByZW1haW5pbmdfYnl0ZXM7XG4gXG4tXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuK1x0XHRcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCB1c2JfcnhfbGVmdG92ZXJfbGVuLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0aWYgKGVyciB8fCBjbWRfbGVuIFx1MDAzYyB1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XG4rXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuK1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiAtIHBvcyxcbiBcdFx0XHRcdFx0Y21kX2xlbiAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xuIFx0XHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJmbG93IHVzYl9yeF9sZWZ0b3ZlciAqL1xuIFx0XHRpZiAocmVtYWluaW5nX2J5dGVzICsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2VcbiBcdFx0XHRcdFx0XHRLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuK1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZixcbitcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYgKyBwb3MsXG4gXHRcdCAgICAgICByZW1haW5pbmdfYnl0ZXMpO1xuIFx0XHRwb3MgKz0gcmVtYWluaW5nX2J5dGVzO1xuIFxuQEAgLTIxNTIsMTEgKzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXG4gXHR3aGlsZSAocG9zIFx1MDAzYyBsZW4pIHtcbitcdFx0aW50IGVycjtcbitcbiBcdFx0Y21kID0gYnVmICsgcG9zO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuK1x0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXG4tXHRcdGlmIChwb3MgKyBjbWRfbGVuIFx1MDAzZSBsZW4pIHtcbitcdFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyArIGNtZF9sZW4gXHUwMDNlIGxlbikge1xuIFx0XHRcdC8qIFdlIGdvdCBmaXJzdCBwYXJ0IG9mIGEgY29tbWFuZCAqL1xuIFx0XHRcdGludCBsZWZ0b3Zlcl9ieXRlcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaCBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG5pbmRleCBhNzBhMDI5NjcwNzExLi43OGM1ODcwZTJmOWEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG5AQCAtNzYsMTIgKzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdGlmICh1bmxpa2VseSghbnNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuIFx0Y2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLVx1MDAzZXNrKTtcbi1cdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4gXHRyZXR1cm4gbnNrYjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9hZl9jYW4uYyBiL25ldC9jYW4vYWZfY2FuLmNcbmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2FmX2Nhbi5jXG4rKysgYi9uZXQvY2FuL2FmX2Nhbi5jXG5AQCAtMjI2LDcgKzIyNiw3IEBAIGludCBjYW5fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbG9vcClcbiBcdFx0Z290byBpbnZhbF9za2I7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pKSB7XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXHUwMDNlZGV2KSkpIHtcbiBcdFx0ZXJyID0gLUVQRVJNO1xuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbkBAIC00NTIsNyArNDUyLDcgQEAgaW50IGNhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLFxuIFxuIFx0LyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtXHUwMDNlIChmdW5jLGRhdGEpICovXG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikpKVxuK1x0aWYgKGRldiBcdTAwMjZcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxuQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXHRzdHJ1Y3QgY2FuX3Jjdl9saXN0c19zdGF0cyAqcmN2X2xpc3RzX3N0YXRzID0gbmV0LVx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XG4gXHRzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7XG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKGRldiBcdTAwMjZcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSlcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCIsXG4gXHRcdFx0ICAgICBkZXYtXHUwMDNldHlwZSwgc2tiLVx1MDAzZWxlbik7XG5AQCAtNzAzLDcgKzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5mZF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBGRCBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcbiB7XG4tXHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcbitcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcbiBcdFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCIsXG4gXHRcdFx0ICAgICBkZXYtXHUwMDNldHlwZSwgc2tiLVx1MDAzZWxlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmNcbmluZGV4IDNkNjM3YTFlMGFjMWEuLjYwNDA2NDM5YTEzZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2JjbS5jXG4rKysgYi9uZXQvY2FuL2JjbS5jXG5AQCAtNTQsNiArNTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vYmNtLmhcdTAwM2VcbkBAIC0xNzE5LDcgKzE3MjAsNyBAQCBzdGF0aWMgaW50IGJjbV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikge1xuK1x0XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRcdHJldCA9IC1FTk9ERVY7XG4gXHRcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuQEAgLTE4NjcsNyArMTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcdTAwMjZcdTAwMjYgbXNnICE9IE5FVERFVl9ET1dOKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG5AQCAtMjAyNCw3ICsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludFxuIFx0XHRcdHJldCA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9ndy5jIGIvbmV0L2Nhbi9ndy5jXG5pbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9ndy5jXG4rKysgYi9uZXQvY2FuL2d3LmNcbkBAIC01Miw2ICs1Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9ndy5oXHUwMDNlXG5AQCAtNjA5LDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcbiBcdGlmIChtc2cgPT0gTkVUREVWX1VOUkVHSVNURVIpIHtcbkBAIC0xMTYwLDcgKzExNjEsNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZ3dqLVx1MDAzZXNyYy5kZXYpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGd3ai1cdTAwM2VzcmMuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cdTAwM2VzcmMuZGV2KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRnd2otXHUwMDNlZHN0LmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGd3ai1cdTAwM2VjY2d3LmRzdF9pZHgpO1xuQEAgLTExNjgsNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlZHN0LmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZWRzdC5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLVx1MDAzZWRzdC5kZXYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jXG5pbmRleCAxNTU1MzBhZWRjZTJlLi40NTYwZDVhNTY3ZWNmIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXG4rKysgYi9uZXQvY2FuL2lzb3RwLmNcbkBAIC02NSw2ICs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9pc290cC5oXHUwMDNlXG5AQCAtMTYwNiw3ICsxNjA3LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikge1xuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dF9wdXRfZGV2O1xuIFx0fVxuQEAgLTE4OTMsNyArMTg5NCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuY1xuaW5kZXggODJkOWMwNDk5Yzk1Zi4uOGUyZTExNGFiY2I5OSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vcmF3LmNcbisrKyBiL25ldC9jYW4vcmF3LmNcbkBAIC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIGludCByYXdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW5cbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjIyOjAzLjE2NTk0NDI1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2OTA3NTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDQU4gU3Vic3lzdGVtIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgQ0FOIHN1YnN5c3RlbS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGUgYnJlYWR0aCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UgaGF2ZSBjaGFuZ2VzIHRvdWNoaW5nIHZhcmlvdXMgbGV2ZWxzLCBmcm9tIGxvdy1sZXZlbCBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucyBhbGwgdGhlIHdheSB1cCB0byB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy5cblxuMS4gICoqU2FmZXR5IGFuZCBDb3JyZWN0bmVzczoqKiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jYCB3aXRoIHRoZSBgZGl2NjRfdTY0YCwgYG11bF91MzJfdTMyYCwgYW5kIGBhYnNfZGlmZmAgcmVwbGFjZSBpcyBjcml0aWNhbC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCAzMi1iaXQgd3JhcC1hcm91bmQgaXNzdWVzLCB3aGljaCBhcmUgc3VidGxlIGJ1dCBjYW4gbGVhZCB0byBpbmNvcnJlY3QgYml0IHRpbWluZyBjb25maWd1cmF0aW9ucy4gU2ltaWxhcmx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGluIHNldmVyYWwgZmlsZXMsIHBhcnRpY3VsYXJseSBgZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2Nhbi9za2IuaGAsIGFuZCBgY29uc3VtZV9za2JgIHdpdGggYGRldl9jb25zdW1lX3NrYl9hbnlgIGluIGluY2x1ZGUsIGluZGljYXRlcyBhbiBlZmZvcnQgdG8gaW1wcm92ZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBwcmV2ZW50IG1lbW9yeSBsZWFrcywgZXNwZWNpYWxseSBvbiBlcnJvciBwYXRocy4gVGhlIGxvY2tpbmcgY2hhbmdlcyB0byBgcm9ja2NoaXBfY2FuZmRgIGFuZCB0aGUgYWRkaXRpb24gb2Ygc2FmZXR5IGNoZWNrcyBpbiB0aGUga3Zhc2VyX3VzYiBkcml2ZXIgYWxzbyBpbXByb3ZlIHJvYnVzdG5lc3MuIFRoZSBjaGFuZ2UgdG8gYHRpbWVyX3NodXRkb3duX3N5bmNgIHN1Z2dlc3RzIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLlxuXG4yLiAgKipSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsOioqIFRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgZnV6emluZyBzZWVtIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29yZSBDQU4gbmV0d29ya2luZyBjb2RlIChgbmV0L2Nhbi9gKSBhbmQgdGhlIFVTQiBDQU4gZGV2aWNlIGRyaXZlcnMuIFRoZSBjaGFuZ2VzIHRoYXQgdXNlIGAhY2FuX2dldF9tbF9wcml2KGRldilgIGluIG5ldC9jYW4gYWZmZWN0IHRoZSBjb3JlIENBTiBvcGVyYXRpb24gYW5kIGFyZSBvZiBodWdlIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2Nhbi9hZl9jYW4uY2AsIGBuZXQvY2FuL2JjbS5jYCwgYG5ldC9jYW4vZ3cuY2AsIGBuZXQvY2FuL2lzb3RwLmNgLCBhbmQgYG5ldC9jYW4vcmF3LmNgLCB3aGljaCBjb250cm9sIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgaGFuZGxlZCBieSB0aGUgc3lzdGVtLiBGdW5jdGlvbnMgbGlrZSBgY2FuX3NlbmRgLCBgY2FuX3JjdmAsIGBjYW5mZF9yY3ZgLCBgY2FueGxfcmN2YCwgYGJjbV9zZW5kbXNnYCwgYGJjbV9jb25uZWN0YCwgYGNnd19jcmVhdGVfam9iYCwgYGlzb3RwX2JpbmRgLCBhbmQgYHJhd19iaW5kYCBhcmUgYWxsIHByaW1lIHRhcmdldHMuIFRoZXkgYXJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIEFGXFxfQ0FOIHNvY2tldHMsIG1ha2luZyB0aGVtIGVhc3kgdG8gdGVzdC5cblxuICAgIFRoZSBjaGFuZ2VzIGluIGBrdmFzZXJfdXNiX2h5ZHJhLmNgLCB0aG91Z2ggc3BlY2lmaWMgdG8gS3Zhc2VyIFVTQiBkZXZpY2VzLCBhcmUgYWxzbyByZWxldmFudC4gVVNCIENBTiBkZXZpY2VzIGFyZSBlbXVsYXRhYmxlIHVzaW5nIHRvb2xzIGxpa2UgZHVtbXlcXF9oY2Qgb3Igc3l6LXVzYiwgZW5hYmxpbmcgZm9jdXNlZCBmdXp6aW5nIGluIHRoaXMgYXJlYS4gYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYCBpcyBhbiBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGhlcmUuXG5cbjMuICAqKlByaW9yaXRpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIFdoaWxlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHNlcmllcyBtaWdodCBpbnRyb2R1Y2UgcG90ZW50aWFsIGJ1Z3MsIHRoZXkgYXJlIGxpa2VseSBoYXJkZXIgdG8gcmVhY2ggZnJvbSBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgY29yZSBDQU4gYW5kIFVTQiBDQU4gYXNwZWN0cyB0YWtlIHByaW9yaXR5LlxuXG4gICAgVG8gZnV6eiBlZmZlY3RpdmVseSwgSSdsbCBuZWVkIGEga2VybmVsIGNvbmZpZ3VyZWQgd2l0aCBgQ0FOYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYENBTl9JU09UUGAsIGBDQU5fUkFXYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAgZW5hYmxlZC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IEFGXFxfQ0FOIHNvY2tldCB0eXBlcyBhbmQgVVNCIENBTiBzdXBwb3J0LCBnaXZpbmcgbWUgdGhlIGJyb2FkZXN0IGNvdmVyYWdlIHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIHNlcmllcyBoYXMgc2V2ZXJhbCBjaGFuZ2VzIHRoYXQgYXJlIGJlbmVmaWNpYWwgdG8gdGhlIGtlcm5lbC4gSG93ZXZlciwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEknbGwgZm9jdXMgb24gdGhlIGNvcmUgQ0FOIG5ldHdvcmtpbmcgY29kZSBhbmQgVVNCIENBTiBkcml2ZXIgY29kZSBkdWUgdG8gdGhlaXIgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjI5OjA3LjMzNTAyMTk3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzMzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxcbm5ldC9jYW4vS2NvbmZpZy0yMy1cXG5uZXQvY2FuL0tjb25maWc6MjQ6Y29uZmlnIENBTl9SQVdcXG5uZXQvY2FuL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIlJhdyBDQU4gUHJvdG9jb2wgKHJhdyBhY2Nlc3Mgd2l0aCBDQU4tSUQgZmlsdGVyaW5nKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZy0zMy1cXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cXG5uZXQvY2FuL0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctNDUtXFxubmV0L2Nhbi9LY29uZmlnOjQ2OmNvbmZpZyBDQU5fR1dcXG5uZXQvY2FuL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIkNBTiBHYXRld2F5L1JvdXRlciAod2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24pXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcXFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnXFxcIlxcbm5ldC9jYW4vS2NvbmZpZy01OC1cXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxcbm5ldC9jYW4vS2NvbmZpZy02MC1cXHR0cmlzdGF0ZSBcXFwiSVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6Mjk6MDcuMzc4NDU3NjExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMjA4MTE1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENBTiBDb25maWd1cmF0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBDQU4gY29uZmlndXJhdGlvbnM6IGBDQU5fUkFXYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYW5kIGBDQU5fSVNPVFBgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSdtIHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlaXIgcm9sZXMgaW4gcmF3IGZyYW1lIHRyYW5zbWlzc2lvbiwgYnJvYWRjYXN0IGNvbW11bmljYXRpb24gbWFuYWdlbWVudCwgZ2F0ZXdheSBmdW5jdGlvbmFsaXR5LCBhbmQgSVNPLVRQIGltcGxlbWVudGF0aW9ucyByZXNwZWN0aXZlbHkuIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIHdvcmsgaW5kaXZpZHVhbGx5IGFuZCBpbiBjb21iaW5hdGlvbiBmb3IgdmFyaW91cyBzZXR1cHMuXG5cbkJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQuIEl0J3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgQ0FOX0tWQVNFUl9VU0JgLiBLdmFzZXIgVVNCIGludGVyZmFjZXMgYXJlIHByZXR0eSB1YmlxdWl0b3VzLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBub3RlcyBJIHNob3VsZCBiZSBiZWFyaW5nIGluIG1pbmQgZm9yIGNvbXBhdGliaWxpdHkgb3Igb3B0aW1pemF0aW9uLiBJIHNob3VsZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgb3B0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgYW55IG51YW5jZXMgb2YgaG93IHRoZSBLdmFzZXIgaW50ZXJmYWNlIG1pZ2h0IGludGVyYWN0IHdpdGggdGhvc2UgbW9yZSBjb21tb24gY29uZmlndXJhdGlvbnMgSSBtZW50aW9uZWQgZWFybGllci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoIGlzIGNvbmZpZ3VyZWQgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjI5OjI5LjQ5OTI3MDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjQ0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQU5fS1ZBU0VSX1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTU0PWNvbmZpZyBDQU5fR1NfVVNCXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY3OmNvbmZpZyBDQU5fS1ZBU0VSX1VTQlxcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIENBTi9VU0IgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyOToyOS41NDU5MjU2MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQwODExMDUyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIENBTiBDb25maWd1cmF0aW9uIGFuZCBMb29raW5nIGZvciBGdXJ0aGVyIEFkanVzdG1lbnRzKipcblxuQWxyaWdodCwgdGhhdCBmaXJzdCBjaGVjayBjb25maXJtcyBpdC4gTXkgaW5pdGlhbCBodW5jaCBhYm91dCB1c2luZyBgQ0FOX0tWQVNFUl9VU0JgIGZvciB0aGUgS3Zhc2VyIGludGVyZmFjZSBpcyBzcG90LW9uLiBOb3cgdGhhdCB0aGF0J3MgdmFsaWRhdGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBDQU4gYnVzIGl0c2VsZi4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGludGVyZmFjZSB0eXBlIGFuZCBmb3JnZXR0aW5nIGFib3V0IHRoaW5ncyBsaWtlIGJhdWQgcmF0ZSwgYXJiaXRyYXRpb24gSURzLCBvciBhY2NlcHRhbmNlIGZpbHRlcnMuIFNvLCBsZXQncyBleHBhbmQgdGhlIHNjb3BlIGEgbGl0dGxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzZXR0aW5ncyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgY2hlY2tpbmcgdG8gZW5zdXJlIHRoZSBDQU4gc2V0dXAgaXMgZnVsbHkgZGlhbGVkIGluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4ODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMToyMy42MjcwMzM1NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cXG5uZXQvY2FuL0tjb25maWctMjMtXFxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXFxubmV0L2Nhbi9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctMzMtXFxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXFxubmV0L2Nhbi9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTQ1LVxcbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXFxubmV0L2Nhbi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcXG5uZXQvY2FuL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjIzLjY3MTg2ODA0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzIxNDEyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDQU4gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBDQU4gY29uZmlndXJhdGlvbnMg4oCTIGBDQU5gLCBgQ0FOX1JBV2AsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGBDQU5fSVNPVFBgLCBhbmQgYENBTl9LVkFTRVJfVVNCYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCdzIGJyZWFrIGl0IGRvd24uIEZvciBcImNvcmUgQ0FOLFwiIEknbSB0aGlua2luZzogYGNhbl9zZW5kYCwgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIHBvdGVudGlhbGx5IGBjYW54bF9yY3ZgLCBhcyB3ZWxsIGFzIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYW5kIGByYXdfYmluZGAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMgZm9yIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGNvbnRyb2wuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIFVTQiBDQU4gc2lkZSwgYW5kIHJpZ2h0IG5vdyB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYC5cblxuTm93LCBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgbmFtZXMuIEkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnRoZXJlKiBhbmQsIGNyaXRpY2FsbHksIG5vdCBtYWdpY2FsbHkgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyIHRocm91Z2ggaW5saW5pbmcgb3Igc3RhdGljIGRlY2xhcmF0aW9uIGluIGEgd2F5IHRoYXQgd291bGQgcHJldmVudCBmdXp6aW5nIGZyb20gZWZmZWN0aXZlbHkgcmVhY2hpbmcgdGhlbS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1enplciBjYW4gYWN0dWFsbHkgKnNlZSogdGhlc2UgZnVuY3Rpb25zIGFuZCBwcm92aWRlIGlucHV0cy4gVGhhdCdzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjMwLjUwNDAxMTQ4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3ODE3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGNhbl9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vYWZfY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9hZl9jYW4uYz0xMTQ9c3RhdGljIGludCBjYW5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy0yMDEtICovXFxubmV0L2Nhbi9hZl9jYW4uYzoyMDI6aW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxcbm5ldC9jYW4vYWZfY2FuLmMtMjAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzAuNTUwNzk1ODM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTU1ODc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgb24gRXhwb3J0ZWQgRnVuY3Rpb25zKipcblxuUmlnaHQsIGBjYW5fc2VuZGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gV2hlbiBJIHNlZSB0aGF0IGEgZnVuY3Rpb24gaXMgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqaW50ZW5kZWQqIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb2R1bGUgb3IgbGlicmFyeS4gSXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtLCBhbmQgaXRzIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoIGFuIGV5ZSBmb3IgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSBmb3IgZXh0ZXJuYWwgY29uc3VtZXJzLiBcblxuU2Vjb25kLCB0aGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQgbWVhbnMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBJdCdzIHByb2JhYmx5IGEgZ2F0ZWtlZXBlciwgYW4gb3JjaGVzdHJhdG9yLCBvciBhIGRhdGEgdHJhbnNmb3JtYXRpb24gdG9vbCB0aGF0IHRoZSB3aWRlciBzeXN0ZW0gcmVsaWVzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBtb2R1bGUgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgY2FuX3NlbmRgLlxuXG5GaW5hbGx5LCBpdCdzIGFib3V0IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIEFueSBtb2RpZmljYXRpb24gdG8gYGNhbl9zZW5kYCBoYXMgdGhlIHBvdGVudGlhbCB0byBicmVhayBleGlzdGluZyBpbnRlZ3JhdGlvbnMuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIGl0cyBkZXBlbmRlbmNpZXMsIGJvdGggd2l0aGluIHRoZSBjdXJyZW50IHByb2plY3QgYW5kIGFueSBleHRlcm5hbCBjb2RlIHRoYXQgbWlnaHQgYmUgY2FsbGluZyBpdCwgdG8gYXNzZXNzIHRoZSByaXNrcyBhbmQgcGxhbiBhY2NvcmRpbmdseS4gSXQgZGljdGF0ZXMgdGhlIG5lZWQgdG8gaGF2ZSBleHRyZW1lbHkgcmlnb3JvdXMgdGVzdGluZyBhbmQsIHBvc3NpYmx5LCB2ZXJzaW9uaW5nIHN0cmF0ZWdpZXMgaWYgY2hhbmdlcyBhcmUgdW5hdm9pZGFibGUuIFRoaXMgYWxsIGFmZmVjdHMgZGVzaWduIGNob2ljZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpcyBhIGZhY3QgdGhhdCBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gYnVpbGQgb2ZmIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzUuMTA2Mzg1NjM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgY2FuX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2FmX2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vYWZfY2FuLmM9NTczPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZWNlaXZlciAqcmN2KVxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy01NzgtXFxubmV0L2Nhbi9hZl9jYW4uYzo1Nzk6c3RhdGljIGludCBjYW5fcmN2X2ZpbHRlcihzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2Nhbi9hZl9jYW4uYy01ODAte1xcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYz02NTQ9c3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jYW4vYWZfY2FuLmMtNjg2LVxcbm5ldC9jYW4vYWZfY2FuLmM6Njg3OnN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jYW4vYWZfY2FuLmMtNjg4LVxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzUuMTUxNDY3NTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUyMjk3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgaW4gdGhlIFN5c3RlbSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGNhbl9yY3ZgLi4uIFRoYXQncyBzdGF0aWMsIGlzbid0IGl0PyBIbW0sIGl0J3MgcmVnaXN0ZXJlZCBhcyBhIHBhY2tldCBoYW5kbGVyLCBzbyB0ZWNobmljYWxseSBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LCBqdXN0IG5vdCBpbiB0aGUgbW9zdCBjb252ZW50aW9uYWwgc2Vuc2UuIFdlIGNvdWxkIGluY2x1ZGUgaXQsIGJ1dCwgZm9yIGNsYXJpdHksIHBlcmhhcHMgaXQgd291bGQgYmUgYmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgb3IsIGV2ZW4gbW9yZSB1c2VmdWxseSwgdGhlIG9uZXMgdGhhdCBhcmUgYWN0dWFsbHkgaW52b2tlZCBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UuIFRoYXQncyB3aGVyZSB3ZSdsbCBmaW5kIHRoZSAqcmVhbCogc3RhcnRpbmcgcG9pbnRzIG9mIGludGVyYWN0aW9uLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGxpc3Qgb2Ygc29ja2V0IG9wZXJhdGlvbnMuLi4gYGJjbV9zZW5kbXNnYCwgYGJjbV9jb25uZWN0YCwgYGNnd19jcmVhdGVfam9iYCwgYGlzb3RwX2JpbmRgLCBgcmF3X2JpbmRgLi4uIFllcCwgdGhvc2UgYXJlIGFsbCByaWdodCBvbiB0aGUgbW9uZXkuIFNvY2tldCBvcGVyYXRpb25zLCBOZXRsaW5rIG9wZXJhdGlvbnMg4oCTIHRob3NlIGFyZSAqZXhhY3RseSogdGhlIGtpbmRzIG9mIGVudHJ5IHBvaW50cyBJJ2QgZXhwZWN0IHRvIHNlZS4gVGhleSBwcm92aWRlIHRoZSBnYXRld2F5IGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLiBXZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2s7IHRob3NlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzkuNDc2Njk5NDcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgYmNtX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9iY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2JjbS5jPTE2MDM9c3RhdGljIGludCBiY21fdHhfc2VuZChzdHJ1Y3QgbXNnaGRyICptc2csIGludCBpZmluZGV4LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY2FuL2JjbS5jLTE2NTEtICovXFxubmV0L2Nhbi9iY20uYzoxNjUyOnN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvY2FuL2JjbS5jLTE2NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTozOS41MjI0MjM3MTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MjEyNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYmNtX3NlbmRtc2dgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHNvY2tldCBvcGVyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpbXBsaWVzIGEgdGlnaHRseSBib3VuZCBvciBzcGVjaWFsaXplZCBjb21tdW5pY2F0aW9uIHBhdGggd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dCwgcHJvYmFibHkgYSBoaWdobHktb3B0aW1pemVkIG9yIGhhcmR3YXJlLXNwZWNpZmljIGFwcHJvYWNoLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gR2l2ZW4gaXRzIHN0YXRpYyBuYXR1cmUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbnN0cmFpbnRzIGluIGl0cyB1c2FnZSBvciBwb3RlbnRpYWwgY2hhbGxlbmdlcyBpbiBtb2RpZmljYXRpb24gaWYgaXQncyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUbyBnZXQgYSBoYW5kbGUgb24gaXQsIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYC4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgZ2l2ZSBzb21lIGltcG9ydGFudCBjb250ZXh0IGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIGBiY21fc2VuZG1zZ2AuIEl0J3MgbGlrZWx5IHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uIHRoYXQgYGJjbV9zZW5kbXNnYCBpcyBtYW5pcHVsYXRpbmcsIHBvdGVudGlhbGx5IGRldGFpbGluZyB0aGUgZGF0YSBmbG93IGFuZCBob3cgaXQncyBoYW5kbGVkIGF0IHRoZSBVU0IgbGV2ZWwuIFRoaXMgY291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCByYXcgQ0FOIG9yIG90aGVyIGluZHVzdHJpYWwgcHJvdG9jb2xzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHJlYWQgYW5kIGhvdyB0aGF0IGRhdGEgZW5kcyB1cCBvbiB0aGUgc29ja2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyNSwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjQzLjc3NDU1NjM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYz0yMTA1PXN0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9mbHVzaF9xdWV1ZShzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMtMjEyNS0gKi9cXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jOjIxMjY6c3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jLTIxMjctXFx0XFx0XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTo0My44MjA4OTA1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU3NjQ2ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IENBTiBOZXR3b3JraW5nIFx1MDAyNiBVU0IgVVJCIENvbXBsZXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB3aGlsZSBpdCBzZWVtcyBzdGF0aWMgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGlzIGFjdHVhbGx5IGEgY2FsbGJhY2sgZm9yIFVTQiBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb21wbGV0aW9uLiBUaGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG15IFVTQiBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0J3MgYSBrZXkgc3BvdCB0byBwcm9iZSB0aGUgQ0FOIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIHNlZS4uLiB3aGF0IGZ1bmN0aW9ucyBhcmUgd2UgbG9va2luZyBhdD8gUmlnaHQsIEkgc2VlOiBgY2FuX3NlbmRgLCBgYmNtX3NlbmRtc2dgLCBgYmNtX2Nvbm5lY3RgLCBgY2d3X2NyZWF0ZV9qb2JgLCBgaXNvdHBfYmluZGAsIGByYXdfYmluZGAsIGFuZCBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBoaXR0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBjYW5fcmN2YCBpcyBhbHNvIHN0YXRpYy4gWXVwLCBpdCBpcy4gQnV0LCBpcyB0aGVyZSBhIGJldHRlciBlbnRyeSBwb2ludD8gQWgsIGBjYW5fcmVjZWl2ZWAgaXMgYWxzbyBzdGF0aWMuIE9rYXksIGBjYW5fcmN2YCBpcyByZWdpc3RlcmVkIHVzaW5nIGBkZXZfYWRkX3BhY2tgLi4uIFRoYXQncyBwZXJmZWN0bHkgZmluZSB0byBpbmNsdWRlIGl0LiBJIHNob3VsZCBhbHNvIGdyYWIgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIGBjYW54bF9yY3ZgIHRvby5cblxuTm93LCB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCBoZXJlPyBMZXQncyBzZWU6IGBDQU5gLCBgQ0FOX0JDTWAsIGBDQU5fR1dgLCBgQ0FOX0lTT1RQYCwgYENBTl9SQVdgLCBhbmQgYENBTl9LVkFTRVJfVVNCYC5cblxuVGhlIGxvZ2ljIGJlaGluZCB0aGlzIHNlbGVjdGlvbiBpcyB0aGF0IHRoZSBwYXRjaCBzZXJpZXMgSSdtIGV4YW1pbmluZyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyBmcm9tIGNoZWNraW5nIGBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCB0byB1c2luZyBgY2FuX2dldF9tbF9wcml2KGRldilgLiBUaGlzIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyBsaWtlIFJBVywgQkNNLCBHVywgYW5kIElTT1RQLiBJdCBhbHNvIGluY2x1ZGVzIGEgZml4IGZvciB0aGUgS3Zhc2VyIFVTQiBkcml2ZXI7IHRoZSBidWxrIHJlYWQgY2FsbGJhY2sgaGFkIGEgYnVnIHJlbGF0ZWQgdG8gcGFydGlhbCBjb21tYW5kcywgdGhhdCBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIGVpdGhlciB2aWEgQ0FOIHNvY2tldHMgb3IgbmV0bGluaywgYW5kIGFsc28gdGhyb3VnaCBVU0IgZW11bGF0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGNsZWFybHkgaGFzIGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwMywiT3V0cHV0VG9rZW5zIjoyNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuNzc4NTM5NzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMzkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0JDTVwiLFxuICAgIFwiQ0FOX0dXXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9SQVdcIixcbiAgICBcIkNBTl9LVkFTRVJfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FuX3NlbmRcIixcbiAgICBcImNhbl9yY3ZcIixcbiAgICBcImNhbmZkX3JjdlwiLFxuICAgIFwiY2FueGxfcmN2XCIsXG4gICAgXCJiY21fc2VuZG1zZ1wiLFxuICAgIFwiYmNtX2Nvbm5lY3RcIixcbiAgICBcImNnd19jcmVhdGVfam9iXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJyYXdfYmluZFwiLFxuICAgIFwia3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBDQU4gbmV0d29ya2luZyB0byB1c2UgYGNhbl9nZXRfbWxfcHJpdihkZXYpYCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJ3MgYnVsayByZWFkIGNhbGxiYWNrIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGNvbW1hbmRzIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ0FOIHNvY2tldHMgYW5kIG5ldGxpbmssIGFzIHdlbGwgYXMgdGhyb3VnaCBVU0IgZW11bGF0aW9uLCBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0JDTVwiLFxuICAgIFwiQ0FOX0dXXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9SQVdcIixcbiAgICBcIkNBTl9LVkFTRVJfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FuX3NlbmRcIixcbiAgICBcImNhbl9yY3ZcIixcbiAgICBcImNhbmZkX3JjdlwiLFxuICAgIFwiY2FueGxfcmN2XCIsXG4gICAgXCJiY21fc2VuZG1zZ1wiLFxuICAgIFwiYmNtX2Nvbm5lY3RcIixcbiAgICBcImNnd19jcmVhdGVfam9iXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJyYXdfYmluZFwiLFxuICAgIFwia3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBDQU4gbmV0d29ya2luZyB0byB1c2UgYGNhbl9nZXRfbWxfcHJpdihkZXYpYCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJ3MgYnVsayByZWFkIGNhbGxiYWNrIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGNvbW1hbmRzIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ0FOIHNvY2tldHMgYW5kIG5ldGxpbmssIGFzIHdlbGwgYXMgdGhyb3VnaCBVU0IgZW11bGF0aW9uLCBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTo1Mi44NTc4ODU4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA2NzYyNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuODU4MzIxMzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4OTA2MzIyMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2YgdmFyaW91cyBidWcgZml4ZXMgYWNyb3NzIHRoZSBDQU4gc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIGZpeGluZyAzMi1iaXQgb3ZlcmZsb3dzIGluIGJpdCB0aW1pbmcgY2FsY3VsYXRpb25zLCByZXBsYWNpbmcgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGZvciBzYWZlIGV4ZWN1dGlvbiBpbiBJUlEgY29udGV4dCwgYWRkaW5nIHNwaW5sb2NrcyB0byBwcm90ZWN0IFRYIHJpbmcgYnVmZmVycyBpbiB0aGUgUm9ja2NoaXAgQ0FOIGRyaXZlciwgZml4aW5nIHRpbWVyIHNodXRkb3duIGluIHRoZSBLdmFzZXIgUENJZSBkcml2ZXIsIGFuZCBpbXByb3ZpbmcgVVNCIGJ1bGsgbWVzc2FnZSBwYXJzaW5nIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb2YgZnJhZ21lbnRlZCBjb21tYW5kcy4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgc2VudCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzLiBUaGUgbW9kaWZpY2F0aW9ucyBwcmltYXJpbHkgYWRkcmVzcyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBleHBvc2VkIGJ5IHRoZXNlIHBhdGNoZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FhNTc4ZGI3MGNhNWYxNjcxNmRkOGNmYzI4NDcxMDViYjZiOTQxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDEyOjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG5pbmRleCA0MjQ5OGU5ZDNmMzhkLi4yNzg5Yjk5YWI2YTgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbkBAIC0xMTksOCArMTE5LDEyIEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0ICAgICB0c2VnIFx1MDAzZT0gKGJ0Yy1cdTAwM2V0c2VnMV9taW4gKyBidGMtXHUwMDNldHNlZzJfbWluKSAqIDI7IHRzZWctLSkge1xuIFx0XHR0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICsgdHNlZyAvIDI7XG4gXG4tXHRcdC8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSt0c2VnMikgKi9cbi1cdFx0YnJwID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC1cdTAwM2ViaXRyYXRlKSArIHRzZWcgJSAyO1xuK1x0XHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpLlxuK1x0XHQgKiBBIDMyIGJpdCB0c2VnYWxsICogYnQtXHUwMDNlYml0cmF0ZSBjYW4gd3JhcCB0byB6ZXJvIGZvciBsYXJnZVxuK1x0XHQgKiB1c2Vyc3BhY2UgYml0cmF0ZXMsIHNvIGNvbXB1dGUgdGhlIHByb2R1Y3QgaW4gNjQgYml0LlxuK1x0XHQgKi9cbitcdFx0YnJwID0gZGl2NjRfdTY0KHByaXYtXHUwMDNlY2xvY2suZnJlcSxcbitcdFx0XHRcdG11bF91MzJfdTMyKHRzZWdhbGwsIGJ0LVx1MDAzZWJpdHJhdGUpKSArIHRzZWcgJSAyO1xuIFxuIFx0XHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXG4gXHRcdGJycCA9IChicnAgLyBidGMtXHUwMDNlYnJwX2luYykgKiBidGMtXHUwMDNlYnJwX2luYztcbkBAIC0xMjgsNyArMTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGJpdHJhdGUgPSBwcml2LVx1MDAzZWNsb2NrLmZyZXEgLyAoYnJwICogdHNlZ2FsbCk7XG4tXHRcdGJpdHJhdGVfZXJyb3IgPSBhYnMoYnQtXHUwMDNlYml0cmF0ZSAtIGJpdHJhdGUpO1xuK1x0XHRiaXRyYXRlX2Vycm9yID0gYWJzX2RpZmYoYnQtXHUwMDNlYml0cmF0ZSwgYml0cmF0ZSk7XG4gXG4gXHRcdC8qIHRzZWcgYnJwIGJpdGVycm9yICovXG4gXHRcdGlmIChiaXRyYXRlX2Vycm9yIFx1MDAzZSBiZXN0X2JpdHJhdGVfZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG5AQCAtNCw2ICs0LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyIFx1MDAzY3dnQGdyYW5kZWdnZXIuY29tXHUwMDNlXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2FuLmhcdTAwM2VcbkBAIC01NCw2ICs1NSw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoaWR4IFx1MDAzZT0gcHJpdi1cdTAwM2VlY2hvX3NrYl9tYXgpIHtcbiBcdFx0bmV0ZGV2X2VycihkZXYsIFwiJXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcblwiLFxuIFx0XHRcdCAgIF9fZnVuY19fLCBpZHgsIHByaXYtXHUwMDNlZWNob19za2JfbWF4KTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNjIsNyArNjQsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIChza2ItXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTkwLDcgKzkyLDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIGxvY2tpbmcgcHJvYmxlbSB3aXRoIG5ldGlmX3N0b3BfcXVldWUoKSA/PyAqL1xuIFx0XHRuZXRkZXZfZXJyKGRldiwgXCIlczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcXG5cIiwgX19mdW5jX18sIGlkeCk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTIyMyw3ICsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIG91dF9lcnJvcl9jYztcbiBcdH1cbiBcbkBAIC0yNTQsNyArMjU2LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG4gXHRpZiAoIWNzeCkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfZmQ7XG4gXHR9XG4gXG5AQCAtMjkyLDcgKzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuIFx0aWYgKCFjc3gpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gb3V0X2Vycm9yX3hsO1xuIFx0fVxuIFxuQEAgLTM4NCw3ICszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBFVEhfUF9DQU5YTDpcbi1cdFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4rXHRcdGlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSlcbiBcdFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdFx0YnJlYWs7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuaW5kZXggZDhjOWJmYjIwMjMwNC4uYTA1OTdkYjcyMDg2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuQEAgLTE3MzksNiArMTczOSw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfdGVhcmRvd25fY2FuX2N0cmxzKHN0cnVjdCBrdmFzZXJfcGNpZWZkICpwY2llKVxuIFx0XHRcdGlvd3JpdGUzMigwLCBjYW4tXHUwMDNlcmVnX2Jhc2UgKyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XG4gXHRcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcbitcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4gXHRcdFx0ZnJlZV9jYW5kZXYoY2FuLVx1MDAzZWNhbi5kZXYpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTg3OSw3ICsxODgwLDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHN0cnVjdCBrdmFzZXJfcGNpZWZkX2NhbiAqY2FuID0gcGNpZS1cdTAwM2VjYW5baV07XG4gXG4gXHRcdHVucmVnaXN0ZXJfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbi1cdFx0dGltZXJfZGVsZXRlKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4rXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5AQCAtOTIxLDYgKzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2VjYW4uZG9fc2V0X21vZGUgPSBya2NhbmZkX3NldF9tb2RlO1xuIFx0cHJpdi1cdTAwM2VjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjtcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuIFxuIFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKG1hdGNoKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuaW5kZXggMjRlODdkYWExZGYwMC4uNTk0MjAyMzNjOTE4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuQEAgLTEwMCwxNCArMTAwLDI1IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXHRpZiAoIXNrYikge1xuK1x0XHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZF91bm1hc2tlZCA9IHByaXYtXHUwMDNldHhfaGVhZDtcbitcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWxfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X3RhaWw7XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZGV2LFxuIFx0XHRcdCAgIFwiJXM6IGVjaG9fc2tiWyV1XT1OVUxMIHR4X2hlYWQ9MHglMDh4IHR4X3RhaWw9MHglMDh4XFxuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18sIHR4X3RhaWwsXG4tXHRcdFx0ICAgcHJpdi1cdTAwM2V0eF9oZWFkLCBwcml2LVx1MDAzZXR4X3RhaWwpO1xuK1x0XHRcdCAgIHR4X2hlYWRfdW5tYXNrZWQsIHR4X3RhaWxfdW5tYXNrZWQpO1xuIFxuIFx0XHRyZXR1cm4gLUVOT01TRztcbiBcdH1cbkBAIC0xMjMsMTcgKzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcdTAwMjZmcmFtZV9sZW4pO1xuIFxuIFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfdGFpbCwgcHJpdi1cdTAwM2V0eF90YWlsICsgMSk7XG4rXHRcdCp0eF9kb25lID0gdHJ1ZTtcbitcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiBcdFx0bmV0aWZfc3VicXVldWVfY29tcGxldGVkX3dha2UocHJpdi1cdTAwM2VuZGV2LCAwLCAxLCBmcmFtZV9sZW4sXG4gXHRcdFx0XHRcdCAgICAgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLFxuIFx0XHRcdFx0XHQgICAgICBSS0NBTkZEX1RYX1NUQVJUX1RIUkVTSE9MRCk7XG4gXG4tXHRcdCp0eF9kb25lID0gdHJ1ZTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoIShwcml2LVx1MDAzZWRldnR5cGVfZGF0YS5xdWlya3MgXHUwMDI2IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBFcnJhdHVtIDY6IEV4dGVuZGVkIGZyYW1lcyBtYXkgYmUgc2VuZCBhcyBzdGFuZGFyZCBmcmFtZXMuXG4gXHQgKlxuQEAgLTE0Myw3ICsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSB8fFxuIFx0ICAgIChjZmRfcngtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSBzdGFuZGFyZCBwYXJ0IGFuZCBSVFIgZmxhZyBvZiB0aGUgVFgnZWQgZnJhbWVcbkBAIC0xNTEsMjAgKzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICgoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSBsZW5ndGggaXMgbm90IHRoZSBzYW1lXG4gXHQgKi9cbiBcdGlmIChjZmRfbm9taW5hbC1cdTAwM2VsZW4gIT0gY2ZkX3J4LVx1MDAzZWxlbilcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gdGhlIGRhdGEgb2Ygbm9uIFJUUiBmcmFtZXMgaXMgZGlmZmVyZW50XG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX1JUUl9GTEFHKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBtZW1jbXAoY2ZkX25vbWluYWwtXHUwMDNlZGF0YSwgY2ZkX3J4LVx1MDAzZWRhdGEsIGNmZF9ub21pbmFsLVx1MDAzZWxlbikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cbiBcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmtjYW5mZF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMTg1LDYgKzE5Nyw5IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcbiBcdHJrY2FuZmRfeG1pdF9yZXRyeShwcml2KTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG5pbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG5AQCAtMTQsNiArMTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4rXG4gXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0zMywxMyArMzUsMjIgQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIFx0cmV0dXJuIGNmZC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRztcbiB9XG4gXG4tdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuK1x0dW5zaWduZWQgaW50IHR4X2ZyZWU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRpZiAocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcmtjYW5mZF90eF90YWlsX2lzX2VmZihwcml2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHR4X2ZyZWUgPSAwO1xuK1x0ZWxzZVxuK1x0XHR0eF9mcmVlID0gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcbiBcbi1cdHJldHVybiBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB0eF9mcmVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG5AQCAtNTcsOCArNjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFxuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuLVx0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuK1x0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuK1x0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X3RhaWwpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbiB9XG5AQCAtNjksNiArODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR1MzIgcmVnX2ZyYW1laW5mbywgcmVnX2lkLCByZWdfY21kO1xuIFx0dW5zaWduZWQgaW50IHR4X2hlYWQsIGZyYW1lX2xlbjtcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBlcnI7XG4gXHR1OCBpO1xuIFxuQEAgLTg4LDcgKzEwMiwxOSBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbi1cdGNmZCA9IChzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1x0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4rXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcbitcdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xuK1x0aWYgKGVycikge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdH1cbitcbitcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xuK1x0Y2ZkID0gKGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0aWYgKGNmZC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRykge1xuIFx0XHRyZWdfZnJhbWVpbmZvID0gUktDQU5GRF9SRUdfRkRfRlJBTUVJTkZPX0ZSQU1FX0ZPUk1BVDtcbkBAIC0xMTQsNyArMTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRcdFx0XHQgICAgY2ZkLVx1MDAzZWxlbik7XG4gXHR9XG4gXG4tXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcbiBcdHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuIFxuIFx0cmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWEZSQU1FSU5GTywgcmVnX2ZyYW1laW5mbyk7XG5AQCAtMTIzLDE0ICsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgKyBpLFxuIFx0XHRcdCAgICAgICoodTMyICopKGNmZC1cdTAwM2VkYXRhICsgaSkpO1xuIFxuLVx0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4tXHRlcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTtcbi1cdGlmICghZXJyKVxuLVx0XHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4rXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4gXG4gXHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF9oZWFkICsgMSk7XG4gXG4gXHRya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiBcbiBcdG5ldGlmX3N1YnF1ZXVlX21heWJlX3N0b3AocHJpdi1cdTAwM2VuZGV2LCAwLFxuIFx0XHRcdFx0ICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbkBAIC0xNDcsNiArMTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4rXG4gXHR0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiBcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X3RhaWxdO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbmluZGV4IDk1YmVhOWJmZDhhMmYuLjJkYzNhNDFhZmUzMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbkBAIC0xNSw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWNvdW50ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXHUwMDNlXG5AQCAtNDc0LDYgKzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYge1xuIFx0c3RydWN0IGNhbl9yeF9vZmZsb2FkIG9mZmxvYWQ7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiBcbitcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi9cbiBcdHZvaWQgX19pb21lbSAqcmVncztcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG5AQCAtNTU2LDcgKzU1OCw3IEBAIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RhcnQoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdG9wKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcF9zeW5jKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbit1bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbkBAIC03ODcsNyArNzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdHJldHVybiAwO1xuIFxuICBvdXRfZnJlZV9pcnE6XG4rXHRwcml2LVx1MDAzZWZvcmNlX3F1aXQgPSAxO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0ZnJlZV9pcnEoc3BpLVx1MDAzZWlycSwgcHJpdik7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0aGkzMTEwX2h3X3NsZWVwKHNwaSk7XG4gIG91dF9jbG9zZTpcbiBcdGhpMzExMF9wb3dlcl9lbmFibGUocHJpdi1cdTAwM2V0cmFuc2NlaXZlciwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmNcbmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0cnVjdCBmODE2MDRfaW50X2RhdGEge1xuIFx0dTggcnhlcnI7XG4gXHR1OCB0eGVycjtcbiBcdHU4IHZhbDtcbi19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTtcbit9IF9fcGFja2VkO1xuIFxuIHN0cnVjdCBmODE2MDRfc2ZmIHtcbiBcdF9fYmUxNiBpZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuaW5kZXggZWZiYjdiZWQzNGM5ZC4uZWZlN2IzZWY0ODliZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbkBAIC01MzYsNiArNTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovXG4rc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHN0cnVjdCBrdmFzZXJfY21kICpjbWQsXG4rXHRcdFx0XHRcdHNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbilcbit7XG4rXHRpZiAocmVtYWluaW5nIFx1MDAzYyBzaXplb2YoY21kLVx1MDAzZWhlYWRlci5jbWRfbm8pKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGlmIChjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgXHUwMDI2XHUwMDI2XG4rXHQgICAgcmVtYWluaW5nIFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuK1x0aWYgKCEqY21kX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuQEAgLTY3NSw4ICs2OTMsOCBAQCBzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfd2FpdF9jbWQoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwgdTggY21kX25vLFxuIFx0XHRcdHNpemVfdCBjbWRfbGVuO1xuIFxuIFx0XHRcdHRtcF9jbWQgPSBidWYgKyBwb3M7XG4tXHRcdFx0Y21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUodG1wX2NtZCk7XG4tXHRcdFx0aWYgKHBvcyArIGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbitcdFx0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHRtcF9jbWQsIGFjdHVhbF9sZW4gLSBwb3MsIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRcdGlmIChlcnIgfHwgcG9zICsgY21kX2xlbiBcdTAwM2UgYWN0dWFsX2xlbikge1xuIFx0XHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0ICAgIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjEyMCwyMyArMjEzOCw0NyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHR1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4gXHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikge1xuK1x0XHRjb25zdCBzaXplX3QgY21kX3NpemVfZmllbGRfZW5kID0gb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KTtcbiBcdFx0aW50IHJlbWFpbmluZ19ieXRlcztcbitcdFx0aW50IGVycjtcbiBcbiBcdFx0Y21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlcjtcbiBcbi1cdFx0Y21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTtcbitcdFx0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVzYl9yeF9sZWZ0b3Zlcl9sZW4gXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xuK1x0XHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KGludCwgbGVuLCBjbWRfc2l6ZV9maWVsZF9lbmQgLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTtcbitcbitcdFx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiwgcmVtYWluaW5nX2J5dGVzKTtcbitcdFx0XHR1c2JfcnhfbGVmdG92ZXJfbGVuICs9IHJlbWFpbmluZ19ieXRlcztcbitcdFx0XHRjYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyX2xlbiA9IHVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4rXHRcdFx0cG9zICs9IHJlbWFpbmluZ19ieXRlcztcbiBcbi1cdFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sXG4rXHRcdFx0aWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4gXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRpZiAoZXJyIHx8IGNtZF9sZW4gXHUwMDNjIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLFxuIFx0XHRcdFx0XHRjbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4gXHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovXG4gXHRcdGlmIChyZW1haW5pbmdfYnl0ZXMgKyB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzZVxuIFx0XHRcdFx0XHRcdEtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4tXHRcdG1lbWNweShjYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyICsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLFxuK1x0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiArIHBvcyxcbiBcdFx0ICAgICAgIHJlbWFpbmluZ19ieXRlcyk7XG4gXHRcdHBvcyArPSByZW1haW5pbmdfYnl0ZXM7XG4gXG5AQCAtMjE1MiwxMSArMjE5NCwxNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiBcbiBcdHdoaWxlIChwb3MgXHUwMDNjIGxlbikge1xuK1x0XHRpbnQgZXJyO1xuK1xuIFx0XHRjbWQgPSBidWYgKyBwb3M7XG4gXG4tXHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XG4rXHRcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCBsZW4gLSBwb3MsIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcIkZvcm1hdCBlcnJvclxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcbi1cdFx0aWYgKHBvcyArIGNtZF9sZW4gXHUwMDNlIGxlbikge1xuK1x0XHRpZiAoZXJyID09IC1FQUdBSU4gfHwgcG9zICsgY21kX2xlbiBcdTAwM2UgbGVuKSB7XG4gXHRcdFx0LyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovXG4gXHRcdFx0aW50IGxlZnRvdmVyX2J5dGVzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbmluZGV4IGE3MGEwMjk2NzA3MTEuLjc4YzU4NzBlMmY5YTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbkBAIC03NiwxMiArNzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4gXHRjYW5fc2tiX3NldF9vd25lcihuc2tiLCBza2ItXHUwMDNlc2spO1xuLVx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiBcdHJldHVybiBuc2tiO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uY1xuaW5kZXggN2JjODZiMTc2YjRkZS4uZWY0MzVmMjJhYzkzMyAxMDA2NDRcbi0tLSBhL25ldC9jYW4vYWZfY2FuLmNcbisrKyBiL25ldC9jYW4vYWZfY2FuLmNcbkBAIC0yMjYsNyArMjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikpIHtcbitcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KHNrYi1cdTAwM2VkZXYpKSkge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gaW52YWxfc2tiO1xuIFx0fVxuQEAgLTQ1Miw3ICs0NTIsNyBAQCBpbnQgY2FuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXG4gXHQvKiBpbnNlcnQgbmV3IHJlY2VpdmVyICAoZGV2LGNhbmlkLG1hc2spIC1cdTAwM2UgKGZ1bmMsZGF0YSkgKi9cbiBcbi1cdGlmIChkZXYgXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpXG4rXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNTE5LDcgKzUxOSw3IEBAIHZvaWQgY2FuX3J4X3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcbiBcdHN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtXHUwMDNlY2FuLnJjdl9saXN0c19zdGF0cztcbiBcdHN0cnVjdCBjYW5fZGV2X3Jjdl9saXN0cyAqZGV2X3Jjdl9saXN0cztcbiBcbi1cdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxuQEAgLTY4Nyw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCBjYW5fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4gXHRcdCAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2Nhbl9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MDMsNyArNzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4gXHRcdCAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbmZkX3NrYihza2IpKSkge1xuIFx0XHRwcl93YXJuX29uY2UoXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwiLFxuIFx0XHRcdCAgICAgZGV2LVx1MDAzZXR5cGUsIHNrYi1cdTAwM2VsZW4pO1xuQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FueGxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBYTCBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uY1xuaW5kZXggM2Q2MzdhMWUwYWMxYS4uNjA0MDY0MzlhMTNmNyAxMDA2NDRcbi0tLSBhL25ldC9jYW4vYmNtLmNcbisrKyBiL25ldC9jYW4vYmNtLmNcbkBAIC01NCw2ICs1NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9iY20uaFx1MDAzZVxuQEAgLTE3MTksNyArMTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG5AQCAtMTg2Nyw3ICsxODY4LDcgQEAgc3RhdGljIGludCBiY21fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbkBAIC0yMDI0LDcgKzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbitcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRyZXQgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gZmFpbDtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2d3LmMgYi9uZXQvY2FuL2d3LmNcbmluZGV4IDBlYzk5ZjY4YWE0NTIuLmQ5OTEyZGVhNzM4YmEgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2d3LmNcbisrKyBiL25ldC9jYW4vZ3cuY1xuQEAgLTUyLDYgKzUyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2d3LmhcdTAwM2VcbkBAIC02MDksNyArNjEwLDcgQEAgc3RhdGljIGludCBjZ3dfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFxuIFx0aWYgKG1zZyA9PSBORVRERVZfVU5SRUdJU1RFUikge1xuQEAgLTExNjAsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlc3JjLmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZXNyYy5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLVx1MDAzZXNyYy5kZXYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGd3ai1cdTAwM2Vkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLVx1MDAzZWNjZ3cuZHN0X2lkeCk7XG5AQCAtMTE2OCw3ICsxMTY5LDcgQEAgc3RhdGljIGludCBjZ3dfY3JlYXRlX2pvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWd3ai1cdTAwM2Vkc3QuZGV2KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChnd2otXHUwMDNlZHN0LmRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXHUwMDNlZHN0LmRldikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogaXMgc2VuZGluZyB0aGUgc2tiIGJhY2sgdG8gdGhlIGluY29taW5nIGludGVyZmFjZSBpbnRlbmRlZD8gKi9cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2lzb3RwLmhcdTAwM2VcbkBAIC0xNjA2LDcgKzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHR9XG5AQCAtMTg5Myw3ICsxODk0LDcgQEAgc3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jXG5pbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xuKysrIGIvbmV0L2Nhbi9yYXcuY1xuQEAgLTM0NCw3ICszNDQsNyBAQCBzdGF0aWMgaW50IHJhd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlblxuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbitcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXRfcHV0X2RldjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuODU4MzIyMzAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4OTA2Mjk2NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNBTiBTdWJzeXN0ZW0gUGF0Y2ggU2VyaWVzIFJldmlldzogVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBDQU4gc3Vic3lzdGVtIHBhdGNoIHNlcmllcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBmb2N1cyBteSBhbmFseXNpcy4gSSd2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgY2hhbmdlZCBmaWxlcyBjYXJlZnVsbHkuXG5cbkZpcnN0IHVwLCBgY2FsY19iaXR0aW1pbmcuY2AgdXNlcyBgZGl2NjRfdTY0YCBhbmQgYG11bF91MzJfdTMyYCB0byBhdm9pZCAzMi1iaXQgb3ZlcmZsb3dzIGFuZCB0aGUgYGFic19kaWZmYCBtYWNyby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgdGhlcmU7IHRoaXMgaXMgZ29vZCwgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGVuLCBgc2tiLmNgIHN3aXRjaGVzIHRvIGBkZXZfa2ZyZWVfc2tiX2FueWAgYW5kIGFkZHMgYSBjaGVjayBmb3IgQ0FOX0NBUF9YTC4gU291bmRzIGxpa2UgYSBzdGFuZGFyZCBTS0IgY2xlYW51cC9zYWZldHkgaW1wcm92ZW1lbnQsIG5vdCBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5ga3Zhc2VyX3BjaWVmZF9jb3JlLmNgIHJlcGxhY2VzIGB0aW1lcl9kZWxldGVgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmNgLiBGaW5lLiBObyBwcm9ibGVtLlxuXG5JbiB0aGUgYHJvY2tjaGlwX2NhbmZkYCBmaWxlcywgd2Ugc2VlIGBzcGluX2xvY2tfaW5pdGAgYW5kIHByb3RlY3RlZCBhY2Nlc3NlcyBmb3IgdGhlIFRYIHBhdGguIFRoaXMgaXMgYWxsIGFib3V0IHRocmVhZCBzYWZldHksIGJ1dCB0aGVyZSdzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbmBoaTMxMXguY2AgYWRkcyBhIGBmb3JjZV9xdWl0YCBmbGFnIGFuZCBtdXRleCBwcm90ZWN0aW9uIGFyb3VuZCBgZnJlZV9pcnFgLiBBZ2FpbiwgdGhpcyBsb29rcyBsaWtlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgbG9ja2luZywgbm90IHVuaW5pdGlhbGl6ZWQgZGF0YSBpc3N1ZXMuXG5cblRoZSByZW1vdmFsIG9mIGBfX2FsaWduZWQoNClgIGZyb20gYGY4MTYwNC5jYCdzIGBpbnRfZGF0YWAgc3RydWN0dXJlIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlIHJlbW92aW5nIGFsaWdubWVudCwgbm90IGludHJvZHVjaW5nIG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0cy5cblxuTm93LCB0aGUgYGt2YXNlcl91c2JfaHlkcmEuY2AgY2hhbmdlcyBhcmUgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYCBmdW5jdGlvbi4gSSBoYWQgYSBkZWVwZXIgbG9vaywgc3BlY2lmaWNhbGx5IGF0IHRoZSBjaGFuZ2VzIHRvIGhvdyBpdCBoYW5kbGVzIGNvbW1hbmQgZnJhZ21lbnRhdGlvbi4gSXQgYWRkcyBzaXplIGNoZWNrcywgY29waWVzIGRhdGEgaW50byBgdXNiX3J4X2xlZnRvdmVyYCwgYW5kIHZlcmlmaWVzIHRoYXQgaXQgZG9lc24ndCByZWFkIG91dCBvZiBib3VuZHMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uICpyZWNlaXZlcyogZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlLiBUaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaXRzZWxmLCBvciBpcyB0aGUgZGV2aWNlJ3MgcmVzcG9uc2liaWxpdHksIGFuZCBpcyBiZWluZyB3cml0dGVuIGludG8gdGhlIGJ1ZmZlci4gSWYgdGhlIGRldmljZSBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGRhdGEsIHdlIG5vdyBnZXQgYC1FQUdBSU5gIGluc3RlYWQgb2YgcG90ZW50aWFsbHkgcmVhZGluZyBnYXJiYWdlLiBUaGlzIGlzIGdvb2Q6IHRoZSBkYXRhIGNvbWVzIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlLCB3aGljaCBtYWtlcyBpdCBzYWZlLlxuXG5UaGUgY2hhbmdlcyBpbiBgc2tiLmhgIGFyZSBqdXN0IG1vcmUgU0tCIG1hbmFnZW1lbnQgdXBkYXRlcyAodXNpbmcgYGRldl9rZnJlZV9za2JfYW55YCBhbmQgYGRldl9jb25zdW1lX3NrYl9hbnlgKSwgc2FmZS5cblxuRmluYWxseSwgdGhlIGBhZl9jYW4uY2AsIGBiY20uY2AsIGBndy5jYCwgYGlzb3RwLmNgLCBhbmQgYHJhdy5jYCB1cGRhdGVzIHVzaW5nIGAhY2FuX2dldF9tbF9wcml2KGRldilgIGRvbid0IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5Tbywgb3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGxvY2tpbmcgZml4ZXMsIGJvdW5kcyBjaGVja3MsIDMyLWJpdCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhIHRpbWVyIHNodXRkb3duLCBhbmQgaW1wcm92ZWQgVVNCIGNvbW1hbmQgaGFuZGxpbmcuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIFVTQiBjaGFuZ2VzIGNhcmVmdWxseSBoYW5kbGUgdGhlIGRhdGEgY29taW5nICpmcm9tKiB0aGUgZGV2aWNlLiBUaGUgQ0FOIGNoYW5nZXMgZGVhbCB3aXRoIHRoZSB2ZXJ5IG1hdHVyZSBTS0IgbWFuYWdlbWVudCBhbmQgY29ycmVjdCBsb2NraW5nL3N5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgZmluZS5cblxuVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvICpub3QqIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MgdGhhdCBtaWdodCBjcm9wIHVwLiBUaGlzIGlzIGEgc29saWQgcGF0Y2ggc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2OCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzI6MTEuNzY0NjIyNDg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2YgdmFyaW91cyBidWcgZml4ZXMgYWNyb3NzIHRoZSBDQU4gc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIGZpeGluZyAzMi1iaXQgb3ZlcmZsb3dzIGluIGJpdCB0aW1pbmcgY2FsY3VsYXRpb25zLCByZXBsYWNpbmcgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGZvciBzYWZlIGV4ZWN1dGlvbiBpbiBJUlEgY29udGV4dCwgYWRkaW5nIHNwaW5sb2NrcyB0byBwcm90ZWN0IFRYIHJpbmcgYnVmZmVycyBpbiB0aGUgUm9ja2NoaXAgQ0FOIGRyaXZlciwgZml4aW5nIHRpbWVyIHNodXRkb3duIGluIHRoZSBLdmFzZXIgUENJZSBkcml2ZXIsIGFuZCBpbXByb3ZpbmcgVVNCIGJ1bGsgbWVzc2FnZSBwYXJzaW5nIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb2YgZnJhZ21lbnRlZCBjb21tYW5kcy4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgc2VudCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzLiBUaGUgbW9kaWZpY2F0aW9ucyBwcmltYXJpbHkgYWRkcmVzcyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBleHBvc2VkIGJ5IHRoZXNlIHBhdGNoZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 12:18:15 +0000 UTC FinishedAt: 2026-08-26 12:32:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_BCM", "CAN_GW", "CAN_ISOTP", "CAN_RAW", "CAN_KVASER_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dc4b95b8fee95113587e93ca116356032d271371", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_BCM", "CAN_GW", "CAN_ISOTP", "CAN_RAW", "CAN_KVASER_USB" ], "series_id": "e0216bb3-ea73-4223-b89f-2361d36b8790" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "can_send", "can_rcv", "canfd_rcv", "canxl_rcv", "bcm_sendmsg", "bcm_connect", "cgw_create_job", "isotp_bind", "raw_bind", "kvaser_usb_hydra_read_bulk_callback" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0JDTSYjMzQ7LAogICAgJiMzNDtDQU5fR1cmIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O0NBTl9SQVcmIzM0OywKICAgICYjMzQ7Q0FOX0tWQVNFUl9VU0ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjYW5fc2VuZCYjMzQ7LAogICAgJiMzNDtjYW5fcmN2JiMzNDssCiAgICAmIzM0O2NhbmZkX3JjdiYjMzQ7LAogICAgJiMzNDtjYW54bF9yY3YmIzM0OywKICAgICYjMzQ7YmNtX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7YmNtX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7Y2d3X2NyZWF0ZV9qb2ImIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtyYXdfYmluZCYjMzQ7LAogICAgJiMzNDtrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBjb25zaXN0cyBvZiB2YXJpb3VzIGJ1ZyBmaXhlcyBhY3Jvc3MgdGhlIENBTiBzdWJzeXN0ZW0uIFRoZXNlIGluY2x1ZGUgZml4aW5nIDMyLWJpdCBvdmVyZmxvd3MgaW4gYml0IHRpbWluZyBjYWxjdWxhdGlvbnMsIHJlcGxhY2luZyBga2ZyZWVfc2tiYCB3aXRoIGBkZXZfa2ZyZWVfc2tiX2FueWAgZm9yIHNhZmUgZXhlY3V0aW9uIGluIElSUSBjb250ZXh0LCBhZGRpbmcgc3BpbmxvY2tzIHRvIHByb3RlY3QgVFggcmluZyBidWZmZXJzIGluIHRoZSBSb2NrY2hpcCBDQU4gZHJpdmVyLCBmaXhpbmcgdGltZXIgc2h1dGRvd24gaW4gdGhlIEt2YXNlciBQQ0llIGRyaXZlciwgYW5kIGltcHJvdmluZyBVU0IgYnVsayBtZXNzYWdlIHBhcnNpbmcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBvZiBmcmFnbWVudGVkIGNvbW1hbmRzLiBOb25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucyBzZW50IHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCB2YXJpYWJsZXMsIG9yIGluZm8tbGVha3MuIFRoZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBhZGRyZXNzIGxvZ2ljIGVycm9ycywgcmFjZSBjb25kaXRpb25zLCBhbmQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIHdlbGwgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgTE9DS0RFUCwgYW5kIFVCU0FOLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGV4cG9zZWQgYnkgdGhlc2UgcGF0Y2hlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgQ0FOIG5ldHdvcmtpbmcgdG8gdXNlIGBjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW5zdGVhZCBvZiBjaGVja2luZyBgZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJiMzOTtzIGJ1bGsgcmVhZCBjYWxsYmFjayB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBjb21tYW5kcyBhbmQgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENBTiBzb2NrZXRzIGFuZCBuZXRsaW5rLCBhcyB3ZWxsIGFzIHRocm91Z2ggVVNCIGVtdWxhdGlvbiwgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbmluZGV4IDQyNDk4ZTlkM2YzOGQuLjI3ODliOTlhYjZhODMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuQEAgLTExOSw4ICYjNDM7MTE5LDEyIEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0ICAgICB0c2VnIFx1MDAzZT0gKGJ0Yy1cdTAwM2V0c2VnMV9taW4gJiM0MzsgYnRjLVx1MDAzZXRzZWcyX21pbikgKiAyOyB0c2VnLS0pIHtcbiBcdFx0dHNlZ2FsbCA9IENBTl9TWU5DX1NFRyAmIzQzOyB0c2VnIC8gMjtcbiBcbi1cdFx0LyogQ29tcHV0ZSBhbGwgcG9zc2libGUgdHNlZyBjaG9pY2VzICh0c2VnPXRzZWcxJiM0Mzt0c2VnMikgKi9cbi1cdFx0YnJwID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC1cdTAwM2ViaXRyYXRlKSAmIzQzOyB0c2VnICUgMjtcbiYjNDM7XHRcdC8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpLlxuJiM0MztcdFx0ICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LVx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcbiYjNDM7XHRcdCAqIHVzZXJzcGFjZSBiaXRyYXRlcywgc28gY29tcHV0ZSB0aGUgcHJvZHVjdCBpbiA2NCBiaXQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGJycCA9IGRpdjY0X3U2NChwcml2LVx1MDAzZWNsb2NrLmZyZXEsXG4mIzQzO1x0XHRcdFx0bXVsX3UzMl91MzIodHNlZ2FsbCwgYnQtXHUwMDNlYml0cmF0ZSkpICYjNDM7IHRzZWcgJSAyO1xuIFxuIFx0XHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXG4gXHRcdGJycCA9IChicnAgLyBidGMtXHUwMDNlYnJwX2luYykgKiBidGMtXHUwMDNlYnJwX2luYztcbkBAIC0xMjgsNyAmIzQzOzEzMiw3IEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRiaXRyYXRlID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpO1xuLVx0XHRiaXRyYXRlX2Vycm9yID0gYWJzKGJ0LVx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcbiYjNDM7XHRcdGJpdHJhdGVfZXJyb3IgPSBhYnNfZGlmZihidC1cdTAwM2ViaXRyYXRlLCBiaXRyYXRlKTtcbiBcbiBcdFx0LyogdHNlZyBicnAgYml0ZXJyb3IgKi9cbiBcdFx0aWYgKGJpdHJhdGVfZXJyb3IgXHUwMDNlIGJlc3RfYml0cmF0ZV9lcnJvcilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuaW5kZXggOTVmY2RjMTAyNmY4MC4uZmFhZmIxMDMzZDQyMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbkBAIC00LDYgJiM0Mzs0LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyIFx1MDAzY3dnQGdyYW5kZWdnZXIuY29tXHUwMDNlXG4gICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2Nhbi5oXHUwMDNlXG5AQCAtNTQsNiAmIzQzOzU1LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChpZHggXHUwMDNlPSBwcml2LVx1MDAzZWVjaG9fc2tiX21heCkge1xuIFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcblwmIzM0OyxcbiBcdFx0XHQgICBfX2Z1bmNfXywgaWR4LCBwcml2LVx1MDAzZWVjaG9fc2tiX21heCk7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbkBAIC02Miw3ICYjNDM7NjQsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIChza2ItXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MCw3ICYjNDM7OTIsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fSBlbHNlIHtcbiBcdFx0LyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovXG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDslczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG5AQCAtMjIzLDcgJiM0MzsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfY2M7XG4gXHR9XG4gXG5AQCAtMjU0LDcgJiM0MzsyNTYsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfZmQ7XG4gXHR9XG4gXG5AQCAtMjkyLDcgJiM0MzsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfeGw7XG4gXHR9XG4gXG5AQCAtMzg0LDcgJiM0MzszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBFVEhfUF9DQU5YTDpcbi1cdFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4mIzQzO1x0XHRpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4gXHRcdFx0Z290byBpbnZhbF9za2I7XG4gXHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbkBAIC0xNzM5LDYgJiM0MzsxNzM5LDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF90ZWFyZG93bl9jYW5fY3RybHMoc3RydWN0IGt2YXNlcl9wY2llZmQgKnBjaWUpXG4gXHRcdFx0aW93cml0ZTMyKDAsIGNhbi1cdTAwM2VyZWdfYmFzZSAmIzQzOyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XG4gXHRcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcbiYjNDM7XHRcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuIFx0XHRcdGZyZWVfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE4NzksNyAmIzQzOzE4ODAsNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0c3RydWN0IGt2YXNlcl9wY2llZmRfY2FuICpjYW4gPSBwY2llLVx1MDAzZWNhbltpXTtcbiBcbiBcdFx0dW5yZWdpc3Rlcl9jYW5kZXYoY2FuLVx1MDAzZWNhbi5kZXYpO1xuLVx0XHR0aW1lcl9kZWxldGUoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiYjNDM7XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5AQCAtOTIxLDYgJiM0Mzs5MjEsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHByaXYtXHUwMDNlY2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTtcbiBcdHByaXYtXHUwMDNlY2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7XG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4gXG4gXHRtYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXHRpZiAobWF0Y2gpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG5pbmRleCAyNGU4N2RhYTFkZjAwLi41OTQyMDIzM2M5MTg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG5AQCAtMTAwLDE0ICYjNDM7MTAwLDI1IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSlcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXHRpZiAoIXNrYikge1xuJiM0MztcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X2hlYWQ7XG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtXHUwMDNldHhfdGFpbDtcbiYjNDM7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5kZXYsXG4gXHRcdFx0ICAgXCYjMzQ7JXM6IGVjaG9fc2tiWyV1XT1OVUxMIHR4X2hlYWQ9MHglMDh4IHR4X3RhaWw9MHglMDh4XFxuXCYjMzQ7LFxuIFx0XHRcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxuLVx0XHRcdCAgIHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7XHRcdFx0ICAgdHhfaGVhZF91bm1hc2tlZCwgdHhfdGFpbF91bm1hc2tlZCk7XG4gXG4gXHRcdHJldHVybiAtRU5PTVNHO1xuIFx0fVxuQEAgLTEyMywxNyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcdTAwMjZmcmFtZV9sZW4pO1xuIFxuIFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfdGFpbCwgcHJpdi1cdTAwM2V0eF90YWlsICYjNDM7IDEpO1xuJiM0MztcdFx0KnR4X2RvbmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXHRcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXHUwMDNlbmRldiwgMCwgMSwgZnJhbWVfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbiBcdFx0XHRcdFx0ICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpO1xuIFxuLVx0XHQqdHhfZG9uZSA9IHRydWU7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0aWYgKCEocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy5cbiBcdCAqXG5AQCAtMTQzLDcgJiM0MzsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSB8fFxuIFx0ICAgIChjZmRfcngtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJiMzOTtlZCBmcmFtZVxuQEAgLTE1MSwyMCAmIzQzOzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICgoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZVxuIFx0ICovXG4gXHRpZiAoY2ZkX25vbWluYWwtXHUwMDNlbGVuICE9IGNmZF9yeC1cdTAwM2VsZW4pXG4tXHRcdHJldHVybiAwO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnRcbiBcdCAqL1xuIFx0aWYgKCEoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fUlRSX0ZMQUcpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG1lbWNtcChjZmRfbm9taW5hbC1cdTAwM2VkYXRhLCBjZmRfcngtXHUwMDNlZGF0YSwgY2ZkX25vbWluYWwtXHUwMDNlbGVuKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cbiBcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmtjYW5mZF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMTg1LDYgJiM0MzsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXG4gXHRya2NhbmZkX3htaXRfcmV0cnkocHJpdik7XG4gXG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuaW5kZXggMTIyMDBkY2ZkMzM4OS4uYjM2NzM0MWRkMGFlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuQEAgLTE0LDYgJiM0MzsxNCw4IEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiBcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4mIzQzO1xuIFx0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMzMsMTMgJiM0MzszNSwyMiBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gY2ZkLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHO1xuIH1cbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiYjNDM7dW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdGlmIChwcml2LVx1MDAzZWRldnR5cGVfZGF0YS5xdWlya3MgXHUwMDI2IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNiBcdTAwMjZcdTAwMjZcbiBcdCAgICBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKHByaXYpKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHR4X2ZyZWUgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHR4X2ZyZWUgPSBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpO1xuIFxuLVx0cmV0dXJuIHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHR4X2ZyZWU7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbkBAIC01Nyw4ICYjNDM7NjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFxuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuLVx0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuJiM0MztcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiYjNDM7XHRjb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XG4gfVxuQEAgLTY5LDYgJiM0Mzs4Miw3IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7XG4gXHR1bnNpZ25lZCBpbnQgdHhfaGVhZCwgZnJhbWVfbGVuO1xuIFx0Y29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICpjZmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBlcnI7XG4gXHR1OCBpO1xuIFxuQEAgLTg4LDcgJiM0MzsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG4tXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVx1MDAzZWRhdGE7XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4mIzQzO1x0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4mIzQzO1x0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xuJiM0MztcdGNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdGlmIChjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHtcbiBcdFx0cmVnX2ZyYW1laW5mbyA9IFJLQ0FORkRfUkVHX0ZEX0ZSQU1FSU5GT19GUkFNRV9GT1JNQVQ7XG5AQCAtMTE0LDcgJiM0MzsxNDAsNiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdFx0XHRcdCAgICBjZmQtXHUwMDNlbGVuKTtcbiBcdH1cbiBcbi1cdHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuIFx0cmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7XG4gXG4gXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTtcbkBAIC0xMjMsMTQgJiM0MzsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgJiM0MzsgaSxcbiBcdFx0XHQgICAgICAqKHUzMiAqKShjZmQtXHUwMDNlZGF0YSAmIzQzOyBpKSk7XG4gXG4tXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcbi1cdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xuLVx0aWYgKCFlcnIpXG4tXHRcdG5ldGRldl9zZW50X3F1ZXVlKHByaXYtXHUwMDNlbmRldiwgZnJhbWVfbGVuKTtcbiYjNDM7XHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4gXG4gXHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF9oZWFkICYjNDM7IDEpO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuIFxuIFx0bmV0aWZfc3VicXVldWVfbWF5YmVfc3RvcChwcml2LVx1MDAzZW5kZXYsIDAsXG4gXHRcdFx0XHQgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLFxuQEAgLTE0Nyw2ICYjNDM7MTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuJiM0MztcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmggYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTQ3NCw2ICYjNDM7NDc1LDcgQEAgc3RydWN0IHJrY2FuZmRfcHJpdiB7XG4gXHRzdHJ1Y3QgY2FuX3J4X29mZmxvYWQgb2ZmbG9hZDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuIFxuJiM0MztcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi9cbiBcdHZvaWQgX19pb21lbSAqcmVncztcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG5AQCAtNTU2LDcgJiM0Mzs1NTgsNyBAQCB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0YXJ0KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4mIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG5pbmRleCBhZTkwZTY3MTZkZTViLi4yYmU4NTFlODkwN2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuQEAgLTc4Nyw3ICYjNDM7Nzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdHJldHVybiAwO1xuIFxuICBvdXRfZnJlZV9pcnE6XG4mIzQzO1x0cHJpdi1cdTAwM2Vmb3JjZV9xdWl0ID0gMTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VoaTMxMTBfbG9jayk7XG4gXHRmcmVlX2lycShzcGktXHUwMDNlaXJxLCBwcml2KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0aGkzMTEwX2h3X3NsZWVwKHNwaSk7XG4gIG91dF9jbG9zZTpcbiBcdGhpMzExMF9wb3dlcl9lbmFibGUocHJpdi1cdTAwM2V0cmFuc2NlaXZlciwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmNcbmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5AQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHtcbiBcdHU4IHJ4ZXJyO1xuIFx0dTggdHhlcnI7XG4gXHR1OCB2YWw7XG4tfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4mIzQzO30gX19wYWNrZWQ7XG4gXG4gc3RydWN0IGY4MTYwNF9zZmYge1xuIFx0X19iZTE2IGlkO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG5pbmRleCBlZmJiN2JlZDM0YzlkLi5lZmU3YjNlZjQ4OWJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuQEAgLTUzNiw2ICYjNDM7NTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qIC1FQUdBSU4gbWVhbnMgaW5jb21wbGV0ZTsgLUVJTlZBTCByZWplY3RzIHplcm8gdG8gZW5zdXJlIHByb2dyZXNzLiAqL1xuJiM0MztzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0XHRcdHNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbilcbiYjNDM7e1xuJiM0MztcdGlmIChyZW1haW5pbmcgXHUwMDNjIHNpemVvZihjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubykpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcmVtYWluaW5nIFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxuJiM0MztcdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1xuJiM0MztcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdGlmICghKmNtZF9sZW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuQEAgLTY3NSw4ICYjNDM7NjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubyxcbiBcdFx0XHRzaXplX3QgY21kX2xlbjtcbiBcbiBcdFx0XHR0bXBfY21kID0gYnVmICYjNDM7IHBvcztcbi1cdFx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZSh0bXBfY21kKTtcbi1cdFx0XHRpZiAocG9zICYjNDM7IGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbiYjNDM7XHRcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbiYjNDM7XHRcdFx0aWYgKGVyciB8fCBwb3MgJiM0MzsgY21kX2xlbiBcdTAwM2UgYWN0dWFsX2xlbikge1xuIFx0XHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0ICAgIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4gXHRcdFx0XHRicmVhaztcbkBAIC0yMTIwLDIzICYjNDM7MjEzOCw0NyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHR1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4gXHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikge1xuJiM0MztcdFx0Y29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7XG4gXHRcdGludCByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRpbnQgZXJyO1xuIFxuIFx0XHRjbWQgPSAoc3RydWN0IGt2YXNlcl9jbWQgKiljYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdFx0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbiYjNDM7XHRcdFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QoaW50LCBsZW4sIGNtZF9zaXplX2ZpZWxkX2VuZCAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xuJiM0MztcbiYjNDM7XHRcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLCByZW1haW5pbmdfYnl0ZXMpO1xuJiM0MztcdFx0XHR1c2JfcnhfbGVmdG92ZXJfbGVuICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gdXNiX3J4X2xlZnRvdmVyX2xlbjtcbiYjNDM7XHRcdFx0cG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4gXG4tXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuJiM0MztcdFx0XHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2MgY21kX3NpemVfZmllbGRfZW5kKSB7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgXHUwMDI2Y21kX2xlbik7XG4mIzQzO1x0XHRpZiAoZXJyIHx8IGNtZF9sZW4gXHUwMDNjIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLFxuIFx0XHRcdFx0XHRjbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4gXHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovXG4gXHRcdGlmIChyZW1haW5pbmdfYnl0ZXMgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2VcbiBcdFx0XHRcdFx0XHRLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwmIzM0O0Zvcm1hdCBlcnJvclxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsXG4mIzQzO1x0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYgJiM0MzsgcG9zLFxuIFx0XHQgICAgICAgcmVtYWluaW5nX2J5dGVzKTtcbiBcdFx0cG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7XG4gXG5AQCAtMjE1MiwxMSAmIzQzOzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXG4gXHR3aGlsZSAocG9zIFx1MDAzYyBsZW4pIHtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuIFx0XHRjbWQgPSBidWYgJiM0MzsgcG9zO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuJiM0MztcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIGxlbiAtIHBvcywgXHUwMDI2Y21kX2xlbik7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCYjMzQ7Rm9ybWF0IGVycm9yXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFxuLVx0XHRpZiAocG9zICYjNDM7IGNtZF9sZW4gXHUwMDNlIGxlbikge1xuJiM0MztcdFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyAmIzQzOyBjbWRfbGVuIFx1MDAzZSBsZW4pIHtcbiBcdFx0XHQvKiBXZSBnb3QgZmlyc3QgcGFydCBvZiBhIGNvbW1hbmQgKi9cbiBcdFx0XHRpbnQgbGVmdG92ZXJfYnl0ZXM7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuaW5kZXggYTcwYTAyOTY3MDcxMS4uNzhjNTg3MGUyZjlhMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuQEAgLTc2LDEyICYjNDM7NzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuIFx0Y2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLVx1MDAzZXNrKTtcbi1cdGNvbnN1bWVfc2tiKHNrYik7XG4mIzQzO1x0ZGV2X2NvbnN1bWVfc2tiX2FueShza2IpO1xuIFx0cmV0dXJuIG5za2I7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jXG5pbmRleCA3YmM4NmIxNzZiNGRlLi5lZjQzNWYyMmFjOTMzIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9hZl9jYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9hZl9jYW4uY1xuQEAgLTIyNiw3ICYjNDM7MjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXHUwMDNlZGV2KSkpIHtcbiBcdFx0ZXJyID0gLUVQRVJNO1xuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbkBAIC00NTIsNyAmIzQzOzQ1Miw3IEBAIGludCBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcbiBcbiBcdC8qIGluc2VydCBuZXcgcmVjZWl2ZXIgIChkZXYsY2FuaWQsbWFzaykgLVx1MDAzZSAoZnVuYyxkYXRhKSAqL1xuIFxuLVx0aWYgKGRldiBcdTAwMjZcdTAwMjYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpKSlcbiYjNDM7XHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNTE5LDcgJiM0Mzs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXHRzdHJ1Y3QgY2FuX3Jjdl9saXN0c19zdGF0cyAqcmN2X2xpc3RzX3N0YXRzID0gbmV0LVx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XG4gXHRzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7XG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNjg3LDcgJiM0Mzs2ODcsNyBAQCBzdGF0aWMgdm9pZCBjYW5fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuJiM0MztcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcbiBcdFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuZmRfc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MTksNyAmIzQzOzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgZGV2LVx1MDAzZXR5cGUsIHNrYi1cdTAwM2VsZW4pO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vYmNtLmMgYi9uZXQvY2FuL2JjbS5jXG5pbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9iY20uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9iY20uY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vYmNtLmhcdTAwM2VcbkBAIC0xNzE5LDcgJiM0MzsxNzIwLDcgQEAgc3RhdGljIGludCBiY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdFx0Z290byBvdXRfcmVsZWFzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG5AQCAtMTg2Nyw3ICYjNDM7MTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTIwMjQsNyAmIzQzOzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9ndy5jIGIvbmV0L2Nhbi9ndy5jXG5pbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9ndy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2d3LmNcbkBAIC01Miw2ICYjNDM7NTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2d3LmhcdTAwM2VcbkBAIC02MDksNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbiYjNDM7XHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXG4gXHRpZiAobXNnID09IE5FVERFVl9VTlJFR0lTVEVSKSB7XG5AQCAtMTE2MCw3ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlc3JjLmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZXNyYy5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cdTAwM2VzcmMuZGV2KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRnd2otXHUwMDNlZHN0LmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGd3ai1cdTAwM2VjY2d3LmRzdF9pZHgpO1xuQEAgLTExNjgsNyAmIzQzOzExNjksNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZ3dqLVx1MDAzZWRzdC5kZXYpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGd3ai1cdTAwM2Vkc3QuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbiYjNDM7XHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXHUwMDNlZHN0LmRldikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogaXMgc2VuZGluZyB0aGUgc2tiIGJhY2sgdG8gdGhlIGluY29taW5nIGludGVyZmFjZSBpbnRlbmRlZD8gKi9cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vaXNvdHAuaFx1MDAzZVxuQEAgLTE2MDYsNyAmIzQzOzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4mIzQzO1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dF9wdXRfZGV2O1xuIFx0fVxuQEAgLTE4OTMsNyAmIzQzOzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuJiM0MztcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jXG5pbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9yYXcuY1xuQEAgLTM0NCw3ICYjNDM7MzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4mIzQzO1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcdTAwMjZcdTAwMjYgbXNnICE9IE5FVERFVl9ET1dOKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG5AQCAtNDg3LDcgJiM0Mzs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlblxuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbiYjNDM7XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0FOJiMzNDssCiAgICAmIzM0O0NBTl9CQ00mIzM0OywKICAgICYjMzQ7Q0FOX0dXJiMzNDssCiAgICAmIzM0O0NBTl9JU09UUCYjMzQ7LAogICAgJiMzNDtDQU5fUkFXJiMzNDssCiAgICAmIzM0O0NBTl9LVkFTRVJfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2FuX3NlbmQmIzM0OywKICAgICYjMzQ7Y2FuX3JjdiYjMzQ7LAogICAgJiMzNDtjYW5mZF9yY3YmIzM0OywKICAgICYjMzQ7Y2FueGxfcmN2JiMzNDssCiAgICAmIzM0O2JjbV9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2JjbV9jb25uZWN0JiMzNDssCiAgICAmIzM0O2Nnd19jcmVhdGVfam9iJiMzNDssCiAgICAmIzM0O2lzb3RwX2JpbmQmIzM0OywKICAgICYjMzQ7cmF3X2JpbmQmIzM0OywKICAgICYjMzQ7a3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIGNvcmUgQ0FOIG5ldHdvcmtpbmcgdG8gdXNlIGBjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW5zdGVhZCBvZiBjaGVja2luZyBgZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJiMzOTtzIGJ1bGsgcmVhZCBjYWxsYmFjayB0byBwcm9wZXJseSBoYW5kbGUgcGFydGlhbCBjb21tYW5kcyBhbmQgcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIENBTiBzb2NrZXRzIGFuZCBuZXRsaW5rLCBhcyB3ZWxsIGFzIHRocm91Z2ggVVNCIGVtdWxhdGlvbiwgYW5kIGhhdmUgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYwppbmRleCA0MjQ5OGU5ZDNmMzhkLi4yNzg5Yjk5YWI2YTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jCkBAIC0xMTksOCAmIzQzOzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwKIAkgICAgIHRzZWcgJmd0Oz0gKGJ0Yy0mZ3Q7dHNlZzFfbWluICYjNDM7IGJ0Yy0mZ3Q7dHNlZzJfbWluKSAqIDI7IHRzZWctLSkgewogCQl0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICYjNDM7IHRzZWcgLyAyOwogCi0JCS8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpICovCi0JCWJycCA9IHByaXYtJmd0O2Nsb2NrLmZyZXEgLyAodHNlZ2FsbCAqIGJ0LSZndDtiaXRyYXRlKSAmIzQzOyB0c2VnICUgMjsKJiM0MzsJCS8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSYjNDM7dHNlZzIpLgomIzQzOwkJICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LSZndDtiaXRyYXRlIGNhbiB3cmFwIHRvIHplcm8gZm9yIGxhcmdlCiYjNDM7CQkgKiB1c2Vyc3BhY2UgYml0cmF0ZXMsIHNvIGNvbXB1dGUgdGhlIHByb2R1Y3QgaW4gNjQgYml0LgomIzQzOwkJICovCiYjNDM7CQlicnAgPSBkaXY2NF91NjQocHJpdi0mZ3Q7Y2xvY2suZnJlcSwKJiM0MzsJCQkJbXVsX3UzMl91MzIodHNlZ2FsbCwgYnQtJmd0O2JpdHJhdGUpKSAmIzQzOyB0c2VnICUgMjsKIAogCQkvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovCiAJCWJycCA9IChicnAgLyBidGMtJmd0O2JycF9pbmMpICogYnRjLSZndDticnBfaW5jOwpAQCAtMTI4LDcgJiM0MzsxMzIsNyBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwKIAkJCWNvbnRpbnVlOwogCiAJCWJpdHJhdGUgPSBwcml2LSZndDtjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpOwotCQliaXRyYXRlX2Vycm9yID0gYWJzKGJ0LSZndDtiaXRyYXRlIC0gYml0cmF0ZSk7CiYjNDM7CQliaXRyYXRlX2Vycm9yID0gYWJzX2RpZmYoYnQtJmd0O2JpdHJhdGUsIGJpdHJhdGUpOwogCiAJCS8qIHRzZWcgYnJwIGJpdGVycm9yICovCiAJCWlmIChiaXRyYXRlX2Vycm9yICZndDsgYmVzdF9iaXRyYXRlX2Vycm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMKaW5kZXggOTVmY2RjMTAyNmY4MC4uZmFhZmIxMDMzZDQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jCkBAIC00LDYgJiM0Mzs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFdvbGZnYW5nIEdyYW5kZWdnZXIgJmx0O3dnQGdyYW5kZWdnZXIuY29tJmd0OwogICovCiAKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9kZXYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvY2FuLmgmZ3Q7CkBAIC01NCw2ICYjNDM7NTUsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChpZHggJmd0Oz0gcHJpdi0mZ3Q7ZWNob19za2JfbWF4KSB7CiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0OyVzOiBCVUchIFRyeWluZyB0byBhY2Nlc3MgY2FuX3ByaXY6OmVjaG9fc2tiIG91dCBvZiBib3VuZHMgKCV1L21heCAldSlcbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIGlkeCwgcHJpdi0mZ3Q7ZWNob19za2JfbWF4KTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjIsNyAmIzQzOzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgKHNrYi0mZ3Q7cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSAmYW1wOyZhbXA7CiAJICAgICBza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSAmYW1wOyZhbXA7CiAJICAgICBza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkwLDcgJiM0Mzs5Miw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfSBlbHNlIHsKIAkJLyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovCiAJCW5ldGRldl9lcnIoZGV2LCAmIzM0OyVzOiBCVUchIGVjaG9fc2tiICVkIGlzIG9jY3VwaWVkIVxuJiMzNDssIF9fZnVuY19fLCBpZHgpOwotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0yMjMsNyAmIzQzOzIyNSw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fZnJhbWUgKipjZikKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfY2M7CiAJfQogCkBAIC0yNTQsNyAmIzQzOzI1Niw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfZmQ7CiAJfQogCkBAIC0yOTIsNyAmIzQzOzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogCWNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpOwogCWlmICghY3N4KSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZ290byBvdXRfZXJyb3JfeGw7CiAJfQogCkBAIC0zODQsNyAmIzQzOzM4Niw3IEBAIGJvb2wgY2FuX2Ryb3BwZWRfaW52YWxpZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJYnJlYWs7CiAKIAljYXNlIEVUSF9QX0NBTlhMOgotCQlpZiAoIWNhbl9pc19jYW54bF9za2Ioc2tiKSkKJiM0MzsJCWlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkKIAkJCWdvdG8gaW52YWxfc2tiOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwppbmRleCBkOGM5YmZiMjAyMzA0Li5hMDU5N2RiNzIwODY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuYwpAQCAtMTczOSw2ICYjNDM7MTczOSw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfdGVhcmRvd25fY2FuX2N0cmxzKHN0cnVjdCBrdmFzZXJfcGNpZWZkICpwY2llKQogCQkJaW93cml0ZTMyKDAsIGNhbi0mZ3Q7cmVnX2Jhc2UgJiM0MzsgS1ZBU0VSX1BDSUVGRF9LQ0FOX0lFTl9SRUcpOwogCQkJa3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pOwogCQkJa3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pOwomIzQzOwkJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKIAkJCWZyZWVfY2FuZGV2KGNhbi0mZ3Q7Y2FuLmRldik7CiAJCX0KIAl9CkBAIC0xODc5LDcgJiM0MzsxODgwLDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXN0cnVjdCBrdmFzZXJfcGNpZWZkX2NhbiAqY2FuID0gcGNpZS0mZ3Q7Y2FuW2ldOwogCiAJCXVucmVnaXN0ZXJfY2FuZGV2KGNhbi0mZ3Q7Y2FuLmRldik7Ci0JCXRpbWVyX2RlbGV0ZSgmYW1wO2Nhbi0mZ3Q7YmVjX3BvbGxfdGltZXIpOwomIzQzOwkJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2Nhbi0mZ3Q7YmVjX3BvbGxfdGltZXIpOwogCQlrdmFzZXJfcGNpZWZkX3B3bV9zdG9wKGNhbik7CiAJCWt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYwppbmRleCAzN2MxYzIyYzQwYzlmLi4xY2FlODY5NzNkYTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMKQEAgLTkyMSw2ICYjNDM7OTIxLDcgQEAgc3RhdGljIGludCBya2NhbmZkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJcHJpdi0mZ3Q7Y2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTsKIAlwcml2LSZndDtjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjsKIAlwcml2LSZndDtuZGV2ID0gbmRldjsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKIAogCW1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAlpZiAobWF0Y2gpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKaW5kZXggMjRlODdkYWExZGYwMC4uNTk0MjAyMzNjOTE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMKQEAgLTEwMCwxNCAmIzQzOzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICpjZmRfbm9taW5hbDsKIAljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGludCB0eF90YWlsOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKQomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJdHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7CiAJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X3RhaWxdOwogCWlmICghc2tiKSB7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZF91bm1hc2tlZCA9IHByaXYtJmd0O3R4X2hlYWQ7CiYjNDM7CQljb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtJmd0O3R4X3RhaWw7CiYjNDM7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCQluZXRkZXZfZXJyKHByaXYtJmd0O25kZXYsCiAJCQkgICAmIzM0OyVzOiBlY2hvX3NrYlsldV09TlVMTCB0eF9oZWFkPTB4JTA4eCB0eF90YWlsPTB4JTA4eFxuJiMzNDssCiAJCQkgICBfX2Z1bmNfXywgdHhfdGFpbCwKLQkJCSAgIHByaXYtJmd0O3R4X2hlYWQsIHByaXYtJmd0O3R4X3RhaWwpOwomIzQzOwkJCSAgIHR4X2hlYWRfdW5tYXNrZWQsIHR4X3RhaWxfdW5tYXNrZWQpOwogCiAJCXJldHVybiAtRU5PTVNHOwogCX0KQEAgLTEyMywxNyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJCXJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCAmYW1wO2ZyYW1lX2xlbik7CiAKIAkJV1JJVEVfT05DRShwcml2LSZndDt0eF90YWlsLCBwcml2LSZndDt0eF90YWlsICYjNDM7IDEpOwomIzQzOwkJKnR4X2RvbmUgPSB0cnVlOwomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKIAkJbmV0aWZfc3VicXVldWVfY29tcGxldGVkX3dha2UocHJpdi0mZ3Q7bmRldiwgMCwgMSwgZnJhbWVfbGVuLAogCQkJCQkgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSwKIAkJCQkJICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpOwogCi0JCSp0eF9kb25lID0gdHJ1ZTsKLQogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIShwcml2LSZndDtkZXZ0eXBlX2RhdGEucXVpcmtzICZhbXA7IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNikpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogRXJyYXR1bSA2OiBFeHRlbmRlZCBmcmFtZXMgbWF5IGJlIHNlbmQgYXMgc3RhbmRhcmQgZnJhbWVzLgogCSAqCkBAIC0xNDMsNyAmIzQzOzE1NSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKIAkgKi8KIAlpZiAoIShjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykgfHwKIAkgICAgKGNmZF9yeC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogTm90IGFmZmVjdGVkIGlmOgogCSAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJiMzOTtlZCBmcmFtZQpAQCAtMTUxLDIwICYjNDM7MTYzLDIwIEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKIAkgKi8KIAlpZiAoKGNmZF9ub21pbmFsLSZndDtjYW5faWQgJmFtcDsgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpICE9CiAJICAgIChjZmRfcngtJmd0O2Nhbl9pZCAmYW1wOyAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogTm90IGFmZmVjdGVkIGlmOgogCSAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZQogCSAqLwogCWlmIChjZmRfbm9taW5hbC0mZ3Q7bGVuICE9IGNmZF9yeC0mZ3Q7bGVuKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIHRoZSBkYXRhIG9mIG5vbiBSVFIgZnJhbWVzIGlzIGRpZmZlcmVudAogCSAqLwogCWlmICghKGNmZF9ub21pbmFsLSZndDtjYW5faWQgJmFtcDsgQ0FOX1JUUl9GTEFHKSAmYW1wOyZhbXA7CiAJICAgIG1lbWNtcChjZmRfbm9taW5hbC0mZ3Q7ZGF0YSwgY2ZkX3J4LSZndDtkYXRhLCBjZmRfbm9taW5hbC0mZ3Q7bGVuKSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi8KIAl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cmtjYW5mZF9zdGF0cy0mZ3Q7c3luY3ApOwpAQCAtMTg1LDYgJiM0MzsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAKIAlya2NhbmZkX3htaXRfcmV0cnkocHJpdik7CiAKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCmluZGV4IDEyMjAwZGNmZDMzODkuLmIzNjczNDFkZDBhZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jCkBAIC0xNCw2ICYjNDM7MTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpCiAJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiAJaWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKQogCQlyZXR1cm4gZmFsc2U7CiAKQEAgLTMzLDEzICYjNDM7MzUsMjIgQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogCXJldHVybiBjZmQtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUc7CiB9CiAKLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQomIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogewomIzQzOwl1bnNpZ25lZCBpbnQgdHhfZnJlZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiAJaWYgKHByaXYtJmd0O2RldnR5cGVfZGF0YS5xdWlya3MgJmFtcDsgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82ICZhbXA7JmFtcDsKIAkgICAgcmtjYW5mZF90eF90YWlsX2lzX2VmZihwcml2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQl0eF9mcmVlID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJdHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7CiAKLQlyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHR4X2ZyZWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwKQEAgLTU3LDggJiM0Mzs2OCwxMCBAQCBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAKIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpCiB7Ci0JY29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwotCWNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTsKJiM0MzsJY29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpOwomIzQzOwljb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKIAogCXJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7CiB9CkBAIC02OSw2ICYjNDM7ODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJdTMyIHJlZ19mcmFtZWluZm8sIHJlZ19pZCwgcmVnX2NtZDsKIAl1bnNpZ25lZCBpbnQgdHhfaGVhZCwgZnJhbWVfbGVuOwogCWNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAJdTggaTsKIApAQCAtODgsNyAmIzQzOzEwMiwxOSBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQljZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLSZndDtkYXRhOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsJdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7CiYjNDM7CWZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpOwomIzQzOwllcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJCW5kZXYtJmd0O3N0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKJiM0MzsJfQomIzQzOwomIzQzOwlza2IgPSBwcml2LSZndDtjYW4uZWNob19za2JbdHhfaGVhZF07CiYjNDM7CWNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItJmd0O2RhdGE7CiAKIAlpZiAoY2ZkLSZndDtjYW5faWQgJmFtcDsgQ0FOX0VGRl9GTEFHKSB7CiAJCXJlZ19mcmFtZWluZm8gPSBSS0NBTkZEX1JFR19GRF9GUkFNRUlORk9fRlJBTUVfRk9STUFUOwpAQCAtMTE0LDcgJiM0MzsxNDAsNiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCQkJCSAgICBjZmQtJmd0O2xlbik7CiAJfQogCi0JdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7CiAJcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7CiAKIAlya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTsKQEAgLTEyMywxNCAmIzQzOzE0OCwxMiBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJCXJrY2FuZmRfd3JpdGUocHJpdiwgUktDQU5GRF9SRUdfRkRfVFhEQVRBMCAmIzQzOyBpLAogCQkJICAgICAgKih1MzIgKikoY2ZkLSZndDtkYXRhICYjNDM7IGkpKTsKIAotCWZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpOwotCWVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pOwotCWlmICghZXJyKQotCQluZXRkZXZfc2VudF9xdWV1ZShwcml2LSZndDtuZGV2LCBmcmFtZV9sZW4pOwomIzQzOwluZXRkZXZfc2VudF9xdWV1ZShwcml2LSZndDtuZGV2LCBmcmFtZV9sZW4pOwogCiAJV1JJVEVfT05DRShwcml2LSZndDt0eF9oZWFkLCBwcml2LSZndDt0eF9oZWFkICYjNDM7IDEpOwogCiAJcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKIAogCW5ldGlmX3N1YnF1ZXVlX21heWJlX3N0b3AocHJpdi0mZ3Q7bmRldiwgMCwKIAkJCQkgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLApAQCAtMTQ3LDYgJiM0MzsxNzAsOCBAQCB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cywKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwcml2LSZndDt0eF9sb2NrKTsKJiM0MzsKIAl0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTsKIAlza2IgPSBwcml2LSZndDtjYW4uZWNob19za2JbdHhfdGFpbF07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmgKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVzZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3BpbmxvY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90aW1lY291bnRlci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKQEAgLTQ3NCw2ICYjNDM7NDc1LDcgQEAgc3RydWN0IHJrY2FuZmRfcHJpdiB7CiAJc3RydWN0IGNhbl9yeF9vZmZsb2FkIG9mZmxvYWQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAKJiM0MzsJc3BpbmxvY2tfdCB0eF9sb2NrOyAvKiBwcm90ZWN0cyB0eF9oZWFkLCB0eF90YWlsIGFuZCBlY2hvX3NrYiAqLwogCXZvaWQgX19pb21lbSAqcmVnczsKIAl1bnNpZ25lZCBpbnQgdHhfaGVhZDsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKQEAgLTU1Niw3ICYjNDM7NTU4LDcgQEAgdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdGFydChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcF9zeW5jKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogCi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiYjNDM7dW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYwppbmRleCBhZTkwZTY3MTZkZTViLi4yYmU4NTFlODkwN2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMKQEAgLTc4Nyw3ICYjNDM7Nzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlX2lycToKJiM0MzsJcHJpdi0mZ3Q7Zm9yY2VfcXVpdCA9IDE7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O2hpMzExMF9sb2NrKTsKIAlmcmVlX2lycShzcGktJmd0O2lycSwgcHJpdik7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtoaTMxMTBfbG9jayk7CiAJaGkzMTEwX2h3X3NsZWVwKHNwaSk7CiAgb3V0X2Nsb3NlOgogCWhpMzExMF9wb3dlcl9lbmFibGUocHJpdi0mZ3Q7dHJhbnNjZWl2ZXIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMKaW5kZXggZjEyMzE4MjY4ZTQ2Yi4uNGMxNDdiOWQ2ZDY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jCkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0cnVjdCBmODE2MDRfaW50X2RhdGEgewogCXU4IHJ4ZXJyOwogCXU4IHR4ZXJyOwogCXU4IHZhbDsKLX0gX19wYWNrZWQgX19hbGlnbmVkKDQpOwomIzQzO30gX19wYWNrZWQ7CiAKIHN0cnVjdCBmODE2MDRfc2ZmIHsKIAlfX2JlMTYgaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYwppbmRleCBlZmJiN2JlZDM0YzlkLi5lZmU3YjNlZjQ4OWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMKQEAgLTUzNiw2ICYjNDM7NTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKiAtRUFHQUlOIG1lYW5zIGluY29tcGxldGU7IC1FSU5WQUwgcmVqZWN0cyB6ZXJvIHRvIGVuc3VyZSBwcm9ncmVzcy4gKi8KJiM0MztzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCwKJiM0MzsJCQkJCXNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbikKJiM0Mzt7CiYjNDM7CWlmIChyZW1haW5pbmcgJmx0OyBzaXplb2YoY21kLSZndDtoZWFkZXIuY21kX25vKSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwlpZiAoY21kLSZndDtoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCAmYW1wOyZhbXA7CiYjNDM7CSAgICByZW1haW5pbmcgJmx0OyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKQomIzQzOwkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CSpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpOwomIzQzOwlpZiAoISpjbWRfbGVuKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqCiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IGt2YXNlcl9jbWQgKmNtZCkKQEAgLTY3NSw4ICYjNDM7NjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubywKIAkJCXNpemVfdCBjbWRfbGVuOwogCiAJCQl0bXBfY21kID0gYnVmICYjNDM7IHBvczsKLQkJCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpOwotCQkJaWYgKHBvcyAmIzQzOyBjbWRfbGVuICZndDsgYWN0dWFsX2xlbikgewomIzQzOwkJCWVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngodG1wX2NtZCwgYWN0dWFsX2xlbiAtIHBvcywgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCQlpZiAoZXJyIHx8IHBvcyAmIzQzOyBjbWRfbGVuICZndDsgYWN0dWFsX2xlbikgewogCQkJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwKIAkJCQkJCSAgICAmIzM0O0Zvcm1hdCBlcnJvclxuJiMzNDspOwogCQkJCWJyZWFrOwpAQCAtMjEyMCwyMyAmIzQzOzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldiwKIAlzcGluX2xvY2tfaXJxc2F2ZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKIAl1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuOwogCWlmICh1c2JfcnhfbGVmdG92ZXJfbGVuKSB7CiYjNDM7CQljb25zdCBzaXplX3QgY21kX3NpemVfZmllbGRfZW5kID0gb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KTsKIAkJaW50IHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCWludCBlcnI7CiAKIAkJY21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXI7CiAKLQkJY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTsKJiM0MzsJCWlmIChjbWQtJmd0O2hlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEICZhbXA7JmFtcDsKJiM0MzsJCSAgICB1c2JfcnhfbGVmdG92ZXJfbGVuICZsdDsgY21kX3NpemVfZmllbGRfZW5kKSB7CiYjNDM7CQkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QoaW50LCBsZW4sIGNtZF9zaXplX2ZpZWxkX2VuZCAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pOwomIzQzOwomIzQzOwkJCW1lbWNweShjYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7CiYjNDM7CQkJdXNiX3J4X2xlZnRvdmVyX2xlbiAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwomIzQzOwkJCWNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyX2xlbiA9IHVzYl9yeF9sZWZ0b3Zlcl9sZW47CiYjNDM7CQkJcG9zICYjNDM7PSByZW1haW5pbmdfYnl0ZXM7CiAKLQkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sCiYjNDM7CQkJaWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4gJmx0OyBjbWRfc2l6ZV9maWVsZF9lbmQpIHsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCB1c2JfcnhfbGVmdG92ZXJfbGVuLCAmYW1wO2NtZF9sZW4pOwomIzQzOwkJaWYgKGVyciB8fCBjbWRfbGVuICZsdDsgdXNiX3J4X2xlZnRvdmVyX2xlbikgewomIzQzOwkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4gLSBwb3MsCiAJCQkJCWNtZF9sZW4gLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTsKIAkJLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyZmxvdyB1c2JfcnhfbGVmdG92ZXIgKi8KIAkJaWYgKHJlbWFpbmluZ19ieXRlcyAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuICZndDsKIAkJCQkJCUtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHsKIAkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCi0JCW1lbWNweShjYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3ZlciAmIzQzOyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsCiYjNDM7CQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmICYjNDM7IHBvcywKIAkJICAgICAgIHJlbWFpbmluZ19ieXRlcyk7CiAJCXBvcyAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwogCkBAIC0yMTUyLDExICYjNDM7MjE5NCwxNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAKIAl3aGlsZSAocG9zICZsdDsgbGVuKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwogCQljbWQgPSBidWYgJiM0MzsgcG9zOwogCi0JCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7CiYjNDM7CQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgbGVuIC0gcG9zLCAmYW1wO2NtZF9sZW4pOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO2Rldi0mZ3Q7aW50Zi0mZ3Q7ZGV2LCAmIzM0O0Zvcm1hdCBlcnJvclxuJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAotCQlpZiAocG9zICYjNDM7IGNtZF9sZW4gJmd0OyBsZW4pIHsKJiM0MzsJCWlmIChlcnIgPT0gLUVBR0FJTiB8fCBwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGxlbikgewogCQkJLyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovCiAJCQlpbnQgbGVmdG92ZXJfYnl0ZXM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKaW5kZXggYTcwYTAyOTY3MDcxMS4uNzhjNTg3MGUyZjlhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmgKQEAgLTc2LDEyICYjNDM7NzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCWlmICh1bmxpa2VseSghbnNrYikpIHsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAljYW5fc2tiX3NldF9vd25lcihuc2tiLCBza2ItJmd0O3NrKTsKLQljb25zdW1lX3NrYihza2IpOwomIzQzOwlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIG5za2I7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmMgYi9uZXQvY2FuL2FmX2Nhbi5jCmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9hZl9jYW4uYwpAQCAtMjI2LDcgJiM0MzsyMjYsNyBAQCBpbnQgY2FuX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxvb3ApCiAJCWdvdG8gaW52YWxfc2tiOwogCX0KIAotCWlmICh1bmxpa2VseShza2ItJmd0O2Rldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSkgewomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItJmd0O2RldikpKSB7CiAJCWVyciA9IC1FUEVSTTsKIAkJZ290byBpbnZhbF9za2I7CiAJfQpAQCAtNDUyLDcgJiM0Mzs0NTIsNyBAQCBpbnQgY2FuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAKIAkvKiBpbnNlcnQgbmV3IHJlY2VpdmVyICAoZGV2LGNhbmlkLG1hc2spIC0mZ3Q7IChmdW5jLGRhdGEpICovCiAKLQlpZiAoZGV2ICZhbXA7JmFtcDsgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpCiYjNDM7CWlmIChkZXYgJmFtcDsmYW1wOyAhY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRldiAmYW1wOyZhbXA7ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKQpAQCAtNTE5LDcgJiM0Mzs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsCiAJc3RydWN0IGNhbl9yY3ZfbGlzdHNfc3RhdHMgKnJjdl9saXN0c19zdGF0cyA9IG5ldC0mZ3Q7Y2FuLnJjdl9saXN0c19zdGF0czsKIAlzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7CiAKLQlpZiAoZGV2ICZhbXA7JmFtcDsgZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmIChkZXYgJmFtcDsmYW1wOyAhY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybjsKIAogCWlmIChkZXYgJmFtcDsmYW1wOyAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSkKQEAgLTY4Nyw3ICYjNDM7Njg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2Nhbl9za2Ioc2tiKSkpIHsKIAkJcHJfd2Fybl9vbmNlKCYjMzQ7UEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcbiYjMzQ7LAogCQkJICAgICBkZXYtJmd0O3R5cGUsIHNrYi0mZ3Q7bGVuKTsKQEAgLTcwMyw3ICYjNDM7NzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAodW5saWtlbHkoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiYjNDM7CWlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHwKIAkJICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuZmRfc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gRkQgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CkBAIC03MTksNyAmIzQzOzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiBzdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKLQlpZiAodW5saWtlbHkoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiYjNDM7CWlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHwKIAkJICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vYmNtLmMKQEAgLTU0LDYgJiM0Mzs1NCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9za2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vYmNtLmgmZ3Q7CkBAIC0xNzE5LDcgJiM0MzsxNzIwLDcgQEAgc3RhdGljIGludCBiY21fc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJCWdvdG8gb3V0X3JlbGVhc2U7CiAJCQl9CiAKLQkJCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJCWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJCQlkZXZfcHV0KGRldik7CiAJCQkJcmV0ID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dF9yZWxlYXNlOwpAQCAtMTg2Nyw3ICYjNDM7MTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCWlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgJmFtcDsmYW1wOyBtc2cgIT0gTkVUREVWX0RPV04pCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTIwMjQsNyAmIzQzOzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQkJZGV2X3B1dChkZXYpOwogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL25ldC9jYW4vZ3cuYyBiL25ldC9jYW4vZ3cuYwppbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2d3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9ndy5jCkBAIC01Miw2ICYjNDM7NTIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jYW4vY2FuLW1sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vc2tiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2d3LmgmZ3Q7CkBAIC02MDksNyAmIzQzOzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJaWYgKG1zZyA9PSBORVRERVZfVU5SRUdJU1RFUikgewpAQCAtMTE2MCw3ICYjNDM7MTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZ3dqLSZndDtzcmMuZGV2KQogCQlnb3RvIG91dDsKIAotCWlmIChnd2otJmd0O3NyYy5kZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLSZndDtzcmMuZGV2KSkKIAkJZ290byBvdXQ7CiAKIAlnd2otJmd0O2RzdC5kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgobmV0LCBnd2otJmd0O2NjZ3cuZHN0X2lkeCk7CkBAIC0xMTY4LDcgJiM0MzsxMTY5LDcgQEAgc3RhdGljIGludCBjZ3dfY3JlYXRlX2pvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJaWYgKCFnd2otJmd0O2RzdC5kZXYpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGd3ai0mZ3Q7ZHN0LmRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otJmd0O2RzdC5kZXYpKQogCQlnb3RvIG91dDsKIAogCS8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovCmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmMKaW5kZXggMTU1NTMwYWVkY2UyZS4uNDU2MGQ1YTU2N2VjZiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtNjUsNiAmIzQzOzY1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL3NrYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9pc290cC5oJmd0OwpAQCAtMTYwNiw3ICYjNDM7MTYwNyw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsCiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wdXRfZGV2OwogCX0KQEAgLTE4OTMsNyAmIzQzOzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAotCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCWlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgJmFtcDsmYW1wOyBtc2cgIT0gTkVUREVWX0RPV04pCiAJCXJldHVybiBOT1RJRllfRE9ORTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jCmluZGV4IDgyZDljMDQ5OWM5NWYuLjhlMmUxMTRhYmNiOTkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcmF3LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2Nhbi9yYXcuYwpAQCAtMzQ0LDcgJiM0MzszNDQsNyBAQCBzdGF0aWMgaW50IHJhd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC00ODcsNyAmIzQzOzQ4Nyw3IEBAIHN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbGVuCiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSB7CiYjNDM7CQlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXRfcHV0X2RldjsKIAkJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQ0FOIFN1YnN5c3RlbSBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgQ0FOIHN1YnN5c3RlbS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGUgYnJlYWR0aCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UgaGF2ZSBjaGFuZ2VzIHRvdWNoaW5nIHZhcmlvdXMgbGV2ZWxzLCBmcm9tIGxvdy1sZXZlbCBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucyBhbGwgdGhlIHdheSB1cCB0byB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy4KCjEuICAqKlNhZmV0eSBhbmQgQ29ycmVjdG5lc3M6KiogVGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY2Agd2l0aCB0aGUgYGRpdjY0X3U2NGAsIGBtdWxfdTMyX3UzMmAsIGFuZCBgYWJzX2RpZmZgIHJlcGxhY2UgaXMgY3JpdGljYWwuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBwb3RlbnRpYWwgMzItYml0IHdyYXAtYXJvdW5kIGlzc3Vlcywgd2hpY2ggYXJlIHN1YnRsZSBidXQgY2FuIGxlYWQgdG8gaW5jb3JyZWN0IGJpdCB0aW1pbmcgY29uZmlndXJhdGlvbnMuIFNpbWlsYXJseSwgdGhlIHJlcGxhY2VtZW50IG9mIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBpbiBzZXZlcmFsIGZpbGVzLCBwYXJ0aWN1bGFybHkgYGRyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNgIGFuZCBgaW5jbHVkZS9saW51eC9jYW4vc2tiLmhgLCBhbmQgYGNvbnN1bWVfc2tiYCB3aXRoIGBkZXZfY29uc3VtZV9za2JfYW55YCBpbiBpbmNsdWRlLCBpbmRpY2F0ZXMgYW4gZWZmb3J0IHRvIGltcHJvdmUgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgcG90ZW50aWFsbHkgcHJldmVudCBtZW1vcnkgbGVha3MsIGVzcGVjaWFsbHkgb24gZXJyb3IgcGF0aHMuIFRoZSBsb2NraW5nIGNoYW5nZXMgdG8gYHJvY2tjaGlwX2NhbmZkYCBhbmQgdGhlIGFkZGl0aW9uIG9mIHNhZmV0eSBjaGVja3MgaW4gdGhlIGt2YXNlcl91c2IgZHJpdmVyIGFsc28gaW1wcm92ZSByb2J1c3RuZXNzLiBUaGUgY2hhbmdlIHRvIGB0aW1lcl9zaHV0ZG93bl9zeW5jYCBzdWdnZXN0cyBwcmV2ZW50aW5nIHJhY2UgY29uZGl0aW9ucy4KCjIuICAqKlJlYWNoYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWw6KiogVGhlIG1vc3QgcHJvbWlzaW5nIGFyZWFzIGZvciBmdXp6aW5nIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIHRoZSBjb3JlIENBTiBuZXR3b3JraW5nIGNvZGUgKGBuZXQvY2FuL2ApIGFuZCB0aGUgVVNCIENBTiBkZXZpY2UgZHJpdmVycy4gVGhlIGNoYW5nZXMgdGhhdCB1c2UgYCFjYW5fZ2V0X21sX3ByaXYoZGV2KWAgaW4gbmV0L2NhbiBhZmZlY3QgdGhlIGNvcmUgQ0FOIG9wZXJhdGlvbiBhbmQgYXJlIG9mIGh1Z2UgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBuZXQvY2FuL2FmX2Nhbi5jYCwgYG5ldC9jYW4vYmNtLmNgLCBgbmV0L2Nhbi9ndy5jYCwgYG5ldC9jYW4vaXNvdHAuY2AsIGFuZCBgbmV0L2Nhbi9yYXcuY2AsIHdoaWNoIGNvbnRyb2wgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0uIEZ1bmN0aW9ucyBsaWtlIGBjYW5fc2VuZGAsIGBjYW5fcmN2YCwgYGNhbmZkX3JjdmAsIGBjYW54bF9yY3ZgLCBgYmNtX3NlbmRtc2dgLCBgYmNtX2Nvbm5lY3RgLCBgY2d3X2NyZWF0ZV9qb2JgLCBgaXNvdHBfYmluZGAsIGFuZCBgcmF3X2JpbmRgIGFyZSBhbGwgcHJpbWUgdGFyZ2V0cy4gVGhleSBhcmUgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2VyIHNwYWNlIHRocm91Z2ggQUZcX0NBTiBzb2NrZXRzLCBtYWtpbmcgdGhlbSBlYXN5IHRvIHRlc3QuCgogICAgVGhlIGNoYW5nZXMgaW4gYGt2YXNlcl91c2JfaHlkcmEuY2AsIHRob3VnaCBzcGVjaWZpYyB0byBLdmFzZXIgVVNCIGRldmljZXMsIGFyZSBhbHNvIHJlbGV2YW50LiBVU0IgQ0FOIGRldmljZXMgYXJlIGVtdWxhdGFibGUgdXNpbmcgdG9vbHMgbGlrZSBkdW1teVxfaGNkIG9yIHN5ei11c2IsIGVuYWJsaW5nIGZvY3VzZWQgZnV6emluZyBpbiB0aGlzIGFyZWEuIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AgaXMgYW4gb2J2aW91cyBzdGFydGluZyBwb2ludCBoZXJlLgoKMy4gICoqUHJpb3JpdGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb246KiogV2hpbGUgb3RoZXIgY2hhbmdlcyBpbiB0aGUgc2VyaWVzIG1pZ2h0IGludHJvZHVjZSBwb3RlbnRpYWwgYnVncywgdGhleSBhcmUgbGlrZWx5IGhhcmRlciB0byByZWFjaCBmcm9tIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlLiBUaGVyZWZvcmUsIHRoZSBjb3JlIENBTiBhbmQgVVNCIENBTiBhc3BlY3RzIHRha2UgcHJpb3JpdHkuCgogICAgVG8gZnV6eiBlZmZlY3RpdmVseSwgSSYjMzk7bGwgbmVlZCBhIGtlcm5lbCBjb25maWd1cmVkIHdpdGggYENBTmAsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGBDQU5fSVNPVFBgLCBgQ0FOX1JBV2AsIGFuZCBgQ0FOX0tWQVNFUl9VU0JgIGVuYWJsZWQuIFRoaXMgc2hvdWxkIGNvdmVyIHRoZSByZWxldmFudCBBRlxfQ0FOIHNvY2tldCB0eXBlcyBhbmQgVVNCIENBTiBzdXBwb3J0LCBnaXZpbmcgbWUgdGhlIGJyb2FkZXN0IGNvdmVyYWdlIHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzLgoKSW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBzZXJpZXMgaGFzIHNldmVyYWwgY2hhbmdlcyB0aGF0IGFyZSBiZW5lZmljaWFsIHRvIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBJJiMzOTtsbCBmb2N1cyBvbiB0aGUgY29yZSBDQU4gbmV0d29ya2luZyBjb2RlIGFuZCBVU0IgQ0FOIGRyaXZlciBjb2RlIGR1ZSB0byB0aGVpciBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWc9MjI9aWYgQ0FOXG5uZXQvY2FuL0tjb25maWctMjMtXG5uZXQvY2FuL0tjb25maWc6MjQ6Y29uZmlnIENBTl9SQVdcbm5ldC9jYW4vS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O1JhdyBDQU4gUHJvdG9jb2wgKHJhdyBhY2Nlc3Mgd2l0aCBDQU4tSUQgZmlsdGVyaW5nKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZy0zMy1cbm5ldC9jYW4vS2NvbmZpZzozNDpjb25maWcgQ0FOX0JDTVxubmV0L2Nhbi9LY29uZmlnLTM1LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjYXN0IE1hbmFnZXIgQ0FOIFByb3RvY29sICh3aXRoIGNvbnRlbnQgZmlsdGVyaW5nKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZy00NS1cbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXG5uZXQvY2FuL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVwmIzM0O1xuLS1cbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXCYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnXCYjMzQ7XG5uZXQvY2FuL0tjb25maWctNTgtXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxubmV0L2Nhbi9LY29uZmlnLTYwLVx0dHJpc3RhdGUgXCYjMzQ7SVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDk3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ0FOIENvbmZpZ3VyYXRpb24gUG9zc2liaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQ0FOIGNvbmZpZ3VyYXRpb25zOiBgQ0FOX1JBV2AsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGFuZCBgQ0FOX0lTT1RQYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cywgYW5kIEkmIzM5O20gcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGVpciByb2xlcyBpbiByYXcgZnJhbWUgdHJhbnNtaXNzaW9uLCBicm9hZGNhc3QgY29tbXVuaWNhdGlvbiBtYW5hZ2VtZW50LCBnYXRld2F5IGZ1bmN0aW9uYWxpdHksIGFuZCBJU08tVFAgaW1wbGVtZW50YXRpb25zIHJlc3BlY3RpdmVseS4gSSYjMzk7dmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIHdvcmsgaW5kaXZpZHVhbGx5IGFuZCBpbiBjb21iaW5hdGlvbiBmb3IgdmFyaW91cyBzZXR1cHMuCgpCdXQgc29tZXRoaW5nJiMzOTtzIG5hZ2dpbmcgYXQgdGhlIGJhY2sgb2YgbXkgbWluZC4gSXQmIzM5O3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgQ0FOX0tWQVNFUl9VU0JgLiBLdmFzZXIgVVNCIGludGVyZmFjZXMgYXJlIHByZXR0eSB1YmlxdWl0b3VzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgbm90ZXMgSSBzaG91bGQgYmUgYmVhcmluZyBpbiBtaW5kIGZvciBjb21wYXRpYmlsaXR5IG9yIG9wdGltaXphdGlvbi4gSSBzaG91bGQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgZHJpdmVyIG9wdGlvbnMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIGFueSBudWFuY2VzIG9mIGhvdyB0aGUgS3Zhc2VyIGludGVyZmFjZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRob3NlIG1vcmUgY29tbW9uIGNvbmZpZ3VyYXRpb25zIEkgbWVudGlvbmVkIGVhcmxpZXIuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgY29uZmlndXJlZCBvcHRpbWFsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENBTl9LVkFTRVJfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZz01ND1jb25maWcgQ0FOX0dTX1VTQlxuLS1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02Ni1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZzo2Nzpjb25maWcgQ0FOX0tWQVNFUl9VU0JcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O0t2YXNlciBDQU4vVVNCIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkNvbmZpcm1pbmcgQ0FOIENvbmZpZ3VyYXRpb24gYW5kIExvb2tpbmcgZm9yIEZ1cnRoZXIgQWRqdXN0bWVudHMqKgoKQWxyaWdodCwgdGhhdCBmaXJzdCBjaGVjayBjb25maXJtcyBpdC4gTXkgaW5pdGlhbCBodW5jaCBhYm91dCB1c2luZyBgQ0FOX0tWQVNFUl9VU0JgIGZvciB0aGUgS3Zhc2VyIGludGVyZmFjZSBpcyBzcG90LW9uLiBOb3cgdGhhdCB0aGF0JiMzOTtzIHZhbGlkYXRlZCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgcG90ZW50aWFsbHkgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gdGhlIENBTiBidXMgaXRzZWxmLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGludGVyZmFjZSB0eXBlIGFuZCBmb3JnZXR0aW5nIGFib3V0IHRoaW5ncyBsaWtlIGJhdWQgcmF0ZSwgYXJiaXRyYXRpb24gSURzLCBvciBhY2NlcHRhbmNlIGZpbHRlcnMuIFNvLCBsZXQmIzM5O3MgZXhwYW5kIHRoZSBzY29wZSBhIGxpdHRsZSBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgQ0FOIHNldHVwIGlzIGZ1bGx5IGRpYWxlZCBpbi4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvcnJlY3Qgb3BlcmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnLTUtXG5uZXQvY2FuL0tjb25maWc6NjptZW51Y29uZmlnIENBTlxubmV0L2Nhbi9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxubmV0L2Nhbi9LY29uZmlnLTIzLVxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXG5uZXQvY2FuL0tjb25maWctMjUtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctMzMtXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cbm5ldC9jYW4vS2NvbmZpZy0zNS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWctNDUtXG5uZXQvY2FuL0tjb25maWc6NDY6Y29uZmlnIENBTl9HV1xubmV0L2Nhbi9LY29uZmlnLTQ3LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIEdhdGV3YXkvUm91dGVyICh3aXRoIG5ldGxpbmsgY29uZmlndXJhdGlvbilcJiMzNDtcbi0tXG5uZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFwmIzM0O25ldC9jYW4vajE5MzkvS2NvbmZpZ1wmIzM0O1xubmV0L2Nhbi9LY29uZmlnLTU4LVxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcbm5ldC9jYW4vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0lTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ0NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENBTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgQ0FOIGNvbmZpZ3VyYXRpb25zIOKAkyBgQ0FOYCwgYENBTl9SQVdgLCBgQ0FOX0JDTWAsIGBDQU5fR1dgLCBgQ0FOX0lTT1RQYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgd2UmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IGZvciBmdXp6aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGluIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4gRm9yICYjMzQ7Y29yZSBDQU4sJiMzNDsgSSYjMzk7bSB0aGlua2luZzogYGNhbl9zZW5kYCwgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIHBvdGVudGlhbGx5IGBjYW54bF9yY3ZgLCBhcyB3ZWxsIGFzIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYW5kIGByYXdfYmluZGAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMgZm9yIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGNvbnRyb2wuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgVVNCIENBTiBzaWRlLCBhbmQgcmlnaHQgbm93IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgLgoKTm93LCBJJiMzOTttIG5vdCBqdXN0IGxvb2tpbmcgZm9yIG5hbWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5ICp0aGVyZSogYW5kLCBjcml0aWNhbGx5LCBub3QgbWFnaWNhbGx5IG9wdGltaXplZCBhd2F5IGJ5IHRoZSBjb21waWxlciB0aHJvdWdoIGlubGluaW5nIG9yIHN0YXRpYyBkZWNsYXJhdGlvbiBpbiBhIHdheSB0aGF0IHdvdWxkIHByZXZlbnQgZnV6emluZyBmcm9tIGVmZmVjdGl2ZWx5IHJlYWNoaW5nIHRoZW0uIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdXp6ZXIgY2FuIGFjdHVhbGx5ICpzZWUqIHRoZXNlIGZ1bmN0aW9ucyBhbmQgcHJvdmlkZSBpbnB1dHMuIFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWQpIGNhbl9zZW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9hZl9jYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2FmX2Nhbi5jPTExND1zdGF0aWMgaW50IGNhbl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy0yMDEtICovXG5uZXQvY2FuL2FmX2Nhbi5jOjIwMjppbnQgY2FuX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxvb3ApXG5uZXQvY2FuL2FmX2Nhbi5jLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDczCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIEV4cG9ydGVkIEZ1bmN0aW9ucyoqCgpSaWdodCwgYGNhbl9zZW5kYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2hlbiBJIHNlZSB0aGF0IGEgZnVuY3Rpb24gaXMgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqaW50ZW5kZWQqIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb2R1bGUgb3IgbGlicmFyeS4gSXQmIzM5O3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW5kIGl0cyBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHMgd2l0aCBhbiBleWUgZm9yIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgZm9yIGV4dGVybmFsIGNvbnN1bWVycy4gCgpTZWNvbmQsIHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgZnVuY3Rpb25hbGl0eS4gSXQmIzM5O3MgcHJvYmFibHkgYSBnYXRla2VlcGVyLCBhbiBvcmNoZXN0cmF0b3IsIG9yIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiB0b29sIHRoYXQgdGhlIHdpZGVyIHN5c3RlbSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBiaWdnZXIgcGljdHVyZSB0byBhc3Nlc3MgaXRzIGltcGFjdCBvbiBhbnkgY2hhbmdlcyBJIG1pZ2h0IG1ha2UuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBtb2R1bGUgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgY2FuX3NlbmRgLgoKRmluYWxseSwgaXQmIzM5O3MgYWJvdXQgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgdG8gdGhpcyBmdW5jdGlvbi4gQW55IG1vZGlmaWNhdGlvbiB0byBgY2FuX3NlbmRgIGhhcyB0aGUgcG90ZW50aWFsIHRvIGJyZWFrIGV4aXN0aW5nIGludGVncmF0aW9ucy4gU28sIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFuYWx5emUgaXRzIGRlcGVuZGVuY2llcywgYm90aCB3aXRoaW4gdGhlIGN1cnJlbnQgcHJvamVjdCBhbmQgYW55IGV4dGVybmFsIGNvZGUgdGhhdCBtaWdodCBiZSBjYWxsaW5nIGl0LCB0byBhc3Nlc3MgdGhlIHJpc2tzIGFuZCBwbGFuIGFjY29yZGluZ2x5LiBJdCBkaWN0YXRlcyB0aGUgbmVlZCB0byBoYXZlIGV4dHJlbWVseSByaWdvcm91cyB0ZXN0aW5nIGFuZCwgcG9zc2libHksIHZlcnNpb25pbmcgc3RyYXRlZ2llcyBpZiBjaGFuZ2VzIGFyZSB1bmF2b2lkYWJsZS4gVGhpcyBhbGwgYWZmZWN0cyBkZXNpZ24gY2hvaWNlcy4gVGhlIGZhY3QgdGhhdCB0aGUgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIGlzIGEgZmFjdCB0aGF0IEkgaW1tZWRpYXRlbHkgbmVlZCB0byBidWlsZCBvZmYgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBjYW5fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9hZl9jYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL2FmX2Nhbi5jPTU3Mz1zdGF0aWMgaW5saW5lIHZvaWQgZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVjZWl2ZXIgKnJjdilcbi0tXG5uZXQvY2FuL2FmX2Nhbi5jLTU3OC1cbm5ldC9jYW4vYWZfY2FuLmM6NTc5OnN0YXRpYyBpbnQgY2FuX3Jjdl9maWx0ZXIoc3RydWN0IGNhbl9kZXZfcmN2X2xpc3RzICpkZXZfcmN2X2xpc3RzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2Nhbi9hZl9jYW4uYy01ODAte1xuLS1cbm5ldC9jYW4vYWZfY2FuLmM9NjU0PXN0YXRpYyB2b2lkIGNhbl9yZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2Nhbi9hZl9jYW4uYy02ODYtXG5uZXQvY2FuL2FmX2Nhbi5jOjY4NzpzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jYW4vYWZfY2FuLmMtNjg4LVx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzExCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIEVudHJ5IFBvaW50cyBpbiB0aGUgU3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGBjYW5fcmN2YC4uLiBUaGF0JiMzOTtzIHN0YXRpYywgaXNuJiMzOTt0IGl0PyBIbW0sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYSBwYWNrZXQgaGFuZGxlciwgc28gdGVjaG5pY2FsbHkgaXQgKmlzKiBhbiBlbnRyeSBwb2ludCwganVzdCBub3QgaW4gdGhlIG1vc3QgY29udmVudGlvbmFsIHNlbnNlLiBXZSBjb3VsZCBpbmNsdWRlIGl0LCBidXQsIGZvciBjbGFyaXR5LCBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciB0byBmb2N1cyBvbiB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIG9yLCBldmVuIG1vcmUgdXNlZnVsbHksIHRoZSBvbmVzIHRoYXQgYXJlIGFjdHVhbGx5IGludm9rZWQgZGlyZWN0bHkgZnJvbSB1c2VyIHNwYWNlLiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBmaW5kIHRoZSAqcmVhbCogc3RhcnRpbmcgcG9pbnRzIG9mIGludGVyYWN0aW9uLgoKTm93LCBsb29raW5nIGF0IHRoZSBsaXN0IG9mIHNvY2tldCBvcGVyYXRpb25zLi4uIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYHJhd19iaW5kYC4uLiBZZXAsIHRob3NlIGFyZSBhbGwgcmlnaHQgb24gdGhlIG1vbmV5LiBTb2NrZXQgb3BlcmF0aW9ucywgTmV0bGluayBvcGVyYXRpb25zIOKAkyB0aG9zZSBhcmUgKmV4YWN0bHkqIHRoZSBraW5kcyBvZiBlbnRyeSBwb2ludHMgSSYjMzk7ZCBleHBlY3QgdG8gc2VlLiBUaGV5IHByb3ZpZGUgdGhlIGdhdGV3YXkgZm9yIHVzZXItbGV2ZWwgYXBwbGljYXRpb25zIHRvIGludGVyZmFjZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMuIFdlJiMzOTtyZSBvbiB0aGUgcmlnaHQgdHJhY2s7IHRob3NlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBiY21fc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vYmNtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9iY20uYz0xNjAzPXN0YXRpYyBpbnQgYmNtX3R4X3NlbmQoc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgaWZpbmRleCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jYW4vYmNtLmMtMTY1MS0gKi9cbm5ldC9jYW4vYmNtLmM6MTY1MjpzdGF0aWMgaW50IGJjbV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvY2FuL2JjbS5jLTE2NTMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNQoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFNvY2tldCBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBiY21fc2VuZG1zZ2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGEgYml0IHVudXN1YWwgZm9yIGEgc29ja2V0IG9wZXJhdGlvbi4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGltcGxpZXMgYSB0aWdodGx5IGJvdW5kIG9yIHNwZWNpYWxpemVkIGNvbW11bmljYXRpb24gcGF0aCB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29ya2luZyBjb250ZXh0LCBwcm9iYWJseSBhIGhpZ2hseS1vcHRpbWl6ZWQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgYXBwcm9hY2guIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBHaXZlbiBpdHMgc3RhdGljIG5hdHVyZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbnN0cmFpbnRzIGluIGl0cyB1c2FnZSBvciBwb3RlbnRpYWwgY2hhbGxlbmdlcyBpbiBtb2RpZmljYXRpb24gaWYgaXQmIzM5O3MgZGVlcGx5IGludGVncmF0ZWQgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc3RhY2suCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUbyBnZXQgYSBoYW5kbGUgb24gaXQsIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGludmVzdGlnYXRlIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhpcyB3aWxsIGdpdmUgc29tZSBpbXBvcnRhbnQgY29udGV4dCBmb3IgbXkgdW5kZXJzdGFuZGluZyBvZiBgYmNtX3NlbmRtc2dgLiBJdCYjMzk7cyBsaWtlbHkgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIHJldmVhbCB0aGUgZGF0YSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gdGhhdCBgYmNtX3NlbmRtc2dgIGlzIG1hbmlwdWxhdGluZywgcG90ZW50aWFsbHkgZGV0YWlsaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkIGF0IHRoZSBVU0IgbGV2ZWwuIFRoaXMgY291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGlmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmF3IENBTiBvciBvdGhlciBpbmR1c3RyaWFsIHByb3RvY29scy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHJlYWQgYW5kIGhvdyB0aGF0IGRhdGEgZW5kcyB1cCBvbiB0aGUgc29ja2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhpbnR8dm9pZCkga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmM9MjEwNT1zdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfZmx1c2hfcXVldWUoc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYy0yMTI1LSAqL1xuZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYzoyMTI2OnN0YXRpYyB2b2lkIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jLTIxMjctXHRcdFx0XHRcdFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgwMwoJCQkJCQkJb3V0cHV0OiAyNjkKCQkJCQkJCXRob3VnaHRzOiAzNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogQ0FOIE5ldHdvcmtpbmcgJmFtcDsgVVNCIFVSQiBDb21wbGV0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB3aGlsZSBpdCBzZWVtcyBzdGF0aWMgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGlzIGFjdHVhbGx5IGEgY2FsbGJhY2sgZm9yIFVTQiBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb21wbGV0aW9uLiBUaGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG15IFVTQiBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0JiMzOTtzIGEga2V5IHNwb3QgdG8gcHJvYmUgdGhlIENBTiBuZXR3b3JraW5nIHN0YWNrLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgZnVuY3Rpb25zIGFyZSB3ZSBsb29raW5nIGF0PyBSaWdodCwgSSBzZWU6IGBjYW5fc2VuZGAsIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYHJhd19iaW5kYCwgYW5kIGBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja2AuCgpJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gaGl0dGluZyB0aGUgcmlnaHQgZW50cnkgcG9pbnRzLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgY2FuX3JjdmAgaXMgYWxzbyBzdGF0aWMuIFl1cCwgaXQgaXMuIEJ1dCwgaXMgdGhlcmUgYSBiZXR0ZXIgZW50cnkgcG9pbnQ/IEFoLCBgY2FuX3JlY2VpdmVgIGlzIGFsc28gc3RhdGljLiBPa2F5LCBgY2FuX3JjdmAgaXMgcmVnaXN0ZXJlZCB1c2luZyBgZGV2X2FkZF9wYWNrYC4uLiBUaGF0JiMzOTtzIHBlcmZlY3RseSBmaW5lIHRvIGluY2x1ZGUgaXQuIEkgc2hvdWxkIGFsc28gZ3JhYiBgY2FuX3JjdmAsIGBjYW5mZF9yY3ZgLCBhbmQgYGNhbnhsX3JjdmAgdG9vLgoKTm93LCB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCBoZXJlPyBMZXQmIzM5O3Mgc2VlOiBgQ0FOYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYENBTl9JU09UUGAsIGBDQU5fUkFXYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAuCgpUaGUgbG9naWMgYmVoaW5kIHRoaXMgc2VsZWN0aW9uIGlzIHRoYXQgdGhlIHBhdGNoIHNlcmllcyBJJiMzOTttIGV4YW1pbmluZyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyBmcm9tIGNoZWNraW5nIGBkZXYtJmd0O3R5cGUgPT0gQVJQSFJEX0NBTmAgdG8gdXNpbmcgYGNhbl9nZXRfbWxfcHJpdihkZXYpYC4gVGhpcyBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgbGlrZSBSQVcsIEJDTSwgR1csIGFuZCBJU09UUC4gSXQgYWxzbyBpbmNsdWRlcyBhIGZpeCBmb3IgdGhlIEt2YXNlciBVU0IgZHJpdmVyOyB0aGUgYnVsayByZWFkIGNhbGxiYWNrIGhhZCBhIGJ1ZyByZWxhdGVkIHRvIHBhcnRpYWwgY29tbWFuZHMsIHRoYXQgY291bGQgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIGFsbCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdmlhIENBTiBzb2NrZXRzIG9yIG5ldGxpbmssIGFuZCBhbHNvIHRocm91Z2ggVVNCIGVtdWxhdGlvbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYmVjYXVzZSBpdCBjbGVhcmx5IGhhcyBmdW5jdGlvbmFsIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fQkNNJiMzNDssCiAgICAmIzM0O0NBTl9HVyYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX1JBVyYjMzQ7LAogICAgJiMzNDtDQU5fS1ZBU0VSX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nhbl9zZW5kJiMzNDssCiAgICAmIzM0O2Nhbl9yY3YmIzM0OywKICAgICYjMzQ7Y2FuZmRfcmN2JiMzNDssCiAgICAmIzM0O2NhbnhsX3JjdiYjMzQ7LAogICAgJiMzNDtiY21fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtiY21fY29ubmVjdCYjMzQ7LAogICAgJiMzNDtjZ3dfY3JlYXRlX2pvYiYjMzQ7LAogICAgJiMzNDtpc290cF9iaW5kJiMzNDssCiAgICAmIzM0O3Jhd19iaW5kJiMzNDssCiAgICAmIzM0O2t2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU5gLCB3aGljaCBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgKFJBVywgQkNNLCBHVywgSVNPVFApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciYjMzk7cyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fQkNNJiMzNDssCiAgICAmIzM0O0NBTl9HVyYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX1JBVyYjMzQ7LAogICAgJiMzNDtDQU5fS1ZBU0VSX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Nhbl9zZW5kJiMzNDssCiAgICAmIzM0O2Nhbl9yY3YmIzM0OywKICAgICYjMzQ7Y2FuZmRfcmN2JiMzNDssCiAgICAmIzM0O2NhbnhsX3JjdiYjMzQ7LAogICAgJiMzNDtiY21fc2VuZG1zZyYjMzQ7LAogICAgJiMzNDtiY21fY29ubmVjdCYjMzQ7LAogICAgJiMzNDtjZ3dfY3JlYXRlX2pvYiYjMzQ7LAogICAgJiMzNDtpc290cF9iaW5kJiMzNDssCiAgICAmIzM0O3Jhd19iaW5kJiMzNDssCiAgICAmIzM0O2t2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9DQU5gLCB3aGljaCBhZmZlY3RzIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgdmFsaWRhdGVkIGFjcm9zcyB2YXJpb3VzIENBTiBwcm90b2NvbHMgKFJBVywgQkNNLCBHVywgSVNPVFApLiBJdCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciYjMzk7cyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYWE1NzhkYjcwY2E1ZjE2NzE2ZGQ4Y2ZjMjg0NzEwNWJiNmI5NDFiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTI6MjE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmMKaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYwpAQCAtMTE5LDggJiM0MzsxMTksMTIgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsCiAJICAgICB0c2VnICZndDs9IChidGMtJmd0O3RzZWcxX21pbiAmIzQzOyBidGMtJmd0O3RzZWcyX21pbikgKiAyOyB0c2VnLS0pIHsKIAkJdHNlZ2FsbCA9IENBTl9TWU5DX1NFRyAmIzQzOyB0c2VnIC8gMjsKIAotCQkvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzEmIzQzO3RzZWcyKSAqLwotCQlicnAgPSBwcml2LSZndDtjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC0mZ3Q7Yml0cmF0ZSkgJiM0MzsgdHNlZyAlIDI7CiYjNDM7CQkvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzEmIzQzO3RzZWcyKS4KJiM0MzsJCSAqIEEgMzIgYml0IHRzZWdhbGwgKiBidC0mZ3Q7Yml0cmF0ZSBjYW4gd3JhcCB0byB6ZXJvIGZvciBsYXJnZQomIzQzOwkJICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC4KJiM0MzsJCSAqLwomIzQzOwkJYnJwID0gZGl2NjRfdTY0KHByaXYtJmd0O2Nsb2NrLmZyZXEsCiYjNDM7CQkJCW11bF91MzJfdTMyKHRzZWdhbGwsIGJ0LSZndDtiaXRyYXRlKSkgJiM0MzsgdHNlZyAlIDI7CiAKIAkJLyogY2hvb3NlIGJycCBzdGVwIHdoaWNoIGlzIHBvc3NpYmxlIGluIHN5c3RlbSAqLwogCQlicnAgPSAoYnJwIC8gYnRjLSZndDticnBfaW5jKSAqIGJ0Yy0mZ3Q7YnJwX2luYzsKQEAgLTEyOCw3ICYjNDM7MTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsCiAJCQljb250aW51ZTsKIAogCQliaXRyYXRlID0gcHJpdi0mZ3Q7Y2xvY2suZnJlcSAvIChicnAgKiB0c2VnYWxsKTsKLQkJYml0cmF0ZV9lcnJvciA9IGFicyhidC0mZ3Q7Yml0cmF0ZSAtIGJpdHJhdGUpOwomIzQzOwkJYml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LSZndDtiaXRyYXRlLCBiaXRyYXRlKTsKIAogCQkvKiB0c2VnIGJycCBiaXRlcnJvciAqLwogCQlpZiAoYml0cmF0ZV9lcnJvciAmZ3Q7IGJlc3RfYml0cmF0ZV9lcnJvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jCmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYwpAQCAtNCw2ICYjNDM7NCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyICZsdDt3Z0BncmFuZGVnZ2VyLmNvbSZndDsKICAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vZGV2LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2Nhbi5oJmd0OwpAQCAtNTQsNiAmIzQzOzU1LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoaWR4ICZndDs9IHByaXYtJmd0O2VjaG9fc2tiX21heCkgewogCQluZXRkZXZfZXJyKGRldiwgJiMzNDslczogQlVHISBUcnlpbmcgdG8gYWNjZXNzIGNhbl9wcml2OjplY2hvX3NrYiBvdXQgb2YgYm91bmRzICgldS9tYXggJXUpXG4mIzM0OywKIAkJCSAgIF9fZnVuY19fLCBpZHgsIHByaXYtJmd0O2VjaG9fc2tiX21heCk7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTYyLDcgJiM0Mzs2NCw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJICAgIChza2ItJmd0O3Byb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgJmFtcDsmYW1wOwogCSAgICAgc2tiLSZndDtwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5GRCkgJmFtcDsmYW1wOwogCSAgICAgc2tiLSZndDtwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5YTCkpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05MCw3ICYjNDM7OTIsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0gZWxzZSB7CiAJCS8qIGxvY2tpbmcgcHJvYmxlbSB3aXRoIG5ldGlmX3N0b3BfcXVldWUoKSA/PyAqLwogCQluZXRkZXZfZXJyKGRldiwgJiMzNDslczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcbiYjMzQ7LCBfX2Z1bmNfXywgaWR4KTsKLQkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMjIzLDcgJiM0MzsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX2NjOwogCX0KIApAQCAtMjU0LDcgJiM0MzsyNTYsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuZmRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX2ZkOwogCX0KIApAQCAtMjkyLDcgJiM0MzsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAljc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTsKIAlpZiAoIWNzeCkgewotCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWdvdG8gb3V0X2Vycm9yX3hsOwogCX0KIApAQCAtMzg0LDcgJiM0MzszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJCWJyZWFrOwogCiAJY2FzZSBFVEhfUF9DQU5YTDoKLQkJaWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpCiYjNDM7CQlpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpCiAJCQlnb3RvIGludmFsX3NrYjsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKaW5kZXggZDhjOWJmYjIwMjMwNC4uYTA1OTdkYjcyMDg2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMKQEAgLTE3MzksNiAmIzQzOzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSkKIAkJCWlvd3JpdGUzMigwLCBjYW4tJmd0O3JlZ19iYXNlICYjNDM7IEtWQVNFUl9QQ0lFRkRfS0NBTl9JRU5fUkVHKTsKIAkJCWt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTsKIAkJCWt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTsKJiM0MzsJCQl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7Y2FuLSZndDtiZWNfcG9sbF90aW1lcik7CiAJCQlmcmVlX2NhbmRldihjYW4tJmd0O2Nhbi5kZXYpOwogCQl9CiAJfQpAQCAtMTg3OSw3ICYjNDM7MTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtJmd0O2NhbltpXTsKIAogCQl1bnJlZ2lzdGVyX2NhbmRldihjYW4tJmd0O2Nhbi5kZXYpOwotCQl0aW1lcl9kZWxldGUoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKJiM0MzsJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtjYW4tJmd0O2JlY19wb2xsX3RpbWVyKTsKIAkJa3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pOwogCQlrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMKaW5kZXggMzdjMWMyMmM0MGM5Zi4uMWNhZTg2OTczZGE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jCkBAIC05MjEsNiAmIzQzOzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXByaXYtJmd0O2Nhbi5kb19zZXRfbW9kZSA9IHJrY2FuZmRfc2V0X21vZGU7CiAJcHJpdi0mZ3Q7Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7CiAJcHJpdi0mZ3Q7bmRldiA9IG5kZXY7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiAKIAltYXRjaCA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YSgmYW1wO3BkZXYtJmd0O2Rldik7CiAJaWYgKG1hdGNoKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jCkBAIC0xMDAsMTQgJiM0MzsxMDAsMjUgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCWNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7CiAJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHhfdGFpbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSkKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCXR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpOwogCXNrYiA9IHByaXYtJmd0O2Nhbi5lY2hvX3NrYlt0eF90YWlsXTsKIAlpZiAoIXNrYikgewomIzQzOwkJY29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LSZndDt0eF9oZWFkOwomIzQzOwkJY29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWxfdW5tYXNrZWQgPSBwcml2LSZndDt0eF90YWlsOwomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKIAkJbmV0ZGV2X2Vycihwcml2LSZndDtuZGV2LAogCQkJICAgJiMzNDslczogZWNob19za2JbJXVdPU5VTEwgdHhfaGVhZD0weCUwOHggdHhfdGFpbD0weCUwOHhcbiYjMzQ7LAogCQkJICAgX19mdW5jX18sIHR4X3RhaWwsCi0JCQkgICBwcml2LSZndDt0eF9oZWFkLCBwcml2LSZndDt0eF90YWlsKTsKJiM0MzsJCQkgICB0eF9oZWFkX3VubWFza2VkLCB0eF90YWlsX3VubWFza2VkKTsKIAogCQlyZXR1cm4gLUVOT01TRzsKIAl9CkBAIC0xMjMsMTcgJiM0MzsxMzQsMTggQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCQlya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShwcml2LCB0cywgJmFtcDtmcmFtZV9sZW4pOwogCiAJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7dHhfdGFpbCwgcHJpdi0mZ3Q7dHhfdGFpbCAmIzQzOyAxKTsKJiM0MzsJCSp0eF9kb25lID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiAJCW5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtJmd0O25kZXYsIDAsIDEsIGZyYW1lX2xlbiwKIAkJCQkJICAgICAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksCiAJCQkJCSAgICAgIFJLQ0FORkRfVFhfU1RBUlRfVEhSRVNIT0xEKTsKIAotCQkqdHhfZG9uZSA9IHRydWU7Ci0KIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCEocHJpdi0mZ3Q7ZGV2dHlwZV9kYXRhLnF1aXJrcyAmYW1wOyBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy4KIAkgKgpAQCAtMTQzLDcgJiM0MzsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJICovCiAJaWYgKCEoY2ZkX25vbWluYWwtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUcpIHx8CiAJICAgIChjZmRfcngtJmd0O2Nhbl9pZCAmYW1wOyBDQU5fRUZGX0ZMQUcpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIHN0YW5kYXJkIHBhcnQgYW5kIFJUUiBmbGFnIG9mIHRoZSBUWCYjMzk7ZWQgZnJhbWUKQEAgLTE1MSwyMCAmIzQzOzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCiAJICovCiAJaWYgKChjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSAhPQogCSAgICAoY2ZkX3J4LSZndDtjYW5faWQgJmFtcDsgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKQotCQlyZXR1cm4gMDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIE5vdCBhZmZlY3RlZCBpZjoKIAkgKiAtIGxlbmd0aCBpcyBub3QgdGhlIHNhbWUKIAkgKi8KIAlpZiAoY2ZkX25vbWluYWwtJmd0O2xlbiAhPSBjZmRfcngtJmd0O2xlbikKLQkJcmV0dXJuIDA7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBOb3QgYWZmZWN0ZWQgaWY6CiAJICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnQKIAkgKi8KIAlpZiAoIShjZmRfbm9taW5hbC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9SVFJfRkxBRykgJmFtcDsmYW1wOwogCSAgICBtZW1jbXAoY2ZkX25vbWluYWwtJmd0O2RhdGEsIGNmZF9yeC0mZ3Q7ZGF0YSwgY2ZkX25vbWluYWwtJmd0O2xlbikpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogQWZmZWN0ZWQgYnkgRXJyYXR1bSA2ICovCiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3JrY2FuZmRfc3RhdHMtJmd0O3N5bmNwKTsKQEAgLTE4NSw2ICYjNDM7MTk3LDkgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCiAJcmtjYW5mZF94bWl0X3JldHJ5KHByaXYpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O3R4X2xvY2ssIGZsYWdzKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwppbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYwpAQCAtMTQsNiAmIzQzOzE0LDggQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogCWNvbnN0IHN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CiAKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3ByaXYtJmd0O3R4X2xvY2spOwomIzQzOwogCWlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0zMywxMyAmIzQzOzM1LDIyIEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKIAlyZXR1cm4gY2ZkLSZndDtjYW5faWQgJmFtcDsgQ0FOX0VGRl9GTEFHOwogfQogCi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKJiM0Mzt1bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdikKIHsKJiM0MzsJdW5zaWduZWQgaW50IHR4X2ZyZWU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCWlmIChwcml2LSZndDtkZXZ0eXBlX2RhdGEucXVpcmtzICZhbXA7IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNiAmYW1wOyZhbXA7CiAJICAgIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYocHJpdikpCi0JCXJldHVybiAwOwomIzQzOwkJdHhfZnJlZSA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXR4X2ZyZWUgPSBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpOwogCi0JcmV0dXJuIHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiB0eF9mcmVlOwogfQogCiBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsCkBAIC01Nyw4ICYjNDM7NjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LAogCiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KQogewotCWNvbnN0IHVuc2lnbmVkIGludCB0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTsKLQljb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTsKJiM0MzsJY29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X3RhaWwpOwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiAKIAlya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpOwogfQpAQCAtNjksNiAmIzQzOzgyLDcgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7CiAJdW5zaWduZWQgaW50IHR4X2hlYWQsIGZyYW1lX2xlbjsKIAljb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCXU4IGk7CiAKQEAgLTg4LDcgJiM0MzsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JY2ZkID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CXR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwomIzQzOwlmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTsKJiM0MzsJZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CQluZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybiBORVRERVZfVFhfT0s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X2hlYWRdOwomIzQzOwljZmQgPSAoY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLSZndDtkYXRhOwogCiAJaWYgKGNmZC0mZ3Q7Y2FuX2lkICZhbXA7IENBTl9FRkZfRkxBRykgewogCQlyZWdfZnJhbWVpbmZvID0gUktDQU5GRF9SRUdfRkRfRlJBTUVJTkZPX0ZSQU1FX0ZPUk1BVDsKQEAgLTExNCw3ICYjNDM7MTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQkJCQkgICAgY2ZkLSZndDtsZW4pOwogCX0KIAotCXR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpOwogCXJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpOwogCiAJcmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWEZSQU1FSU5GTywgcmVnX2ZyYW1laW5mbyk7CkBAIC0xMjMsMTQgJiM0MzsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCQlya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgJiM0MzsgaSwKIAkJCSAgICAgICoodTMyICopKGNmZC0mZ3Q7ZGF0YSAmIzQzOyBpKSk7CiAKLQlmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTsKLQllcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTsKLQlpZiAoIWVycikKLQkJbmV0ZGV2X3NlbnRfcXVldWUocHJpdi0mZ3Q7bmRldiwgZnJhbWVfbGVuKTsKJiM0MzsJbmV0ZGV2X3NlbnRfcXVldWUocHJpdi0mZ3Q7bmRldiwgZnJhbWVfbGVuKTsKIAogCVdSSVRFX09OQ0UocHJpdi0mZ3Q7dHhfaGVhZCwgcHJpdi0mZ3Q7dHhfaGVhZCAmIzQzOyAxKTsKIAogCXJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDt0eF9sb2NrLCBmbGFncyk7CiAKIAluZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtJmd0O25kZXYsIDAsCiAJCQkJICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSwKQEAgLTE0Nyw2ICYjNDM7MTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsCiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7dHhfbG9jayk7CiYjNDM7CiAJdHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7CiAJc2tiID0gcHJpdi0mZ3Q7Y2FuLmVjaG9fc2tiW3R4X3RhaWxdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCmluZGV4IDk1YmVhOWJmZDhhMmYuLjJkYzNhNDFhZmUzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldGRldmljZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Jlc2V0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaW5sb2NrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGltZWNvdW50ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3U2NF9zdGF0c19zeW5jLmgmZ3Q7CkBAIC00NzQsNiAmIzQzOzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYgewogCXN0cnVjdCBjYW5fcnhfb2ZmbG9hZCBvZmZsb2FkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCiYjNDM7CXNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi8KIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJdW5zaWduZWQgaW50IHR4X2hlYWQ7CiAJdW5zaWduZWQgaW50IHR4X3RhaWw7CkBAIC01NTYsNyAmIzQzOzU1OCw3IEBAIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RhcnQoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Aoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7CiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIAotdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwomIzQzO3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTsKIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpOwogbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMKaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jCkBAIC03ODcsNyAmIzQzOzc4NywxMCBAQCBzdGF0aWMgaW50IGhpMzExMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZV9pcnE6CiYjNDM7CXByaXYtJmd0O2ZvcmNlX3F1aXQgPSAxOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtoaTMxMTBfbG9jayk7CiAJZnJlZV9pcnEoc3BpLSZndDtpcnEsIHByaXYpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7aGkzMTEwX2xvY2spOwogCWhpMzExMF9od19zbGVlcChzcGkpOwogIG91dF9jbG9zZToKIAloaTMxMTBfcG93ZXJfZW5hYmxlKHByaXYtJmd0O3RyYW5zY2VpdmVyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jCmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYwpAQCAtMTY5LDcgJiM0MzsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHsKIAl1OCByeGVycjsKIAl1OCB0eGVycjsKIAl1OCB2YWw7Ci19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsKJiM0Mzt9IF9fcGFja2VkOwogCiBzdHJ1Y3QgZjgxNjA0X3NmZiB7CiAJX19iZTE2IGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMKaW5kZXggZWZiYjdiZWQzNGM5ZC4uZWZlN2IzZWY0ODliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jCkBAIC01MzYsNiAmIzQzOzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovCiYjNDM7c3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHN0cnVjdCBrdmFzZXJfY21kICpjbWQsCiYjNDM7CQkJCQlzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pCiYjNDM7ewomIzQzOwlpZiAocmVtYWluaW5nICZsdDsgc2l6ZW9mKGNtZC0mZ3Q7aGVhZGVyLmNtZF9ubykpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKJiM0MzsJaWYgKGNtZC0mZ3Q7aGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgJmFtcDsmYW1wOwomIzQzOwkgICAgcmVtYWluaW5nICZsdDsgb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KSkKJiM0MzsJCXJldHVybiAtRUFHQUlOOwomIzQzOwomIzQzOwkqY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTsKJiM0MzsJaWYgKCEqY21kX2xlbikKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKgoga3Zhc2VyX3VzYl9oeWRyYV9uZXRfcHJpdl9mcm9tX2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBrdmFzZXJfY21kICpjbWQpCkBAIC02NzUsOCAmIzQzOzY5Myw4IEBAIHN0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV93YWl0X2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LCB1OCBjbWRfbm8sCiAJCQlzaXplX3QgY21kX2xlbjsKIAogCQkJdG1wX2NtZCA9IGJ1ZiAmIzQzOyBwb3M7Ci0JCQljbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZSh0bXBfY21kKTsKLQkJCWlmIChwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGFjdHVhbF9sZW4pIHsKJiM0MzsJCQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHRtcF9jbWQsIGFjdHVhbF9sZW4gLSBwb3MsICZhbXA7Y21kX2xlbik7CiYjNDM7CQkJaWYgKGVyciB8fCBwb3MgJiM0MzsgY21kX2xlbiAmZ3Q7IGFjdHVhbF9sZW4pIHsKIAkJCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsCiAJCQkJCQkgICAgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKIAkJCQlicmVhazsKQEAgLTIxMjAsMjMgJiM0MzsyMTM4LDQ3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsCiAJc3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAJdXNiX3J4X2xlZnRvdmVyX2xlbiA9IGNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyX2xlbjsKIAlpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikgewomIzQzOwkJY29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7CiAJCWludCByZW1haW5pbmdfYnl0ZXM7CiYjNDM7CQlpbnQgZXJyOwogCiAJCWNtZCA9IChzdHJ1Y3Qga3Zhc2VyX2NtZCAqKWNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyOwogCi0JCWNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7CiYjNDM7CQlpZiAoY21kLSZndDtoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdXNiX3J4X2xlZnRvdmVyX2xlbiAmbHQ7IGNtZF9zaXplX2ZpZWxkX2VuZCkgewomIzQzOwkJCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KGludCwgbGVuLCBjbWRfc2l6ZV9maWVsZF9lbmQgLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTsKJiM0MzsKJiM0MzsJCQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLCByZW1haW5pbmdfYnl0ZXMpOwomIzQzOwkJCXVzYl9yeF9sZWZ0b3Zlcl9sZW4gJiM0Mzs9IHJlbWFpbmluZ19ieXRlczsKJiM0MzsJCQljYXJkX2RhdGEtJmd0O3VzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuOwomIzQzOwkJCXBvcyAmIzQzOz0gcmVtYWluaW5nX2J5dGVzOwogCi0JCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLAomIzQzOwkJCWlmICh1c2JfcnhfbGVmdG92ZXJfbGVuICZsdDsgY21kX3NpemVfZmllbGRfZW5kKSB7CiYjNDM7CQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiYjNDM7CQkJCXJldHVybjsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQllcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCWlmIChlcnIgfHwgY21kX2xlbiAmbHQ7IHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsICYjMzQ7Rm9ybWF0IGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDsKJiM0MzsJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLAogCQkJCQljbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7CiAJCS8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovCiAJCWlmIChyZW1haW5pbmdfYnl0ZXMgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiAmZ3Q7CiAJCQkJCQlLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7CiAJCQlkZXZfZXJyKCZhbXA7ZGV2LSZndDtpbnRmLSZndDtkZXYsICYjMzQ7Rm9ybWF0IGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQltZW1jcHkoY2FyZF9kYXRhLSZndDt1c2JfcnhfbGVmdG92ZXIgJiM0MzsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLAomIzQzOwkJbWVtY3B5KGNhcmRfZGF0YS0mZ3Q7dXNiX3J4X2xlZnRvdmVyICYjNDM7IHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiAmIzQzOyBwb3MsCiAJCSAgICAgICByZW1haW5pbmdfYnl0ZXMpOwogCQlwb3MgJiM0Mzs9IHJlbWFpbmluZ19ieXRlczsKIApAQCAtMjE1MiwxMSAmIzQzOzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldiwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpOwogCiAJd2hpbGUgKHBvcyAmbHQ7IGxlbikgewomIzQzOwkJaW50IGVycjsKJiM0MzsKIAkJY21kID0gYnVmICYjNDM7IHBvczsKIAotCQljbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpOwomIzQzOwkJZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIGxlbiAtIHBvcywgJmFtcDtjbWRfbGVuKTsKJiM0MzsJCWlmIChlcnIgJmFtcDsmYW1wOyBlcnIgIT0gLUVBR0FJTikgewomIzQzOwkJCWRldl9lcnIoJmFtcDtkZXYtJmd0O2ludGYtJmd0O2RldiwgJiMzNDtGb3JtYXQgZXJyb3JcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiAKLQkJaWYgKHBvcyAmIzQzOyBjbWRfbGVuICZndDsgbGVuKSB7CiYjNDM7CQlpZiAoZXJyID09IC1FQUdBSU4gfHwgcG9zICYjNDM7IGNtZF9sZW4gJmd0OyBsZW4pIHsKIAkJCS8qIFdlIGdvdCBmaXJzdCBwYXJ0IG9mIGEgY29tbWFuZCAqLwogCQkJaW50IGxlZnRvdmVyX2J5dGVzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaCBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCmluZGV4IGE3MGEwMjk2NzA3MTEuLjc4YzU4NzBlMmY5YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oCkBAIC03NiwxMiAmIzQzOzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIW5za2IpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwomIzQzOwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJY2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLSZndDtzayk7Ci0JY29uc3VtZV9za2Ioc2tiKTsKJiM0MzsJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOwogCXJldHVybiBuc2tiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA3YmM4NmIxNzZiNGRlLi5lZjQzNWYyMmFjOTMzIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTIyNiw3ICYjNDM7MjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKQogCQlnb3RvIGludmFsX3NrYjsKIAl9CiAKLQlpZiAodW5saWtlbHkoc2tiLSZndDtkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikpIHsKJiM0MzsJaWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoc2tiLSZndDtkZXYpKSkgewogCQllcnIgPSAtRVBFUk07CiAJCWdvdG8gaW52YWxfc2tiOwogCX0KQEAgLTQ1Miw3ICYjNDM7NDUyLDcgQEAgaW50IGNhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLAogCiAJLyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtJmd0OyAoZnVuYyxkYXRhKSAqLwogCi0JaWYgKGRldiAmYW1wOyZhbXA7IChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikpKQomIzQzOwlpZiAoZGV2ICZhbXA7JmFtcDsgIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChkZXYgJmFtcDsmYW1wOyAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSkKQEAgLTUxOSw3ICYjNDM7NTE5LDcgQEAgdm9pZCBjYW5fcnhfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLAogCXN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtJmd0O2Nhbi5yY3ZfbGlzdHNfc3RhdHM7CiAJc3RydWN0IGNhbl9kZXZfcmN2X2xpc3RzICpkZXZfcmN2X2xpc3RzOwogCi0JaWYgKGRldiAmYW1wOyZhbXA7IGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoZGV2ICZhbXA7JmFtcDsgIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAoZGV2ICZhbXA7JmFtcDsgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpCkBAIC02ODcsNyAmIzQzOzY4Nyw3IEBAIHN0YXRpYyB2b2lkIGNhbl9yZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCWlmICh1bmxpa2VseShkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHwKJiM0MzsJaWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAogCQkgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7CiAJCXByX3dhcm5fb25jZSgmIzM0O1BGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXG4mIzM0OywKIAkJCSAgICAgZGV2LSZndDt0eXBlLCBza2ItJmd0O2xlbik7CkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbmZkX3NrYihza2IpKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxuJiMzNDssCiAJCQkgICAgIGRldi0mZ3Q7dHlwZSwgc2tiLSZndDtsZW4pOwpAQCAtNzE5LDcgJiM0Mzs3MTksNyBAQCBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogc3RhdGljIGludCBjYW54bF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaWYgKHVubGlrZWx5KGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fAomIzQzOwlpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8CiAJCSAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbnhsX3NrYihza2IpKSkgewogCQlwcl93YXJuX29uY2UoJiMzNDtQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIFhMIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxuJiMzNDssCiAJCQkgICAgIGRldi0mZ3Q7dHlwZSwgc2tiLSZndDtsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggM2Q2MzdhMWUwYWMxYS4uNjA0MDY0MzlhMTNmNyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2JjbS5jCkBAIC01NCw2ICYjNDM7NTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jYW4vY2FuLW1sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vc2tiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2JjbS5oJmd0OwpAQCAtMTcxOSw3ICYjNDM7MTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCQlnb3RvIG91dF9yZWxlYXNlOwogCQkJfQogCi0JCQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJCQlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7CiAJCQkJZGV2X3B1dChkZXYpOwogCQkJCXJldCA9IC1FTk9ERVY7CiAJCQkJZ290byBvdXRfcmVsZWFzZTsKQEAgLTE4NjcsNyAmIzQzOzE4NjgsNyBAQCBzdGF0aWMgaW50IGJjbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC0yMDI0LDcgJiM0MzsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludAogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZmFpbDsKIAkJfQotCQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pIHsKJiM0MzsJCWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJCWRldl9wdXQoZGV2KTsKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2d3LmMgYi9uZXQvY2FuL2d3LmMKaW5kZXggMGVjOTlmNjhhYTQ1Mi4uZDk5MTJkZWE3MzhiYSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9ndy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vZ3cuYwpAQCAtNTIsNiAmIzQzOzUyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9hcnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY2FuL2Nhbi1tbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuL3NrYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9ndy5oJmd0OwpAQCAtNjA5LDcgJiM0Mzs2MTAsNyBAQCBzdGF0aWMgaW50IGNnd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChtc2cgPT0gTkVUREVWX1VOUkVHSVNURVIpIHsKQEAgLTExNjAsNyAmIzQzOzExNjEsNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlpZiAoIWd3ai0mZ3Q7c3JjLmRldikKIAkJZ290byBvdXQ7CiAKLQlpZiAoZ3dqLSZndDtzcmMuZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGd3ai0mZ3Q7c3JjLmRldikpCiAJCWdvdG8gb3V0OwogCiAJZ3dqLSZndDtkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLSZndDtjY2d3LmRzdF9pZHgpOwpAQCAtMTE2OCw3ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCWlmICghZ3dqLSZndDtkc3QuZGV2KQogCQlnb3RvIG91dDsKIAotCWlmIChnd2otJmd0O2RzdC5kZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikKJiM0MzsJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLSZndDtkc3QuZGV2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiBpcyBzZW5kaW5nIHRoZSBza2IgYmFjayB0byB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIGludGVuZGVkPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vaXNvdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmMKQEAgLTY1LDYgJiM0Mzs2NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FuLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9jYW4tbWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nhbi9za2IuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYW4vaXNvdHAuaCZndDsKQEAgLTE2MDYsNyAmIzQzOzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbAogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKSB7CiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcHV0X2RldjsKIAl9CkBAIC0xODkzLDcgJiM0MzsxODk0LDcgQEAgc3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZywKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAKLQlpZiAoZGV2LSZndDt0eXBlICE9IEFSUEhSRF9DQU4pCiYjNDM7CWlmICghY2FuX2dldF9tbF9wcml2KGRldikpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAlpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSICZhbXA7JmFtcDsgbXNnICE9IE5FVERFVl9ET1dOKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuYwppbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NAotLS0gYS9uZXQvY2FuL3Jhdy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vcmF3LmMKQEAgLTM0NCw3ICYjNDM7MzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOwogCi0JaWYgKGRldi0mZ3Q7dHlwZSAhPSBBUlBIUkRfQ0FOKQomIzQzOwlpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAJaWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiAmYW1wOyZhbXA7IG1zZyAhPSBORVRERVZfRE9XTikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNDg3LDcgJiM0Mzs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlbgogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmIChkZXYtJmd0O3R5cGUgIT0gQVJQSFJEX0NBTikgewomIzQzOwkJaWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0X3B1dF9kZXY7CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDY4CgkJCQkJCQlvdXRwdXQ6IDIwNwoJCQkJCQkJdGhvdWdodHM6IDEwNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ0FOIFN1YnN5c3RlbSBQYXRjaCBTZXJpZXMgUmV2aWV3OiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgQ0FOIHN1YnN5c3RlbSBwYXRjaCBzZXJpZXMuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmb2N1cyBteSBhbmFseXNpcy4gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGNoYW5nZWQgZmlsZXMgY2FyZWZ1bGx5LgoKRmlyc3QgdXAsIGBjYWxjX2JpdHRpbWluZy5jYCB1c2VzIGBkaXY2NF91NjRgIGFuZCBgbXVsX3UzMl91MzJgIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvd3MgYW5kIHRoZSBgYWJzX2RpZmZgIG1hY3JvLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyB0aGVyZTsgdGhpcyBpcyBnb29kLCBzb2xpZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcuCgpUaGVuLCBgc2tiLmNgIHN3aXRjaGVzIHRvIGBkZXZfa2ZyZWVfc2tiX2FueWAgYW5kIGFkZHMgYSBjaGVjayBmb3IgQ0FOX0NBUF9YTC4gU291bmRzIGxpa2UgYSBzdGFuZGFyZCBTS0IgY2xlYW51cC9zYWZldHkgaW1wcm92ZW1lbnQsIG5vdCBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIHJlYWRzLgoKYGt2YXNlcl9wY2llZmRfY29yZS5jYCByZXBsYWNlcyBgdGltZXJfZGVsZXRlYCB3aXRoIGB0aW1lcl9zaHV0ZG93bl9zeW5jYC4gRmluZS4gTm8gcHJvYmxlbS4KCkluIHRoZSBgcm9ja2NoaXBfY2FuZmRgIGZpbGVzLCB3ZSBzZWUgYHNwaW5fbG9ja19pbml0YCBhbmQgcHJvdGVjdGVkIGFjY2Vzc2VzIGZvciB0aGUgVFggcGF0aC4gVGhpcyBpcyBhbGwgYWJvdXQgdGhyZWFkIHNhZmV0eSwgYnV0IHRoZXJlJiMzOTtzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuCgpgaGkzMTF4LmNgIGFkZHMgYSBgZm9yY2VfcXVpdGAgZmxhZyBhbmQgbXV0ZXggcHJvdGVjdGlvbiBhcm91bmQgYGZyZWVfaXJxYC4gQWdhaW4sIHRoaXMgbG9va3MgbGlrZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgYW5kIGxvY2tpbmcsIG5vdCB1bmluaXRpYWxpemVkIGRhdGEgaXNzdWVzLgoKVGhlIHJlbW92YWwgb2YgYF9fYWxpZ25lZCg0KWAgZnJvbSBgZjgxNjA0LmNgJiMzOTtzIGBpbnRfZGF0YWAgc3RydWN0dXJlIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSByZW1vdmluZyBhbGlnbm1lbnQsIG5vdCBpbnRyb2R1Y2luZyBuZXcgdmFyaWFibGVzIG9yIHN0cnVjdHMuCgpOb3csIHRoZSBga3Zhc2VyX3VzYl9oeWRyYS5jYCBjaGFuZ2VzIGFyZSBhIGxpdHRsZSBtb3JlIGludGVyZXN0aW5nLCBlc3BlY2lhbGx5IHRoZSBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgIGZ1bmN0aW9uLiBJIGhhZCBhIGRlZXBlciBsb29rLCBzcGVjaWZpY2FsbHkgYXQgdGhlIGNoYW5nZXMgdG8gaG93IGl0IGhhbmRsZXMgY29tbWFuZCBmcmFnbWVudGF0aW9uLiBJdCBhZGRzIHNpemUgY2hlY2tzLCBjb3BpZXMgZGF0YSBpbnRvIGB1c2JfcnhfbGVmdG92ZXJgLCBhbmQgdmVyaWZpZXMgdGhhdCBpdCBkb2VzbiYjMzk7dCByZWFkIG91dCBvZiBib3VuZHMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uICpyZWNlaXZlcyogZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlLiBUaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaXRzZWxmLCBvciBpcyB0aGUgZGV2aWNlJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCBhbmQgaXMgYmVpbmcgd3JpdHRlbiBpbnRvIHRoZSBidWZmZXIuIElmIHRoZSBkZXZpY2UgZG9lc24mIzM5O3QgcHJvdmlkZSBlbm91Z2ggZGF0YSwgd2Ugbm93IGdldCBgLUVBR0FJTmAgaW5zdGVhZCBvZiBwb3RlbnRpYWxseSByZWFkaW5nIGdhcmJhZ2UuIFRoaXMgaXMgZ29vZDogdGhlIGRhdGEgY29tZXMgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UsIHdoaWNoIG1ha2VzIGl0IHNhZmUuCgpUaGUgY2hhbmdlcyBpbiBgc2tiLmhgIGFyZSBqdXN0IG1vcmUgU0tCIG1hbmFnZW1lbnQgdXBkYXRlcyAodXNpbmcgYGRldl9rZnJlZV9za2JfYW55YCBhbmQgYGRldl9jb25zdW1lX3NrYl9hbnlgKSwgc2FmZS4KCkZpbmFsbHksIHRoZSBgYWZfY2FuLmNgLCBgYmNtLmNgLCBgZ3cuY2AsIGBpc290cC5jYCwgYW5kIGByYXcuY2AgdXBkYXRlcyB1c2luZyBgIWNhbl9nZXRfbWxfcHJpdihkZXYpYCBkb24mIzM5O3QgcHJlc2VudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpTbywgb3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGxvY2tpbmcgZml4ZXMsIGJvdW5kcyBjaGVja3MsIDMyLWJpdCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhIHRpbWVyIHNodXRkb3duLCBhbmQgaW1wcm92ZWQgVVNCIGNvbW1hbmQgaGFuZGxpbmcuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIFVTQiBjaGFuZ2VzIGNhcmVmdWxseSBoYW5kbGUgdGhlIGRhdGEgY29taW5nICpmcm9tKiB0aGUgZGV2aWNlLiBUaGUgQ0FOIGNoYW5nZXMgZGVhbCB3aXRoIHRoZSB2ZXJ5IG1hdHVyZSBTS0IgbWFuYWdlbWVudCBhbmQgY29ycmVjdCBsb2NraW5nL3N5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgZmluZS4KClRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyAqbm90KiB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgbGlrZSBvdXQtb2YtYm91bmRzIHJlYWRzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgZGVhZGxvY2tzIHRoYXQgbWlnaHQgY3JvcCB1cC4gVGhpcyBpcyBhIHNvbGlkIHBhdGNoIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyMjowMS40NzA1MDkxNDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTAyOTQxNDg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fQkNNXCIsXG4gICAgXCJDQU5fR1dcIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX1JBV1wiLFxuICAgIFwiQ0FOX0tWQVNFUl9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYW5fc2VuZFwiLFxuICAgIFwiY2FuX3JjdlwiLFxuICAgIFwiY2FuZmRfcmN2XCIsXG4gICAgXCJjYW54bF9yY3ZcIixcbiAgICBcImJjbV9zZW5kbXNnXCIsXG4gICAgXCJiY21fY29ubmVjdFwiLFxuICAgIFwiY2d3X2NyZWF0ZV9qb2JcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcInJhd19iaW5kXCIsXG4gICAgXCJrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCwgd2hpY2ggYWZmZWN0cyBob3cgQ0FOIGRldmljZXMgYXJlIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCBhY3Jvc3MgdmFyaW91cyBDQU4gcHJvdG9jb2xzIChSQVcsIEJDTSwgR1csIElTT1RQKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIncyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjIyOjAxLjQ3MDUxNjIxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NDQzMjYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTI6MjE6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXFxuaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcXG5AQCAtMTE5LDggKzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCxcXG4gXFx0ICAgICB0c2VnIFxcdTAwM2U9IChidGMtXFx1MDAzZXRzZWcxX21pbiArIGJ0Yy1cXHUwMDNldHNlZzJfbWluKSAqIDI7IHRzZWctLSkge1xcbiBcXHRcXHR0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICsgdHNlZyAvIDI7XFxuIFxcbi1cXHRcXHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpICovXFxuLVxcdFxcdGJycCA9IHByaXYtXFx1MDAzZWNsb2NrLmZyZXEgLyAodHNlZ2FsbCAqIGJ0LVxcdTAwM2ViaXRyYXRlKSArIHRzZWcgJSAyO1xcbitcXHRcXHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpLlxcbitcXHRcXHQgKiBBIDMyIGJpdCB0c2VnYWxsICogYnQtXFx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcXG4rXFx0XFx0ICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGJycCA9IGRpdjY0X3U2NChwcml2LVxcdTAwM2VjbG9jay5mcmVxLFxcbitcXHRcXHRcXHRcXHRtdWxfdTMyX3UzMih0c2VnYWxsLCBidC1cXHUwMDNlYml0cmF0ZSkpICsgdHNlZyAlIDI7XFxuIFxcbiBcXHRcXHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXFxuIFxcdFxcdGJycCA9IChicnAgLyBidGMtXFx1MDAzZWJycF9pbmMpICogYnRjLVxcdTAwM2VicnBfaW5jO1xcbkBAIC0xMjgsNyArMTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0Yml0cmF0ZSA9IHByaXYtXFx1MDAzZWNsb2NrLmZyZXEgLyAoYnJwICogdHNlZ2FsbCk7XFxuLVxcdFxcdGJpdHJhdGVfZXJyb3IgPSBhYnMoYnQtXFx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcXG4rXFx0XFx0Yml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LVxcdTAwM2ViaXRyYXRlLCBiaXRyYXRlKTtcXG4gXFxuIFxcdFxcdC8qIHRzZWcgYnJwIGJpdGVycm9yICovXFxuIFxcdFxcdGlmIChiaXRyYXRlX2Vycm9yIFxcdTAwM2UgYmVzdF9iaXRyYXRlX2Vycm9yKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xcbmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcXG5AQCAtNCw2ICs0LDcgQEBcXG4gICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciBcXHUwMDNjd2dAZ3JhbmRlZ2dlci5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2Nhbi5oXFx1MDAzZVxcbkBAIC01NCw2ICs1NSw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChpZHggXFx1MDAzZT0gcHJpdi1cXHUwMDNlZWNob19za2JfbWF4KSB7XFxuIFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiJXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgX19mdW5jX18sIGlkeCwgcHJpdi1cXHUwMDNlZWNob19za2JfbWF4KTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuQEAgLTYyLDcgKzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0ICAgIChza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgICBza2ItXFx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgIHNrYi1cXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOWEwpKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTkwLDcgKzkyLDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LyogbG9ja2luZyBwcm9ibGVtIHdpdGggbmV0aWZfc3RvcF9xdWV1ZSgpID8/ICovXFxuIFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiJXM6IEJVRyEgZWNob19za2IgJWQgaXMgb2NjdXBpZWQhXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KTtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMyw3ICsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXFxuIFxcbiBcXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcXG4gXFx0aWYgKCFjc3gpIHtcXG4tXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdFxcdGdvdG8gb3V0X2Vycm9yX2NjO1xcbiBcXHR9XFxuIFxcbkBAIC0yNTQsNyArMjU2LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XFxuIFxcdGlmICghY3N4KSB7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnJvcl9mZDtcXG4gXFx0fVxcbiBcXG5AQCAtMjkyLDcgKzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xcbiBcXHRpZiAoIWNzeCkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0Z290byBvdXRfZXJyb3JfeGw7XFxuIFxcdH1cXG4gXFxuQEAgLTM4NCw3ICszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0Y2FzZSBFVEhfUF9DQU5YTDpcXG4tXFx0XFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXFxuK1xcdFxcdGlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSlcXG4gXFx0XFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xcbkBAIC0xNzM5LDYgKzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSlcXG4gXFx0XFx0XFx0aW93cml0ZTMyKDAsIGNhbi1cXHUwMDNlcmVnX2Jhc2UgKyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XFxuIFxcdFxcdFxcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcXG4gXFx0XFx0XFx0a3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pO1xcbitcXHRcXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZjYW4tXFx1MDAzZWJlY19wb2xsX3RpbWVyKTtcXG4gXFx0XFx0XFx0ZnJlZV9jYW5kZXYoY2FuLVxcdTAwM2VjYW4uZGV2KTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTE4NzksNyArMTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtXFx1MDAzZWNhbltpXTtcXG4gXFxuIFxcdFxcdHVucmVnaXN0ZXJfY2FuZGV2KGNhbi1cXHUwMDNlY2FuLmRldik7XFxuLVxcdFxcdHRpbWVyX2RlbGV0ZShcXHUwMDI2Y2FuLVxcdTAwM2ViZWNfcG9sbF90aW1lcik7XFxuK1xcdFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNmNhbi1cXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xcbiBcXHRcXHRrdmFzZXJfcGNpZWZkX3B3bV9zdG9wKGNhbik7XFxuIFxcdFxcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcXG5AQCAtOTIxLDYgKzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwcml2LVxcdTAwM2VjYW4uZG9fc2V0X21vZGUgPSBya2NhbmZkX3NldF9tb2RlO1xcbiBcXHRwcml2LVxcdTAwM2VjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjtcXG4gXFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4gXFxuIFxcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXHRpZiAobWF0Y2gpIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xcbmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xcbkBAIC0xMDAsMTQgKzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XFxuIFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGlmICghcmtjYW5mZF9nZXRfdHhfcGVuZGluZyhwcml2KSlcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0dHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7XFxuIFxcdHNrYiA9IHByaXYtXFx1MDAzZWNhbi5lY2hvX3NrYlt0eF90YWlsXTtcXG4gXFx0aWYgKCFza2IpIHtcXG4rXFx0XFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVxcdTAwM2V0eF9oZWFkO1xcbitcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfdGFpbF91bm1hc2tlZCA9IHByaXYtXFx1MDAzZXR4X3RhaWw7XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHRcXHRuZXRkZXZfZXJyKHByaXYtXFx1MDAzZW5kZXYsXFxuIFxcdFxcdFxcdCAgIFxcXCIlczogZWNob19za2JbJXVdPU5VTEwgdHhfaGVhZD0weCUwOHggdHhfdGFpbD0weCUwOHhcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxcbi1cXHRcXHRcXHQgICBwcml2LVxcdTAwM2V0eF9oZWFkLCBwcml2LVxcdTAwM2V0eF90YWlsKTtcXG4rXFx0XFx0XFx0ICAgdHhfaGVhZF91bm1hc2tlZCwgdHhfdGFpbF91bm1hc2tlZCk7XFxuIFxcbiBcXHRcXHRyZXR1cm4gLUVOT01TRztcXG4gXFx0fVxcbkBAIC0xMjMsMTcgKzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdFxcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcXHUwMDI2ZnJhbWVfbGVuKTtcXG4gXFxuIFxcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNldHhfdGFpbCwgcHJpdi1cXHUwMDNldHhfdGFpbCArIDEpO1xcbitcXHRcXHQqdHhfZG9uZSA9IHRydWU7XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuIFxcdFxcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXFx1MDAzZW5kZXYsIDAsIDEsIGZyYW1lX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJLQ0FORkRfVFhfU1RBUlRfVEhSRVNIT0xEKTtcXG4gXFxuLVxcdFxcdCp0eF9kb25lID0gdHJ1ZTtcXG4tXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIShwcml2LVxcdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFxcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIEVycmF0dW0gNjogRXh0ZW5kZWQgZnJhbWVzIG1heSBiZSBzZW5kIGFzIHN0YW5kYXJkIGZyYW1lcy5cXG4gXFx0ICpcXG5AQCAtMTQzLDcgKzE1NSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcXG4gXFx0ICovXFxuIFxcdGlmICghKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHx8XFxuIFxcdCAgICAoY2ZkX3J4LVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0LyogTm90IGFmZmVjdGVkIGlmOlxcbiBcXHQgKiAtIHN0YW5kYXJkIHBhcnQgYW5kIFJUUiBmbGFnIG9mIHRoZSBUWCdlZCBmcmFtZVxcbkBAIC0xNTEsMjAgKzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXFxuIFxcdCAqL1xcbiBcXHRpZiAoKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cXG4gXFx0ICAgIChjZmRfcngtXFx1MDAzZWNhbl9pZCBcXHUwMDI2IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIE5vdCBhZmZlY3RlZCBpZjpcXG4gXFx0ICogLSBsZW5ndGggaXMgbm90IHRoZSBzYW1lXFxuIFxcdCAqL1xcbiBcXHRpZiAoY2ZkX25vbWluYWwtXFx1MDAzZWxlbiAhPSBjZmRfcngtXFx1MDAzZWxlbilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qIE5vdCBhZmZlY3RlZCBpZjpcXG4gXFx0ICogLSB0aGUgZGF0YSBvZiBub24gUlRSIGZyYW1lcyBpcyBkaWZmZXJlbnRcXG4gXFx0ICovXFxuIFxcdGlmICghKGNmZF9ub21pbmFsLVxcdTAwM2VjYW5faWQgXFx1MDAyNiBDQU5fUlRSX0ZMQUcpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBtZW1jbXAoY2ZkX25vbWluYWwtXFx1MDAzZWRhdGEsIGNmZF9yeC1cXHUwMDNlZGF0YSwgY2ZkX25vbWluYWwtXFx1MDAzZWxlbikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cXG4gXFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2cmtjYW5mZF9zdGF0cy1cXHUwMDNlc3luY3ApO1xcbkBAIC0xODUsNiArMTk3LDkgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxcbiBcXG4gXFx0cmtjYW5mZF94bWl0X3JldHJ5KHByaXYpO1xcbiBcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcXG5pbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcXG5AQCAtMTQsNiArMTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuIFxcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbiBcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jayk7XFxuK1xcbiBcXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTMzLDEzICszNSwyMiBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiBjZmQtXFx1MDAzZWNhbl9pZCBcXHUwMDI2IENBTl9FRkZfRkxBRztcXG4gfVxcbiBcXG4tdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXFxuK3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxcbiB7XFxuK1xcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuIFxcdGlmIChwcml2LVxcdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFxcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82IFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKHByaXYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0dHhfZnJlZSA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XFxuIFxcbi1cXHRyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIHR4X2ZyZWU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcXG5AQCAtNTcsOCArNjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxcbiBcXG4gdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcXG4ge1xcbi1cXHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XFxuLVxcdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcXG4rXFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xcbitcXHRjb25zdCB1MzIgcmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfdGFpbCk7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4gXFxuIFxcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XFxuIH1cXG5AQCAtNjksNiArODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHUzMiByZWdfZnJhbWVpbmZvLCByZWdfaWQsIHJlZ19jbWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0eF9oZWFkLCBmcmFtZV9sZW47XFxuIFxcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpO1xcbiBcXG5AQCAtODgsNyArMTAyLDE5IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbi1cXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xcbitcXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcXG4rXFx0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XFxuK1xcdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdFxcdG5kZXYtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcXG4rXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4rXFx0fVxcbitcXG4rXFx0c2tiID0gcHJpdi1cXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xcbitcXHRjZmQgPSAoY29uc3Qgc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXG4gXFx0aWYgKGNmZC1cXHUwMDNlY2FuX2lkIFxcdTAwMjYgQ0FOX0VGRl9GTEFHKSB7XFxuIFxcdFxcdHJlZ19mcmFtZWluZm8gPSBSS0NBTkZEX1JFR19GRF9GUkFNRUlORk9fRlJBTUVfRk9STUFUO1xcbkBAIC0xMTQsNyArMTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY2ZkLVxcdTAwM2VsZW4pO1xcbiBcXHR9XFxuIFxcbi1cXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcXG4gXFx0cmVnX2NtZCA9IFJLQ0FORkRfUkVHX0NNRF9UWF9SRVEodHhfaGVhZCk7XFxuIFxcbiBcXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYRlJBTUVJTkZPLCByZWdfZnJhbWVpbmZvKTtcXG5AQCAtMTIzLDE0ICsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRcXHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgKyBpLFxcbiBcXHRcXHRcXHQgICAgICAqKHUzMiAqKShjZmQtXFx1MDAzZWRhdGEgKyBpKSk7XFxuIFxcbi1cXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcXG4tXFx0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XFxuLVxcdGlmICghZXJyKVxcbi1cXHRcXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVxcdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xcbitcXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVxcdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xcbiBcXG4gXFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2V0eF9oZWFkLCBwcml2LVxcdTAwM2V0eF9oZWFkICsgMSk7XFxuIFxcbiBcXHRya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrLCBmbGFncyk7XFxuIFxcbiBcXHRuZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtXFx1MDAzZW5kZXYsIDAsXFxuIFxcdFxcdFxcdFxcdCAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXFxuQEAgLTE0Nyw2ICsxNzAsOCBAQCB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cyxcXG4gXFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9sb2NrKTtcXG4rXFxuIFxcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xcbiBcXHRza2IgPSBwcml2LVxcdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXFxuaW5kZXggOTViZWE5YmZkOGEyZi4uMmRjM2E0MWFmZTMyZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVzZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG5AQCAtNDc0LDYgKzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYge1xcbiBcXHRzdHJ1Y3QgY2FuX3J4X29mZmxvYWQgb2ZmbG9hZDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuIFxcbitcXHRzcGlubG9ja190IHR4X2xvY2s7IC8qIHByb3RlY3RzIHR4X2hlYWQsIHR4X3RhaWwgYW5kIGVjaG9fc2tiICovXFxuIFxcdHZvaWQgX19pb21lbSAqcmVncztcXG4gXFx0dW5zaWduZWQgaW50IHR4X2hlYWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0eF90YWlsO1xcbkBAIC01NTYsNyArNTU4LDcgQEAgdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdGFydChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdG9wKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gXFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcXG4gbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcXG4gdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmMgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXFxuaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xcbkBAIC03ODcsNyArNzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiAgb3V0X2ZyZWVfaXJxOlxcbitcXHRwcml2LVxcdTAwM2Vmb3JjZV9xdWl0ID0gMTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VoaTMxMTBfbG9jayk7XFxuIFxcdGZyZWVfaXJxKHNwaS1cXHUwMDNlaXJxLCBwcml2KTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlaGkzMTEwX2xvY2spO1xcbiBcXHRoaTMxMTBfaHdfc2xlZXAoc3BpKTtcXG4gIG91dF9jbG9zZTpcXG4gXFx0aGkzMTEwX3Bvd2VyX2VuYWJsZShwcml2LVxcdTAwM2V0cmFuc2NlaXZlciwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXFxuaW5kZXggZjEyMzE4MjY4ZTQ2Yi4uNGMxNDdiOWQ2ZDY5MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xcbkBAIC0xNjksNyArMTY5LDcgQEAgc3RydWN0IGY4MTYwNF9pbnRfZGF0YSB7XFxuIFxcdHU4IHJ4ZXJyO1xcbiBcXHR1OCB0eGVycjtcXG4gXFx0dTggdmFsO1xcbi19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTtcXG4rfSBfX3BhY2tlZDtcXG4gXFxuIHN0cnVjdCBmODE2MDRfc2ZmIHtcXG4gXFx0X19iZTE2IGlkO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xcbmluZGV4IGVmYmI3YmVkMzRjOWQuLmVmZTdiM2VmNDg5YmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcXG5AQCAtNTM2LDYgKzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovXFxuK3N0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHRcXHRzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pXFxuK3tcXG4rXFx0aWYgKHJlbWFpbmluZyBcXHUwMDNjIHNpemVvZihjbWQtXFx1MDAzZWhlYWRlci5jbWRfbm8pKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuK1xcdGlmIChjbWQtXFx1MDAzZWhlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICByZW1haW5pbmcgXFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuK1xcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xcbitcXHRpZiAoISpjbWRfbGVuKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKlxcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBrdmFzZXJfY21kICpjbWQpXFxuQEAgLTY3NSw4ICs2OTMsOCBAQCBzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfd2FpdF9jbWQoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwgdTggY21kX25vLFxcbiBcXHRcXHRcXHRzaXplX3QgY21kX2xlbjtcXG4gXFxuIFxcdFxcdFxcdHRtcF9jbWQgPSBidWYgKyBwb3M7XFxuLVxcdFxcdFxcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpO1xcbi1cXHRcXHRcXHRpZiAocG9zICsgY21kX2xlbiBcXHUwMDNlIGFjdHVhbF9sZW4pIHtcXG4rXFx0XFx0XFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcXHUwMDI2Y21kX2xlbik7XFxuK1xcdFxcdFxcdGlmIChlcnIgfHwgcG9zICsgY21kX2xlbiBcXHUwMDNlIGFjdHVhbF9sZW4pIHtcXG4gXFx0XFx0XFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRm9ybWF0IGVycm9yXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuQEAgLTIxMjAsMjMgKzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XFxuIFxcdHVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSBjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XFxuIFxcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XFxuK1xcdFxcdGNvbnN0IHNpemVfdCBjbWRfc2l6ZV9maWVsZF9lbmQgPSBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpO1xcbiBcXHRcXHRpbnQgcmVtYWluaW5nX2J5dGVzO1xcbitcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0Y21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXI7XFxuIFxcbi1cXHRcXHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xcbitcXHRcXHRpZiAoY21kLVxcdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdXNiX3J4X2xlZnRvdmVyX2xlbiBcXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xcbitcXHRcXHRcXHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdChpbnQsIGxlbiwgY21kX3NpemVfZmllbGRfZW5kIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XFxuK1xcbitcXHRcXHRcXHRtZW1jcHkoY2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7XFxuK1xcdFxcdFxcdHVzYl9yeF9sZWZ0b3Zlcl9sZW4gKz0gcmVtYWluaW5nX2J5dGVzO1xcbitcXHRcXHRcXHRjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuO1xcbitcXHRcXHRcXHRwb3MgKz0gcmVtYWluaW5nX2J5dGVzO1xcbiBcXG4tXFx0XFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sXFxuK1xcdFxcdFxcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuIFxcdTAwM2MgY21kX3NpemVfZmllbGRfZW5kKSB7XFxuK1xcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgdXNiX3J4X2xlZnRvdmVyX2xlbiwgXFx1MDAyNmNtZF9sZW4pO1xcbitcXHRcXHRpZiAoZXJyIHx8IGNtZF9sZW4gXFx1MDAzYyB1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmRldi1cXHUwMDNlaW50Zi1cXHUwMDNlZGV2LCBcXFwiRm9ybWF0IGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Y2FyZF9kYXRhLVxcdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiAtIHBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0Y21kX2xlbiAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xcbiBcXHRcXHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJmbG93IHVzYl9yeF9sZWZ0b3ZlciAqL1xcbiBcXHRcXHRpZiAocmVtYWluaW5nX2J5dGVzICsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcXHUwMDNlXFxuIFxcdFxcdFxcdFxcdFxcdFxcdEtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHtcXG4gXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2ZGV2LVxcdTAwM2VpbnRmLVxcdTAwM2VkZXYsIFxcXCJGb3JtYXQgZXJyb3JcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdG1lbWNweShjYXJkX2RhdGEtXFx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZixcXG4rXFx0XFx0bWVtY3B5KGNhcmRfZGF0YS1cXHUwMDNldXNiX3J4X2xlZnRvdmVyICsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmICsgcG9zLFxcbiBcXHRcXHQgICAgICAgcmVtYWluaW5nX2J5dGVzKTtcXG4gXFx0XFx0cG9zICs9IHJlbWFpbmluZ19ieXRlcztcXG4gXFxuQEAgLTIxNTIsMTEgKzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcXG4gXFxuIFxcdHdoaWxlIChwb3MgXFx1MDAzYyBsZW4pIHtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuIFxcdFxcdGNtZCA9IGJ1ZiArIHBvcztcXG4gXFxuLVxcdFxcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XFxuK1xcdFxcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCBsZW4gLSBwb3MsIFxcdTAwMjZjbWRfbGVuKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xcbitcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZkZXYtXFx1MDAzZWludGYtXFx1MDAzZWRldiwgXFxcIkZvcm1hdCBlcnJvclxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHBvcyArIGNtZF9sZW4gXFx1MDAzZSBsZW4pIHtcXG4rXFx0XFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyArIGNtZF9sZW4gXFx1MDAzZSBsZW4pIHtcXG4gXFx0XFx0XFx0LyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovXFxuIFxcdFxcdFxcdGludCBsZWZ0b3Zlcl9ieXRlcztcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcXG5pbmRleCBhNzBhMDI5NjcwNzExLi43OGM1ODcwZTJmOWEyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcXG5AQCAtNzYsMTIgKzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuIFxcdGNhbl9za2Jfc2V0X293bmVyKG5za2IsIHNrYi1cXHUwMDNlc2spO1xcbi1cXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XFxuIFxcdHJldHVybiBuc2tiO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uY1xcbmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9hZl9jYW4uY1xcbisrKyBiL25ldC9jYW4vYWZfY2FuLmNcXG5AQCAtMjI2LDcgKzIyNiw3IEBAIGludCBjYW5fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbG9vcClcXG4gXFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh1bmxpa2VseShza2ItXFx1MDAzZWRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSkge1xcbitcXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXFx1MDAzZWRldikpKSB7XFxuIFxcdFxcdGVyciA9IC1FUEVSTTtcXG4gXFx0XFx0Z290byBpbnZhbF9za2I7XFxuIFxcdH1cXG5AQCAtNDUyLDcgKzQ1Miw3IEBAIGludCBjYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcXG4gXFxuIFxcdC8qIGluc2VydCBuZXcgcmVjZWl2ZXIgIChkZXYsY2FuaWQsbWFzaykgLVxcdTAwM2UgKGZ1bmMsZGF0YSkgKi9cXG4gXFxuLVxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpXFxuK1xcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXFxuQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXFxuIFxcdHN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtXFx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XFxuIFxcdHN0cnVjdCBjYW5fZGV2X3Jjdl9saXN0cyAqZGV2X3Jjdl9saXN0cztcXG4gXFxuLVxcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmIChkZXYgXFx1MDAyNlxcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoZGV2IFxcdTAwMjZcXHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG4ge1xcbi1cXHRpZiAodW5saWtlbHkoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XFxuK1xcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4gXFx0XFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FuX3NrYihza2IpKSkge1xcbiBcXHRcXHRwcl93YXJuX29uY2UoXFxcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgIGRldi1cXHUwMDNldHlwZSwgc2tiLVxcdTAwM2VsZW4pO1xcbkBAIC03MDMsNyArNzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4rXFx0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxcbiBcXHRcXHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5mZF9za2Ioc2tiKSkpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXR5cGUsIHNrYi1cXHUwMDNlbGVuKTtcXG5AQCAtNzE5LDcgKzcxOSw3IEBAIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIHN0YXRpYyBpbnQgY2FueGxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiB7XFxuLVxcdGlmICh1bmxpa2VseShkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcXG4rXFx0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxcbiBcXHRcXHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcXG4gXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIFhMIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgICBkZXYtXFx1MDAzZXR5cGUsIHNrYi1cXHUwMDNlbGVuKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmNcXG5pbmRleCAzZDYzN2ExZTBhYzFhLi42MDQwNjQzOWExM2Y3IDEwMDY0NFxcbi0tLSBhL25ldC9jYW4vYmNtLmNcXG4rKysgYi9uZXQvY2FuL2JjbS5jXFxuQEAgLTU0LDYgKzU0LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vYmNtLmhcXHUwMDNlXFxuQEAgLTE3MTksNyArMTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF9yZWxlYXNlO1xcbkBAIC0xODY3LDcgKzE4NjgsNyBAQCBzdGF0aWMgaW50IGJjbV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuIFxcbi1cXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXFxuIFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gXFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcXHUwMDI2XFx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXFxuIFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG5AQCAtMjAyNCw3ICsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludFxcbiBcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0ZGV2X3B1dChkZXYpO1xcbiBcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbiBcXHRcXHRcXHRnb3RvIGZhaWw7XFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vZ3cuYyBiL25ldC9jYW4vZ3cuY1xcbmluZGV4IDBlYzk5ZjY4YWE0NTIuLmQ5OTEyZGVhNzM4YmEgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9ndy5jXFxuKysrIGIvbmV0L2Nhbi9ndy5jXFxuQEAgLTUyLDYgKzUyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vZ3cuaFxcdTAwM2VcXG5AQCAtNjA5LDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpO1xcbiBcXG4tXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxcbitcXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxcbiBcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIFxcbiBcXHRpZiAobXNnID09IE5FVERFVl9VTlJFR0lTVEVSKSB7XFxuQEAgLTExNjAsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRpZiAoIWd3ai1cXHUwMDNlc3JjLmRldilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoZ3dqLVxcdTAwM2VzcmMuZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cXHUwMDNlc3JjLmRldikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0Z3dqLVxcdTAwM2Vkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLVxcdTAwM2VjY2d3LmRzdF9pZHgpO1xcbkBAIC0xMTY4LDcgKzExNjksNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0aWYgKCFnd2otXFx1MDAzZWRzdC5kZXYpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0aWYgKGd3ai1cXHUwMDNlZHN0LmRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxcbitcXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXFx1MDAzZWRzdC5kZXYpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovXFxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXFxuKysrIGIvbmV0L2Nhbi9pc290cC5jXFxuQEAgLTY1LDYgKzY1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vc2tiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jYW4vaXNvdHAuaFxcdTAwM2VcXG5AQCAtMTYwNiw3ICsxNjA3LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4tXFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0Z290byBvdXRfcHV0X2RldjtcXG4gXFx0fVxcbkBAIC0xODkzLDcgKzE4OTQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFxuLVxcdGlmIChkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcXG4rXFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiBcXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFxcdTAwMjZcXHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuY1xcbmluZGV4IDgyZDljMDQ5OWM5NWYuLjhlMmUxMTRhYmNiOTkgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xcbisrKyBiL25ldC9jYW4vcmF3LmNcXG5AQCAtMzQ0LDcgKzM0NCw3IEBAIHN0YXRpYyBpbnQgcmF3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxcbiB7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG4gXFxuLVxcdGlmIChkZXYtXFx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcXG4rXFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiBcXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFxcdTAwMjZcXHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIGludCByYXdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW5cXG4gXFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XFxuK1xcdFxcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gXFx0XFx0XFx0Z290byBvdXRfcHV0X2RldjtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyMjowMy4xNjU5NDE4MDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1ODk2OTE5NDAyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fQkNNXCIsXG4gICAgXCJDQU5fR1dcIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX1JBV1wiLFxuICAgIFwiQ0FOX0tWQVNFUl9VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjYW5fc2VuZFwiLFxuICAgIFwiY2FuX3JjdlwiLFxuICAgIFwiY2FuZmRfcmN2XCIsXG4gICAgXCJjYW54bF9yY3ZcIixcbiAgICBcImJjbV9zZW5kbXNnXCIsXG4gICAgXCJiY21fY29ubmVjdFwiLFxuICAgIFwiY2d3X2NyZWF0ZV9qb2JcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcInJhd19iaW5kXCIsXG4gICAgXCJrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nIHRvIHVzZSBgY2FuX2dldF9tbF9wcml2KGRldilgIGluc3RlYWQgb2YgY2hlY2tpbmcgYGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCwgd2hpY2ggYWZmZWN0cyBob3cgQ0FOIGRldmljZXMgYXJlIGlkZW50aWZpZWQgYW5kIHZhbGlkYXRlZCBhY3Jvc3MgdmFyaW91cyBDQU4gcHJvdG9jb2xzIChSQVcsIEJDTSwgR1csIElTT1RQKS4gSXQgYWxzbyBmaXhlcyBhIGJ1ZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIncyBidWxrIHJlYWQgY2FsbGJhY2sgdG8gcHJvcGVybHkgaGFuZGxlIHBhcnRpYWwgY29tbWFuZHMgYW5kIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBDQU4gc29ja2V0cyBhbmQgbmV0bGluaywgYXMgd2VsbCBhcyB0aHJvdWdoIFVTQiBlbXVsYXRpb24sIGFuZCBoYXZlIGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhYTU3OGRiNzBjYTVmMTY3MTZkZDhjZmMyODQ3MTA1YmI2Yjk0MWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxMjoyMTo1OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuaW5kZXggNDI0OThlOWQzZjM4ZC4uMjc4OWI5OWFiNmE4MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvY2FsY19iaXR0aW1pbmcuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG5AQCAtMTE5LDggKzExOSwxMiBAQCBpbnQgY2FuX2NhbGNfYml0dGltaW5nKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCxcbiBcdCAgICAgdHNlZyBcdTAwM2U9IChidGMtXHUwMDNldHNlZzFfbWluICsgYnRjLVx1MDAzZXRzZWcyX21pbikgKiAyOyB0c2VnLS0pIHtcbiBcdFx0dHNlZ2FsbCA9IENBTl9TWU5DX1NFRyArIHRzZWcgLyAyO1xuIFxuLVx0XHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpICovXG4tXHRcdGJycCA9IHByaXYtXHUwMDNlY2xvY2suZnJlcSAvICh0c2VnYWxsICogYnQtXHUwMDNlYml0cmF0ZSkgKyB0c2VnICUgMjtcbitcdFx0LyogQ29tcHV0ZSBhbGwgcG9zc2libGUgdHNlZyBjaG9pY2VzICh0c2VnPXRzZWcxK3RzZWcyKS5cbitcdFx0ICogQSAzMiBiaXQgdHNlZ2FsbCAqIGJ0LVx1MDAzZWJpdHJhdGUgY2FuIHdyYXAgdG8gemVybyBmb3IgbGFyZ2VcbitcdFx0ICogdXNlcnNwYWNlIGJpdHJhdGVzLCBzbyBjb21wdXRlIHRoZSBwcm9kdWN0IGluIDY0IGJpdC5cbitcdFx0ICovXG4rXHRcdGJycCA9IGRpdjY0X3U2NChwcml2LVx1MDAzZWNsb2NrLmZyZXEsXG4rXHRcdFx0XHRtdWxfdTMyX3UzMih0c2VnYWxsLCBidC1cdTAwM2ViaXRyYXRlKSkgKyB0c2VnICUgMjtcbiBcbiBcdFx0LyogY2hvb3NlIGJycCBzdGVwIHdoaWNoIGlzIHBvc3NpYmxlIGluIHN5c3RlbSAqL1xuIFx0XHRicnAgPSAoYnJwIC8gYnRjLVx1MDAzZWJycF9pbmMpICogYnRjLVx1MDAzZWJycF9pbmM7XG5AQCAtMTI4LDcgKzEzMiw3IEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRiaXRyYXRlID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKGJycCAqIHRzZWdhbGwpO1xuLVx0XHRiaXRyYXRlX2Vycm9yID0gYWJzKGJ0LVx1MDAzZWJpdHJhdGUgLSBiaXRyYXRlKTtcbitcdFx0Yml0cmF0ZV9lcnJvciA9IGFic19kaWZmKGJ0LVx1MDAzZWJpdHJhdGUsIGJpdHJhdGUpO1xuIFxuIFx0XHQvKiB0c2VnIGJycCBiaXRlcnJvciAqL1xuIFx0XHRpZiAoYml0cmF0ZV9lcnJvciBcdTAwM2UgYmVzdF9iaXRyYXRlX2Vycm9yKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG5pbmRleCA5NWZjZGMxMDI2ZjgwLi5mYWFmYjEwMzNkNDIzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY1xuQEAgLTQsNiArNCw3IEBAXG4gICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciBcdTAwM2N3Z0BncmFuZGVnZ2VyLmNvbVx1MDAzZVxuICAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9kZXYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2Nhbi5oXHUwMDNlXG5AQCAtNTQsNiArNTUsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGlkeCBcdTAwM2U9IHByaXYtXHUwMDNlZWNob19za2JfbWF4KSB7XG4gXHRcdG5ldGRldl9lcnIoZGV2LCBcIiVzOiBCVUchIFRyeWluZyB0byBhY2Nlc3MgY2FuX3ByaXY6OmVjaG9fc2tiIG91dCBvZiBib3VuZHMgKCV1L21heCAldSlcXG5cIixcbiBcdFx0XHQgICBfX2Z1bmNfXywgaWR4LCBwcml2LVx1MDAzZWVjaG9fc2tiX21heCk7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuQEAgLTYyLDcgKzY0LDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdCAgICAoc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTikgXHUwMDI2XHUwMDI2XG4gXHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5GRCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIHNrYi1cdTAwM2Vwcm90b2NvbCAhPSBodG9ucyhFVEhfUF9DQU5YTCkpKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MCw3ICs5Miw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBsb2NraW5nIHByb2JsZW0gd2l0aCBuZXRpZl9zdG9wX3F1ZXVlKCkgPz8gKi9cbiBcdFx0bmV0ZGV2X2VycihkZXYsIFwiJXM6IEJVRyEgZWNob19za2IgJWQgaXMgb2NjdXBpZWQhXFxuXCIsIF9fZnVuY19fLCBpZHgpO1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdH1cbiBcbkBAIC0yMjMsNyArMjI1LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2Nhbl9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9mcmFtZSAqKmNmKVxuIFxuIFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG4gXHRpZiAoIWNzeCkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfY2M7XG4gXHR9XG4gXG5AQCAtMjU0LDcgKzI1Niw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW5mZF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuIFx0aWYgKCFjc3gpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gb3V0X2Vycm9yX2ZkO1xuIFx0fVxuIFxuQEAgLTI5Miw3ICsyOTQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FueGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIG91dF9lcnJvcl94bDtcbiBcdH1cbiBcbkBAIC0zODQsNyArMzg2LDcgQEAgYm9vbCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRicmVhaztcbiBcbiBcdGNhc2UgRVRIX1BfQ0FOWEw6XG4tXHRcdGlmICghY2FuX2lzX2NhbnhsX3NrYihza2IpKVxuK1x0XHRpZiAoIWNhbl9jYXBfZW5hYmxlZChkZXYsIENBTl9DQVBfWEwpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4gXHRcdFx0Z290byBpbnZhbF9za2I7XG4gXHRcdGJyZWFrO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbmluZGV4IGQ4YzliZmIyMDIzMDQuLmEwNTk3ZGI3MjA4NjQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmNcbkBAIC0xNzM5LDYgKzE3MzksNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfcGNpZWZkX3RlYXJkb3duX2Nhbl9jdHJscyhzdHJ1Y3Qga3Zhc2VyX3BjaWVmZCAqcGNpZSlcbiBcdFx0XHRpb3dyaXRlMzIoMCwgY2FuLVx1MDAzZXJlZ19iYXNlICsgS1ZBU0VSX1BDSUVGRF9LQ0FOX0lFTl9SRUcpO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcbiBcdFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4rXHRcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuIFx0XHRcdGZyZWVfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbiBcdFx0fVxuIFx0fVxuQEAgLTE4NzksNyArMTg4MCw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRzdHJ1Y3Qga3Zhc2VyX3BjaWVmZF9jYW4gKmNhbiA9IHBjaWUtXHUwMDNlY2FuW2ldO1xuIFxuIFx0XHR1bnJlZ2lzdGVyX2NhbmRldihjYW4tXHUwMDNlY2FuLmRldik7XG4tXHRcdHRpbWVyX2RlbGV0ZShcdTAwMjZjYW4tXHUwMDNlYmVjX3BvbGxfdGltZXIpO1xuK1x0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4gXHRcdGt2YXNlcl9wY2llZmRfcHdtX3N0b3AoY2FuKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9kZXZsaW5rX3BvcnRfdW5yZWdpc3RlcihjYW4pO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5pbmRleCAzN2MxYzIyYzQwYzlmLi4xY2FlODY5NzNkYTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuY1xuQEAgLTkyMSw2ICs5MjEsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHByaXYtXHUwMDNlY2FuLmRvX3NldF9tb2RlID0gcmtjYW5mZF9zZXRfbW9kZTtcbiBcdHByaXYtXHUwMDNlY2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBya2NhbmZkX2dldF9iZXJyX2NvdW50ZXI7XG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdG1hdGNoID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcdGlmIChtYXRjaCkge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbmluZGV4IDI0ZTg3ZGFhMWRmMDAuLjU5NDIwMjMzYzkxODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmNcbkBAIC0xMDAsMTQgKzEwMCwyNSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZF9ub21pbmFsO1xuIFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHR0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiBcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X3RhaWxdO1xuIFx0aWYgKCFza2IpIHtcbitcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWRfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X2hlYWQ7XG4rXHRcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsX3VubWFza2VkID0gcHJpdi1cdTAwM2V0eF90YWlsO1xuK1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmRldixcbiBcdFx0XHQgICBcIiVzOiBlY2hvX3NrYlsldV09TlVMTCB0eF9oZWFkPTB4JTA4eCB0eF90YWlsPTB4JTA4eFxcblwiLFxuIFx0XHRcdCAgIF9fZnVuY19fLCB0eF90YWlsLFxuLVx0XHRcdCAgIHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF90YWlsKTtcbitcdFx0XHQgICB0eF9oZWFkX3VubWFza2VkLCB0eF90YWlsX3VubWFza2VkKTtcbiBcbiBcdFx0cmV0dXJuIC1FTk9NU0c7XG4gXHR9XG5AQCAtMTIzLDE3ICsxMzQsMTggQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0XHRya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShwcml2LCB0cywgXHUwMDI2ZnJhbWVfbGVuKTtcbiBcbiBcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXR4X3RhaWwsIHByaXYtXHUwMDNldHhfdGFpbCArIDEpO1xuK1x0XHQqdHhfZG9uZSA9IHRydWU7XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXHRcdG5ldGlmX3N1YnF1ZXVlX2NvbXBsZXRlZF93YWtlKHByaXYtXHUwMDNlbmRldiwgMCwgMSwgZnJhbWVfbGVuLFxuIFx0XHRcdFx0XHQgICAgICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbiBcdFx0XHRcdFx0ICAgICAgUktDQU5GRF9UWF9TVEFSVF9USFJFU0hPTEQpO1xuIFxuLVx0XHQqdHhfZG9uZSA9IHRydWU7XG4tXG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0aWYgKCEocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogRXJyYXR1bSA2OiBFeHRlbmRlZCBmcmFtZXMgbWF5IGJlIHNlbmQgYXMgc3RhbmRhcmQgZnJhbWVzLlxuIFx0ICpcbkBAIC0xNDMsNyArMTU1LDcgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0ICovXG4gXHRpZiAoIShjZmRfbm9taW5hbC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRykgfHxcbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gc3RhbmRhcmQgcGFydCBhbmQgUlRSIGZsYWcgb2YgdGhlIFRYJ2VkIGZyYW1lXG5AQCAtMTUxLDIwICsxNjMsMjAgQEAgc3RhdGljIGludCBya2NhbmZkX3J4c3R4X2ZpbHRlcihzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFx0ICovXG4gXHRpZiAoKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpICE9XG4gXHQgICAgKGNmZF9yeC1cdTAwM2VjYW5faWQgXHUwMDI2IChDQU5fUlRSX0ZMQUcgfCBDQU5fU0ZGX01BU0spKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gbGVuZ3RoIGlzIG5vdCB0aGUgc2FtZVxuIFx0ICovXG4gXHRpZiAoY2ZkX25vbWluYWwtXHUwMDNlbGVuICE9IGNmZF9yeC1cdTAwM2VsZW4pXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBOb3QgYWZmZWN0ZWQgaWY6XG4gXHQgKiAtIHRoZSBkYXRhIG9mIG5vbiBSVFIgZnJhbWVzIGlzIGRpZmZlcmVudFxuIFx0ICovXG4gXHRpZiAoIShjZmRfbm9taW5hbC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9SVFJfRkxBRykgXHUwMDI2XHUwMDI2XG4gXHQgICAgbWVtY21wKGNmZF9ub21pbmFsLVx1MDAzZWRhdGEsIGNmZF9yeC1cdTAwM2VkYXRhLCBjZmRfbm9taW5hbC1cdTAwM2VsZW4pKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogQWZmZWN0ZWQgYnkgRXJyYXR1bSA2ICovXG4gXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJrY2FuZmRfc3RhdHMtXHUwMDNlc3luY3ApO1xuQEAgLTE4NSw2ICsxOTcsOSBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXG4gXHRya2NhbmZkX3htaXRfcmV0cnkocHJpdik7XG4gXG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuaW5kZXggMTIyMDBkY2ZkMzM4OS4uYjM2NzM0MWRkMGFlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguY1xuQEAgLTE0LDYgKzE0LDggQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuK1xuIFx0aWYgKCFya2NhbmZkX2dldF90eF9wZW5kaW5nKHByaXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMzMsMTMgKzM1LDIyIEBAIHN0YXRpYyBib29sIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdilcbiBcdHJldHVybiBjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUc7XG4gfVxuIFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuK3Vuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIHtcbitcdHVuc2lnbmVkIGludCB0eF9mcmVlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuIFx0aWYgKHByaXYtXHUwMDNlZGV2dHlwZV9kYXRhLnF1aXJrcyBcdTAwMjYgUktDQU5GRF9RVUlSS19SSzM1NjhfRVJSQVRVTV82IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHJrY2FuZmRfdHhfdGFpbF9pc19lZmYocHJpdikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHR0eF9mcmVlID0gMDtcbitcdGVsc2VcbitcdFx0dHhfZnJlZSA9IHJrY2FuZmRfZ2V0X3R4X2ZyZWUocHJpdik7XG4gXG4tXHRyZXR1cm4gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gdHhfZnJlZTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuQEAgLTU3LDggKzY4LDEwIEBAIHN0YXRpYyB2b2lkIHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcbiB2b2lkIHJrY2FuZmRfeG1pdF9yZXRyeShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIHtcbi1cdGNvbnN0IHVuc2lnbmVkIGludCB0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcbi1cdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcbitcdGNvbnN0IHVuc2lnbmVkIGludCB0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbitcdGNvbnN0IHUzMiByZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF90YWlsKTtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrKTtcbiBcbiBcdHJrY2FuZmRfc3RhcnRfeG1pdF93cml0ZV9jbWQocHJpdiwgcmVnX2NtZCk7XG4gfVxuQEAgLTY5LDYgKzgyLDcgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0dTMyIHJlZ19mcmFtZWluZm8sIHJlZ19pZCwgcmVnX2NtZDtcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkLCBmcmFtZV9sZW47XG4gXHRjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmZDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgZXJyO1xuIFx0dTggaTtcbiBcbkBAIC04OCw3ICsxMDIsMTkgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG4tXHRjZmQgPSAoc3RydWN0IGNhbmZkX2ZyYW1lICopc2tiLVx1MDAzZWRhdGE7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcdHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuK1x0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4rXHRlcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTtcbitcdGlmIChlcnIpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbitcdFx0bmRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4rXHR9XG4rXG4rXHRza2IgPSBwcml2LVx1MDAzZWNhbi5lY2hvX3NrYlt0eF9oZWFkXTtcbitcdGNmZCA9IChjb25zdCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbiBcbiBcdGlmIChjZmQtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpIHtcbiBcdFx0cmVnX2ZyYW1laW5mbyA9IFJLQ0FORkRfUkVHX0ZEX0ZSQU1FSU5GT19GUkFNRV9GT1JNQVQ7XG5AQCAtMTE0LDcgKzE0MCw2IEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0XHRcdFx0ICAgIGNmZC1cdTAwM2VsZW4pO1xuIFx0fVxuIFxuLVx0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4gXHRyZWdfY21kID0gUktDQU5GRF9SRUdfQ01EX1RYX1JFUSh0eF9oZWFkKTtcbiBcbiBcdHJrY2FuZmRfd3JpdGUocHJpdiwgUktDQU5GRF9SRUdfRkRfVFhGUkFNRUlORk8sIHJlZ19mcmFtZWluZm8pO1xuQEAgLTEyMywxNCArMTQ4LDEyIEBAIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdFx0cmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWERBVEEwICsgaSxcbiBcdFx0XHQgICAgICAqKHUzMiAqKShjZmQtXHUwMDNlZGF0YSArIGkpKTtcbiBcbi1cdGZyYW1lX2xlbiA9IGNhbl9za2JfZ2V0X2ZyYW1lX2xlbihza2IpO1xuLVx0ZXJyID0gY2FuX3B1dF9lY2hvX3NrYihza2IsIG5kZXYsIHR4X2hlYWQsIGZyYW1lX2xlbik7XG4tXHRpZiAoIWVycilcbi1cdFx0bmV0ZGV2X3NlbnRfcXVldWUocHJpdi1cdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xuK1x0bmV0ZGV2X3NlbnRfcXVldWUocHJpdi1cdTAwM2VuZGV2LCBmcmFtZV9sZW4pO1xuIFxuIFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXR4X2hlYWQsIHByaXYtXHUwMDNldHhfaGVhZCArIDEpO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4gXG4gXHRuZXRpZl9zdWJxdWV1ZV9tYXliZV9zdG9wKHByaXYtXHUwMDNlbmRldiwgMCxcbiBcdFx0XHRcdCAgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUocHJpdiksXG5AQCAtMTQ3LDYgKzE3MCw4IEBAIHZvaWQgcmtjYW5mZF9oYW5kbGVfdHhfZG9uZV9vbmUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdiwgY29uc3QgdTMyIHRzLFxuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuK1xuIFx0dHhfdGFpbCA9IHJrY2FuZmRfZ2V0X3R4X3RhaWwocHJpdik7XG4gXHRza2IgPSBwcml2LVx1MDAzZWNhbi5lY2hvX3NrYlt0eF90YWlsXTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaCBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG5pbmRleCA5NWJlYTliZmQ4YTJmLi4yZGMzYTQxYWZlMzJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oXG5AQCAtMTUsNiArMTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmVzZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVjb3VudGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFx1MDAzZVxuQEAgLTQ3NCw2ICs0NzUsNyBAQCBzdHJ1Y3QgcmtjYW5mZF9wcml2IHtcbiBcdHN0cnVjdCBjYW5fcnhfb2ZmbG9hZCBvZmZsb2FkO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gXG4rXHRzcGlubG9ja190IHR4X2xvY2s7IC8qIHByb3RlY3RzIHR4X2hlYWQsIHR4X3RhaWwgYW5kIGVjaG9fc2tiICovXG4gXHR2b2lkIF9faW9tZW0gKnJlZ3M7XG4gXHR1bnNpZ25lZCBpbnQgdHhfaGVhZDtcbiBcdHVuc2lnbmVkIGludCB0eF90YWlsO1xuQEAgLTU1Niw3ICs1NTgsNyBAQCB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0YXJ0KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcChzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiB2b2lkIHJrY2FuZmRfdGltZXN0YW1wX3N0b3Bfc3luYyhzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbiBcbi11bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoY29uc3Qgc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIG5ldGRldl90eF90IHJrY2FuZmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG4gdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbmluZGV4IGFlOTBlNjcxNmRlNWIuLjJiZTg1MWU4OTA3ZDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jXG5AQCAtNzg3LDcgKzc4NywxMCBAQCBzdGF0aWMgaW50IGhpMzExMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXG4gXHRyZXR1cm4gMDtcbiBcbiAgb3V0X2ZyZWVfaXJxOlxuK1x0cHJpdi1cdTAwM2Vmb3JjZV9xdWl0ID0gMTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWhpMzExMF9sb2NrKTtcbiBcdGZyZWVfaXJxKHNwaS1cdTAwM2VpcnEsIHByaXYpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZWhpMzExMF9sb2NrKTtcbiBcdGhpMzExMF9od19zbGVlcChzcGkpO1xuICBvdXRfY2xvc2U6XG4gXHRoaTMxMTBfcG93ZXJfZW5hYmxlKHByaXYtXHUwMDNldHJhbnNjZWl2ZXIsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5pbmRleCBmMTIzMTgyNjhlNDZiLi40YzE0N2I5ZDZkNjkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xuKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuY1xuQEAgLTE2OSw3ICsxNjksNyBAQCBzdHJ1Y3QgZjgxNjA0X2ludF9kYXRhIHtcbiBcdHU4IHJ4ZXJyO1xuIFx0dTggdHhlcnI7XG4gXHR1OCB2YWw7XG4tfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7XG4rfSBfX3BhY2tlZDtcbiBcbiBzdHJ1Y3QgZjgxNjA0X3NmZiB7XG4gXHRfX2JlMTYgaWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbmluZGV4IGVmYmI3YmVkMzRjOWQuLmVmZTdiM2VmNDg5YmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jXG5AQCAtNTM2LDYgKzUzNiwyNCBAQCBzdGF0aWMgc2l6ZV90IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qIC1FQUdBSU4gbWVhbnMgaW5jb21wbGV0ZTsgLUVJTlZBTCByZWplY3RzIHplcm8gdG8gZW5zdXJlIHByb2dyZXNzLiAqL1xuK3N0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kLFxuK1x0XHRcdFx0XHRzaXplX3QgcmVtYWluaW5nLCBzaXplX3QgKmNtZF9sZW4pXG4re1xuK1x0aWYgKHJlbWFpbmluZyBcdTAwM2Mgc2l6ZW9mKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vKSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHRpZiAoY21kLVx1MDAzZWhlYWRlci5jbWRfbm8gPT0gQ01EX0VYVEVOREVEIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHJlbWFpbmluZyBcdTAwM2Mgb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KSlcbitcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4rXHQqY21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTtcbitcdGlmICghKmNtZF9sZW4pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqXG4ga3Zhc2VyX3VzYl9oeWRyYV9uZXRfcHJpdl9mcm9tX2NtZChjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGt2YXNlcl9jbWQgKmNtZClcbkBAIC02NzUsOCArNjkzLDggQEAgc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX3dhaXRfY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsIHU4IGNtZF9ubyxcbiBcdFx0XHRzaXplX3QgY21kX2xlbjtcbiBcbiBcdFx0XHR0bXBfY21kID0gYnVmICsgcG9zO1xuLVx0XHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKHRtcF9jbWQpO1xuLVx0XHRcdGlmIChwb3MgKyBjbWRfbGVuIFx1MDAzZSBhY3R1YWxfbGVuKSB7XG4rXHRcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeCh0bXBfY21kLCBhY3R1YWxfbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0XHRpZiAoZXJyIHx8IHBvcyArIGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbiBcdFx0XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LFxuIFx0XHRcdFx0XHRcdCAgICBcIkZvcm1hdCBlcnJvclxcblwiKTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTIxMjAsMjMgKzIxMzgsNDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fbG9ja19pcnFzYXZlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0dXNiX3J4X2xlZnRvdmVyX2xlbiA9IGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuO1xuIFx0aWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbitcdFx0Y29uc3Qgc2l6ZV90IGNtZF9zaXplX2ZpZWxkX2VuZCA9IG9mZnNldG9mKHN0cnVjdCBrdmFzZXJfY21kX2V4dCwgY21kX25vX2V4dCk7XG4gXHRcdGludCByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdGludCBlcnI7XG4gXG4gXHRcdGNtZCA9IChzdHJ1Y3Qga3Zhc2VyX2NtZCAqKWNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXI7XG4gXG4tXHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XG4rXHRcdGlmIChjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbitcdFx0XHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdChpbnQsIGxlbiwgY21kX3NpemVfZmllbGRfZW5kIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4rXG4rXHRcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYsIHJlbWFpbmluZ19ieXRlcyk7XG4rXHRcdFx0dXNiX3J4X2xlZnRvdmVyX2xlbiArPSByZW1haW5pbmdfYnl0ZXM7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSB1c2JfcnhfbGVmdG92ZXJfbGVuO1xuK1x0XHRcdHBvcyArPSByZW1haW5pbmdfYnl0ZXM7XG4gXG4tXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuK1x0XHRcdGlmICh1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzYyBjbWRfc2l6ZV9maWVsZF9lbmQpIHtcbitcdFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCB1c2JfcnhfbGVmdG92ZXJfbGVuLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0aWYgKGVyciB8fCBjbWRfbGVuIFx1MDAzYyB1c2JfcnhfbGVmdG92ZXJfbGVuKSB7XG4rXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuK1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbitcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1xuK1x0XHRyZW1haW5pbmdfYnl0ZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiAtIHBvcyxcbiBcdFx0XHRcdFx0Y21kX2xlbiAtIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pO1xuIFx0XHQvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG92ZXJmbG93IHVzYl9yeF9sZWZ0b3ZlciAqL1xuIFx0XHRpZiAocmVtYWluaW5nX2J5dGVzICsgdXNiX3J4X2xlZnRvdmVyX2xlbiBcdTAwM2VcbiBcdFx0XHRcdFx0XHRLVkFTRVJfVVNCX0hZRFJBX01BWF9DTURfTEVOKSB7XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuK1x0XHRcdGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXJfbGVuID0gMDtcbiBcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKHVzYl9yeF9sZWZ0b3Zlcl9sb2NrLCBpcnFfZmxhZ3MpO1xuIFx0XHRcdHJldHVybjtcbiBcdFx0fVxuIFxuLVx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZixcbitcdFx0bWVtY3B5KGNhcmRfZGF0YS1cdTAwM2V1c2JfcnhfbGVmdG92ZXIgKyB1c2JfcnhfbGVmdG92ZXJfbGVuLCBidWYgKyBwb3MsXG4gXHRcdCAgICAgICByZW1haW5pbmdfYnl0ZXMpO1xuIFx0XHRwb3MgKz0gcmVtYWluaW5nX2J5dGVzO1xuIFxuQEAgLTIxNTIsMTEgKzIxOTQsMTcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXG4gXHR3aGlsZSAocG9zIFx1MDAzYyBsZW4pIHtcbitcdFx0aW50IGVycjtcbitcbiBcdFx0Y21kID0gYnVmICsgcG9zO1xuIFxuLVx0XHRjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuK1x0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KGNtZCwgbGVuIC0gcG9zLCBcdTAwMjZjbWRfbGVuKTtcbitcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXG4tXHRcdGlmIChwb3MgKyBjbWRfbGVuIFx1MDAzZSBsZW4pIHtcbitcdFx0aWYgKGVyciA9PSAtRUFHQUlOIHx8IHBvcyArIGNtZF9sZW4gXHUwMDNlIGxlbikge1xuIFx0XHRcdC8qIFdlIGdvdCBmaXJzdCBwYXJ0IG9mIGEgY29tbWFuZCAqL1xuIFx0XHRcdGludCBsZWZ0b3Zlcl9ieXRlcztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaCBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG5pbmRleCBhNzBhMDI5NjcwNzExLi43OGM1ODcwZTJmOWEyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oXG5AQCAtNzYsMTIgKzc2LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmNhbl9jcmVhdGVfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBcdG5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTtcbiBcdGlmICh1bmxpa2VseSghbnNrYikpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuIFx0Y2FuX3NrYl9zZXRfb3duZXIobnNrYiwgc2tiLVx1MDAzZXNrKTtcbi1cdGNvbnN1bWVfc2tiKHNrYik7XG4rXHRkZXZfY29uc3VtZV9za2JfYW55KHNrYik7XG4gXHRyZXR1cm4gbnNrYjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9hZl9jYW4uYyBiL25ldC9jYW4vYWZfY2FuLmNcbmluZGV4IDdiYzg2YjE3NmI0ZGUuLmVmNDM1ZjIyYWM5MzMgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2FmX2Nhbi5jXG4rKysgYi9uZXQvY2FuL2FmX2Nhbi5jXG5AQCAtMjI2LDcgKzIyNiw3IEBAIGludCBjYW5fc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbG9vcClcbiBcdFx0Z290byBpbnZhbF9za2I7XG4gXHR9XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pKSB7XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihza2ItXHUwMDNlZGV2KSkpIHtcbiBcdFx0ZXJyID0gLUVQRVJNO1xuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbkBAIC00NTIsNyArNDUyLDcgQEAgaW50IGNhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNhbmlkX3QgY2FuX2lkLFxuIFxuIFx0LyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtXHUwMDNlIChmdW5jLGRhdGEpICovXG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikpKVxuK1x0aWYgKGRldiBcdTAwMjZcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxuQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIGNhbl9yeF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXHRzdHJ1Y3QgY2FuX3Jjdl9saXN0c19zdGF0cyAqcmN2X2xpc3RzX3N0YXRzID0gbmV0LVx1MDAzZWNhbi5yY3ZfbGlzdHNfc3RhdHM7XG4gXHRzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHM7XG4gXG4tXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiBkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKGRldiBcdTAwMjZcdTAwMjYgIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhbmV0X2VxKG5ldCwgZGV2X25ldChkZXYpKSlcbkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGNhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5fc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCIsXG4gXHRcdFx0ICAgICBkZXYtXHUwMDNldHlwZSwgc2tiLVx1MDAzZWxlbik7XG5AQCAtNzAzLDcgKzcwMyw3IEBAIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FuZmRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW5mZF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBGRCBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MTksNyArNzE5LDcgQEAgc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgaW50IGNhbnhsX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcbiB7XG4tXHRpZiAodW5saWtlbHkoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhY2FuX2dldF9tbF9wcml2KGRldikgfHxcbitcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KGRldikgfHxcbiBcdFx0ICAgICAhY2FuX3NrYl9leHRfZmluZChza2IpIHx8ICFjYW5faXNfY2FueGxfc2tiKHNrYikpKSB7XG4gXHRcdHByX3dhcm5fb25jZShcIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBDQU4gWEwgc2tidWZmOiBkZXYgdHlwZSAlZCwgbGVuICVkXFxuXCIsXG4gXHRcdFx0ICAgICBkZXYtXHUwMDNldHlwZSwgc2tiLVx1MDAzZWxlbik7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmNcbmluZGV4IDNkNjM3YTFlMGFjMWEuLjYwNDA2NDM5YTEzZjcgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2JjbS5jXG4rKysgYi9uZXQvY2FuL2JjbS5jXG5AQCAtNTQsNiArNTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2FycC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jYW4tbWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vc2tiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vYmNtLmhcdTAwM2VcbkBAIC0xNzE5LDcgKzE3MjAsNyBAQCBzdGF0aWMgaW50IGJjbV9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikge1xuK1x0XHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRcdHJldCA9IC1FTk9ERVY7XG4gXHRcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuQEAgLTE4NjcsNyArMTg2OCw3IEBAIHN0YXRpYyBpbnQgYmNtX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFx0aWYgKG1zZyAhPSBORVRERVZfVU5SRUdJU1RFUiBcdTAwMjZcdTAwMjYgbXNnICE9IE5FVERFVl9ET1dOKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG5AQCAtMjAyNCw3ICsyMDI1LDcgQEAgc3RhdGljIGludCBiY21fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludFxuIFx0XHRcdHJldCA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBmYWlsO1xuIFx0XHR9XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRkZXZfcHV0KGRldik7XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9ndy5jIGIvbmV0L2Nhbi9ndy5jXG5pbmRleCAwZWM5OWY2OGFhNDUyLi5kOTkxMmRlYTczOGJhIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9ndy5jXG4rKysgYi9uZXQvY2FuL2d3LmNcbkBAIC01Miw2ICs1Miw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9ndy5oXHUwMDNlXG5AQCAtNjA5LDcgKzYxMCw3IEBAIHN0YXRpYyBpbnQgY2d3X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcbiBcdGlmIChtc2cgPT0gTkVUREVWX1VOUkVHSVNURVIpIHtcbkBAIC0xMTYwLDcgKzExNjEsNyBAQCBzdGF0aWMgaW50IGNnd19jcmVhdGVfam9iKHN0cnVjdCBza19idWZmICpza2IsICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdGlmICghZ3dqLVx1MDAzZXNyYy5kZXYpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGd3ai1cdTAwM2VzcmMuZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGd3ai1cdTAwM2VzcmMuZGV2KSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRnd2otXHUwMDNlZHN0LmRldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGd3ai1cdTAwM2VjY2d3LmRzdF9pZHgpO1xuQEAgLTExNjgsNyArMTE2OSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlZHN0LmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZWRzdC5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLVx1MDAzZWRzdC5kZXYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIGlzIHNlbmRpbmcgdGhlIHNrYiBiYWNrIHRvIHRoZSBpbmNvbWluZyBpbnRlcmZhY2UgaW50ZW5kZWQ/ICovXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jXG5pbmRleCAxNTU1MzBhZWRjZTJlLi40NTYwZDVhNTY3ZWNmIDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXG4rKysgYi9uZXQvY2FuL2lzb3RwLmNcbkBAIC02NSw2ICs2NSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9pc290cC5oXHUwMDNlXG5AQCAtMTYwNiw3ICsxNjA3LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcbiBcdFx0ZXJyID0gLUVOT0RFVjtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikge1xuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dF9wdXRfZGV2O1xuIFx0fVxuQEAgLTE4OTMsNyArMTg5NCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL3Jhdy5jIGIvbmV0L2Nhbi9yYXcuY1xuaW5kZXggODJkOWMwNDk5Yzk1Zi4uOGUyZTExNGFiY2I5OSAxMDA2NDRcbi0tLSBhL25ldC9jYW4vcmF3LmNcbisrKyBiL25ldC9jYW4vcmF3LmNcbkBAIC0zNDQsNyArMzQ0LDcgQEAgc3RhdGljIGludCByYXdfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbkBAIC00ODcsNyArNDg3LDcgQEAgc3RhdGljIGludCByYXdfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW5cbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpIHtcbiBcdFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHRcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjIyOjAzLjE2NTk0NDI1OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDE2OTA3NTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBDQU4gU3Vic3lzdGVtIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhlc2UgY2hhbmdlcyB0byB0aGUgQ0FOIHN1YnN5c3RlbS4gRnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyB0aGUgYnJlYWR0aCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gV2UgaGF2ZSBjaGFuZ2VzIHRvdWNoaW5nIHZhcmlvdXMgbGV2ZWxzLCBmcm9tIGxvdy1sZXZlbCBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucyBhbGwgdGhlIHdheSB1cCB0byB1c2VyLXNwYWNlIGludGVyYWN0aW9ucy5cblxuMS4gICoqU2FmZXR5IGFuZCBDb3JyZWN0bmVzczoqKiBUaGUgbW9kaWZpY2F0aW9ucyB0byBgZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jYCB3aXRoIHRoZSBgZGl2NjRfdTY0YCwgYG11bF91MzJfdTMyYCwgYW5kIGBhYnNfZGlmZmAgcmVwbGFjZSBpcyBjcml0aWNhbC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHBvdGVudGlhbCAzMi1iaXQgd3JhcC1hcm91bmQgaXNzdWVzLCB3aGljaCBhcmUgc3VidGxlIGJ1dCBjYW4gbGVhZCB0byBpbmNvcnJlY3QgYml0IHRpbWluZyBjb25maWd1cmF0aW9ucy4gU2ltaWxhcmx5LCB0aGUgcmVwbGFjZW1lbnQgb2YgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGluIHNldmVyYWwgZmlsZXMsIHBhcnRpY3VsYXJseSBgZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L2Nhbi9za2IuaGAsIGFuZCBgY29uc3VtZV9za2JgIHdpdGggYGRldl9jb25zdW1lX3NrYl9hbnlgIGluIGluY2x1ZGUsIGluZGljYXRlcyBhbiBlZmZvcnQgdG8gaW1wcm92ZSByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWxseSBwcmV2ZW50IG1lbW9yeSBsZWFrcywgZXNwZWNpYWxseSBvbiBlcnJvciBwYXRocy4gVGhlIGxvY2tpbmcgY2hhbmdlcyB0byBgcm9ja2NoaXBfY2FuZmRgIGFuZCB0aGUgYWRkaXRpb24gb2Ygc2FmZXR5IGNoZWNrcyBpbiB0aGUga3Zhc2VyX3VzYiBkcml2ZXIgYWxzbyBpbXByb3ZlIHJvYnVzdG5lc3MuIFRoZSBjaGFuZ2UgdG8gYHRpbWVyX3NodXRkb3duX3N5bmNgIHN1Z2dlc3RzIHByZXZlbnRpbmcgcmFjZSBjb25kaXRpb25zLlxuXG4yLiAgKipSZWFjaGFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsOioqIFRoZSBtb3N0IHByb21pc2luZyBhcmVhcyBmb3IgZnV6emluZyBzZWVtIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY29yZSBDQU4gbmV0d29ya2luZyBjb2RlIChgbmV0L2Nhbi9gKSBhbmQgdGhlIFVTQiBDQU4gZGV2aWNlIGRyaXZlcnMuIFRoZSBjaGFuZ2VzIHRoYXQgdXNlIGAhY2FuX2dldF9tbF9wcml2KGRldilgIGluIG5ldC9jYW4gYWZmZWN0IHRoZSBjb3JlIENBTiBvcGVyYXRpb24gYW5kIGFyZSBvZiBodWdlIGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgbmV0L2Nhbi9hZl9jYW4uY2AsIGBuZXQvY2FuL2JjbS5jYCwgYG5ldC9jYW4vZ3cuY2AsIGBuZXQvY2FuL2lzb3RwLmNgLCBhbmQgYG5ldC9jYW4vcmF3LmNgLCB3aGljaCBjb250cm9sIGhvdyBDQU4gZGV2aWNlcyBhcmUgaWRlbnRpZmllZCBhbmQgaGFuZGxlZCBieSB0aGUgc3lzdGVtLiBGdW5jdGlvbnMgbGlrZSBgY2FuX3NlbmRgLCBgY2FuX3JjdmAsIGBjYW5mZF9yY3ZgLCBgY2FueGxfcmN2YCwgYGJjbV9zZW5kbXNnYCwgYGJjbV9jb25uZWN0YCwgYGNnd19jcmVhdGVfam9iYCwgYGlzb3RwX2JpbmRgLCBhbmQgYHJhd19iaW5kYCBhcmUgYWxsIHByaW1lIHRhcmdldHMuIFRoZXkgYXJlIGRpcmVjdGx5IGV4cG9zZWQgdG8gdXNlciBzcGFjZSB0aHJvdWdoIEFGXFxfQ0FOIHNvY2tldHMsIG1ha2luZyB0aGVtIGVhc3kgdG8gdGVzdC5cblxuICAgIFRoZSBjaGFuZ2VzIGluIGBrdmFzZXJfdXNiX2h5ZHJhLmNgLCB0aG91Z2ggc3BlY2lmaWMgdG8gS3Zhc2VyIFVTQiBkZXZpY2VzLCBhcmUgYWxzbyByZWxldmFudC4gVVNCIENBTiBkZXZpY2VzIGFyZSBlbXVsYXRhYmxlIHVzaW5nIHRvb2xzIGxpa2UgZHVtbXlcXF9oY2Qgb3Igc3l6LXVzYiwgZW5hYmxpbmcgZm9jdXNlZCBmdXp6aW5nIGluIHRoaXMgYXJlYS4gYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYCBpcyBhbiBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50IGhlcmUuXG5cbjMuICAqKlByaW9yaXRpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uOioqIFdoaWxlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHNlcmllcyBtaWdodCBpbnRyb2R1Y2UgcG90ZW50aWFsIGJ1Z3MsIHRoZXkgYXJlIGxpa2VseSBoYXJkZXIgdG8gcmVhY2ggZnJvbSBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4gVGhlcmVmb3JlLCB0aGUgY29yZSBDQU4gYW5kIFVTQiBDQU4gYXNwZWN0cyB0YWtlIHByaW9yaXR5LlxuXG4gICAgVG8gZnV6eiBlZmZlY3RpdmVseSwgSSdsbCBuZWVkIGEga2VybmVsIGNvbmZpZ3VyZWQgd2l0aCBgQ0FOYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYENBTl9JU09UUGAsIGBDQU5fUkFXYCwgYW5kIGBDQU5fS1ZBU0VSX1VTQmAgZW5hYmxlZC4gVGhpcyBzaG91bGQgY292ZXIgdGhlIHJlbGV2YW50IEFGXFxfQ0FOIHNvY2tldCB0eXBlcyBhbmQgVVNCIENBTiBzdXBwb3J0LCBnaXZpbmcgbWUgdGhlIGJyb2FkZXN0IGNvdmVyYWdlIHRvIHVuY292ZXIgdnVsbmVyYWJpbGl0aWVzLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIHNlcmllcyBoYXMgc2V2ZXJhbCBjaGFuZ2VzIHRoYXQgYXJlIGJlbmVmaWNpYWwgdG8gdGhlIGtlcm5lbC4gSG93ZXZlciwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIEknbGwgZm9jdXMgb24gdGhlIGNvcmUgQ0FOIG5ldHdvcmtpbmcgY29kZSBhbmQgVVNCIENBTiBkcml2ZXIgY29kZSBkdWUgdG8gdGhlaXIgZGlyZWN0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjI5OjA3LjMzNTAyMTk3MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQzMzM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnPTIyPWlmIENBTlxcbm5ldC9jYW4vS2NvbmZpZy0yMy1cXG5uZXQvY2FuL0tjb25maWc6MjQ6Y29uZmlnIENBTl9SQVdcXG5uZXQvY2FuL0tjb25maWctMjUtXFx0dHJpc3RhdGUgXFxcIlJhdyBDQU4gUHJvdG9jb2wgKHJhdyBhY2Nlc3Mgd2l0aCBDQU4tSUQgZmlsdGVyaW5nKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZy0zMy1cXG5uZXQvY2FuL0tjb25maWc6MzQ6Y29uZmlnIENBTl9CQ01cXG5uZXQvY2FuL0tjb25maWctMzUtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY2FzdCBNYW5hZ2VyIENBTiBQcm90b2NvbCAod2l0aCBjb250ZW50IGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctNDUtXFxubmV0L2Nhbi9LY29uZmlnOjQ2OmNvbmZpZyBDQU5fR1dcXG5uZXQvY2FuL0tjb25maWctNDctXFx0dHJpc3RhdGUgXFxcIkNBTiBHYXRld2F5L1JvdXRlciAod2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24pXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcXFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnXFxcIlxcbm5ldC9jYW4vS2NvbmZpZy01OC1cXG5uZXQvY2FuL0tjb25maWc6NTk6Y29uZmlnIENBTl9JU09UUFxcbm5ldC9jYW4vS2NvbmZpZy02MC1cXHR0cmlzdGF0ZSBcXFwiSVNPIDE1NzY1LTIgQ0FOIHRyYW5zcG9ydCBwcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6Mjk6MDcuMzc4NDU3NjExWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIxMjA4MTE1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENBTiBDb25maWd1cmF0aW9uIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBDQU4gY29uZmlndXJhdGlvbnM6IGBDQU5fUkFXYCwgYENBTl9CQ01gLCBgQ0FOX0dXYCwgYW5kIGBDQU5fSVNPVFBgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLCBhbmQgSSdtIHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlaXIgcm9sZXMgaW4gcmF3IGZyYW1lIHRyYW5zbWlzc2lvbiwgYnJvYWRjYXN0IGNvbW11bmljYXRpb24gbWFuYWdlbWVudCwgZ2F0ZXdheSBmdW5jdGlvbmFsaXR5LCBhbmQgSVNPLVRQIGltcGxlbWVudGF0aW9ucyByZXNwZWN0aXZlbHkuIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZXNlIHdvcmsgaW5kaXZpZHVhbGx5IGFuZCBpbiBjb21iaW5hdGlvbiBmb3IgdmFyaW91cyBzZXR1cHMuXG5cbkJ1dCBzb21ldGhpbmcncyBuYWdnaW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQuIEl0J3MgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgQ0FOX0tWQVNFUl9VU0JgLiBLdmFzZXIgVVNCIGludGVyZmFjZXMgYXJlIHByZXR0eSB1YmlxdWl0b3VzLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBub3RlcyBJIHNob3VsZCBiZSBiZWFyaW5nIGluIG1pbmQgZm9yIGNvbXBhdGliaWxpdHkgb3Igb3B0aW1pemF0aW9uLiBJIHNob3VsZCBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBkcml2ZXIgb3B0aW9ucywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgYW55IG51YW5jZXMgb2YgaG93IHRoZSBLdmFzZXIgaW50ZXJmYWNlIG1pZ2h0IGludGVyYWN0IHdpdGggdGhvc2UgbW9yZSBjb21tb24gY29uZmlndXJhdGlvbnMgSSBtZW50aW9uZWQgZWFybGllci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHN5c3RlbSBJJ20gd29ya2luZyB3aXRoIGlzIGNvbmZpZ3VyZWQgb3B0aW1hbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ5NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjI5OjI5LjQ5OTI3MDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjQ0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDQU5fS1ZBU0VSX1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTU0PWNvbmZpZyBDQU5fR1NfVVNCXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctNjYtXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY3OmNvbmZpZyBDQU5fS1ZBU0VSX1VTQlxcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy02OC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIENBTi9VU0IgaW50ZXJmYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjoyOToyOS41NDU5MjU2MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQwODExMDUyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maXJtaW5nIENBTiBDb25maWd1cmF0aW9uIGFuZCBMb29raW5nIGZvciBGdXJ0aGVyIEFkanVzdG1lbnRzKipcblxuQWxyaWdodCwgdGhhdCBmaXJzdCBjaGVjayBjb25maXJtcyBpdC4gTXkgaW5pdGlhbCBodW5jaCBhYm91dCB1c2luZyBgQ0FOX0tWQVNFUl9VU0JgIGZvciB0aGUgS3Zhc2VyIGludGVyZmFjZSBpcyBzcG90LW9uLiBOb3cgdGhhdCB0aGF0J3MgdmFsaWRhdGVkLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyByZWxhdGVkIHRvIHRoZSBDQU4gYnVzIGl0c2VsZi4gSXQncyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBmb2N1c2luZyBzb2xlbHkgb24gdGhlIGludGVyZmFjZSB0eXBlIGFuZCBmb3JnZXR0aW5nIGFib3V0IHRoaW5ncyBsaWtlIGJhdWQgcmF0ZSwgYXJiaXRyYXRpb24gSURzLCBvciBhY2NlcHRhbmNlIGZpbHRlcnMuIFNvLCBsZXQncyBleHBhbmQgdGhlIHNjb3BlIGEgbGl0dGxlIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzZXR0aW5ncyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgY2hlY2tpbmcgdG8gZW5zdXJlIHRoZSBDQU4gc2V0dXAgaXMgZnVsbHkgZGlhbGVkIGluLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBjb3JyZWN0IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4ODgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMToyMy42MjcwMzM1NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzA4ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz0yMj1pZiBDQU5cXG5uZXQvY2FuL0tjb25maWctMjMtXFxubmV0L2Nhbi9LY29uZmlnOjI0OmNvbmZpZyBDQU5fUkFXXFxubmV0L2Nhbi9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJSYXcgQ0FOIFByb3RvY29sIChyYXcgYWNjZXNzIHdpdGggQ0FOLUlEIGZpbHRlcmluZylcXFwiXFxuLS1cXG5uZXQvY2FuL0tjb25maWctMzMtXFxubmV0L2Nhbi9LY29uZmlnOjM0OmNvbmZpZyBDQU5fQkNNXFxubmV0L2Nhbi9LY29uZmlnLTM1LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNhc3QgTWFuYWdlciBDQU4gUHJvdG9jb2wgKHdpdGggY29udGVudCBmaWx0ZXJpbmcpXFxcIlxcbi0tXFxubmV0L2Nhbi9LY29uZmlnLTQ1LVxcbm5ldC9jYW4vS2NvbmZpZzo0Njpjb25maWcgQ0FOX0dXXFxubmV0L2Nhbi9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJDQU4gR2F0ZXdheS9Sb3V0ZXIgKHdpdGggbmV0bGluayBjb25maWd1cmF0aW9uKVxcXCJcXG4tLVxcbm5ldC9jYW4vS2NvbmZpZz01Nz1zb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG5uZXQvY2FuL0tjb25maWctNTgtXFxubmV0L2Nhbi9LY29uZmlnOjU5OmNvbmZpZyBDQU5fSVNPVFBcXG5uZXQvY2FuL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjIzLjY3MTg2ODA0NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzIxNDEyNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDQU4gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBDQU4gY29uZmlndXJhdGlvbnMg4oCTIGBDQU5gLCBgQ0FOX1JBV2AsIGBDQU5fQkNNYCwgYENBTl9HV2AsIGBDQU5fSVNPVFBgLCBhbmQgYENBTl9LVkFTRVJfVVNCYC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucyB3ZSdsbCB3YW50IHRvIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGluIHRoZSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuXG5cbkxldCdzIGJyZWFrIGl0IGRvd24uIEZvciBcImNvcmUgQ0FOLFwiIEknbSB0aGlua2luZzogYGNhbl9zZW5kYCwgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIHBvdGVudGlhbGx5IGBjYW54bF9yY3ZgLCBhcyB3ZWxsIGFzIGBiY21fc2VuZG1zZ2AsIGBiY21fY29ubmVjdGAsIGBjZ3dfY3JlYXRlX2pvYmAsIGBpc290cF9iaW5kYCwgYW5kIGByYXdfYmluZGAuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMgZm9yIG1lc3NhZ2UgaGFuZGxpbmcgYW5kIGNvbnRyb2wuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIFVTQiBDQU4gc2lkZSwgYW5kIHJpZ2h0IG5vdyB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYC5cblxuTm93LCBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgbmFtZXMuIEkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgKnRoZXJlKiBhbmQsIGNyaXRpY2FsbHksIG5vdCBtYWdpY2FsbHkgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyIHRocm91Z2ggaW5saW5pbmcgb3Igc3RhdGljIGRlY2xhcmF0aW9uIGluIGEgd2F5IHRoYXQgd291bGQgcHJldmVudCBmdXp6aW5nIGZyb20gZWZmZWN0aXZlbHkgcmVhY2hpbmcgdGhlbS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGZ1enplciBjYW4gYWN0dWFsbHkgKnNlZSogdGhlc2UgZnVuY3Rpb25zIGFuZCBwcm92aWRlIGlucHV0cy4gVGhhdCdzIHRoZSBjcml0aWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjMwLjUwNDAxMTQ4OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY3ODE3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGNhbl9zZW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vYWZfY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9hZl9jYW4uYz0xMTQ9c3RhdGljIGludCBjYW5fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy0yMDEtICovXFxubmV0L2Nhbi9hZl9jYW4uYzoyMDI6aW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxcbm5ldC9jYW4vYWZfY2FuLmMtMjAzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzAuNTUwNzk1ODM5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTU1ODc5MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgb24gRXhwb3J0ZWQgRnVuY3Rpb25zKipcblxuUmlnaHQsIGBjYW5fc2VuZGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gV2hlbiBJIHNlZSB0aGF0IGEgZnVuY3Rpb24gaXMgZXhwbGljaXRseSBtYXJrZWQgZm9yIGV4cG9ydCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqaW50ZW5kZWQqIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGUgY3VycmVudCBtb2R1bGUgb3IgbGlicmFyeS4gSXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IsIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgc3lzdGVtLCBhbmQgaXRzIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cyB3aXRoIGFuIGV5ZSBmb3IgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSBmb3IgZXh0ZXJuYWwgY29uc3VtZXJzLiBcblxuU2Vjb25kLCB0aGUgZmFjdCB0aGF0IGl0J3MgZXhwb3J0ZWQgbWVhbnMgaXQncyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiBmdW5jdGlvbmFsaXR5LiBJdCdzIHByb2JhYmx5IGEgZ2F0ZWtlZXBlciwgYW4gb3JjaGVzdHJhdG9yLCBvciBhIGRhdGEgdHJhbnNmb3JtYXRpb24gdG9vbCB0aGF0IHRoZSB3aWRlciBzeXN0ZW0gcmVsaWVzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gYXNzZXNzIGl0cyBpbXBhY3Qgb24gYW55IGNoYW5nZXMgSSBtaWdodCBtYWtlLiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBtb2R1bGUgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiBgY2FuX3NlbmRgLlxuXG5GaW5hbGx5LCBpdCdzIGFib3V0IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24uIEFueSBtb2RpZmljYXRpb24gdG8gYGNhbl9zZW5kYCBoYXMgdGhlIHBvdGVudGlhbCB0byBicmVhayBleGlzdGluZyBpbnRlZ3JhdGlvbnMuIFNvLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBhbmFseXplIGl0cyBkZXBlbmRlbmNpZXMsIGJvdGggd2l0aGluIHRoZSBjdXJyZW50IHByb2plY3QgYW5kIGFueSBleHRlcm5hbCBjb2RlIHRoYXQgbWlnaHQgYmUgY2FsbGluZyBpdCwgdG8gYXNzZXNzIHRoZSByaXNrcyBhbmQgcGxhbiBhY2NvcmRpbmdseS4gSXQgZGljdGF0ZXMgdGhlIG5lZWQgdG8gaGF2ZSBleHRyZW1lbHkgcmlnb3JvdXMgdGVzdGluZyBhbmQsIHBvc3NpYmx5LCB2ZXJzaW9uaW5nIHN0cmF0ZWdpZXMgaWYgY2hhbmdlcyBhcmUgdW5hdm9pZGFibGUuIFRoaXMgYWxsIGFmZmVjdHMgZGVzaWduIGNob2ljZXMuIFRoZSBmYWN0IHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpcyBhIGZhY3QgdGhhdCBJIGltbWVkaWF0ZWx5IG5lZWQgdG8gYnVpbGQgb2ZmIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzUuMTA2Mzg1NjM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgY2FuX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2FmX2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vYWZfY2FuLmM9NTczPXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZWNlaXZlciAqcmN2KVxcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYy01NzgtXFxubmV0L2Nhbi9hZl9jYW4uYzo1Nzk6c3RhdGljIGludCBjYW5fcmN2X2ZpbHRlcihzdHJ1Y3QgY2FuX2Rldl9yY3ZfbGlzdHMgKmRldl9yY3ZfbGlzdHMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2Nhbi9hZl9jYW4uYy01ODAte1xcbi0tXFxubmV0L2Nhbi9hZl9jYW4uYz02NTQ9c3RhdGljIHZvaWQgY2FuX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jYW4vYWZfY2FuLmMtNjg2LVxcbm5ldC9jYW4vYWZfY2FuLmM6Njg3OnN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jYW4vYWZfY2FuLmMtNjg4LVxcdFxcdCAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzUuMTUxNDY3NTMzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjUyMjk3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkFuYWx5emluZyBFbnRyeSBQb2ludHMgaW4gdGhlIFN5c3RlbSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGNhbl9yY3ZgLi4uIFRoYXQncyBzdGF0aWMsIGlzbid0IGl0PyBIbW0sIGl0J3MgcmVnaXN0ZXJlZCBhcyBhIHBhY2tldCBoYW5kbGVyLCBzbyB0ZWNobmljYWxseSBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LCBqdXN0IG5vdCBpbiB0aGUgbW9zdCBjb252ZW50aW9uYWwgc2Vuc2UuIFdlIGNvdWxkIGluY2x1ZGUgaXQsIGJ1dCwgZm9yIGNsYXJpdHksIHBlcmhhcHMgaXQgd291bGQgYmUgYmV0dGVyIHRvIGZvY3VzIG9uIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgb3IsIGV2ZW4gbW9yZSB1c2VmdWxseSwgdGhlIG9uZXMgdGhhdCBhcmUgYWN0dWFsbHkgaW52b2tlZCBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UuIFRoYXQncyB3aGVyZSB3ZSdsbCBmaW5kIHRoZSAqcmVhbCogc3RhcnRpbmcgcG9pbnRzIG9mIGludGVyYWN0aW9uLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGxpc3Qgb2Ygc29ja2V0IG9wZXJhdGlvbnMuLi4gYGJjbV9zZW5kbXNnYCwgYGJjbV9jb25uZWN0YCwgYGNnd19jcmVhdGVfam9iYCwgYGlzb3RwX2JpbmRgLCBgcmF3X2JpbmRgLi4uIFllcCwgdGhvc2UgYXJlIGFsbCByaWdodCBvbiB0aGUgbW9uZXkuIFNvY2tldCBvcGVyYXRpb25zLCBOZXRsaW5rIG9wZXJhdGlvbnMg4oCTIHRob3NlIGFyZSAqZXhhY3RseSogdGhlIGtpbmRzIG9mIGVudHJ5IHBvaW50cyBJJ2QgZXhwZWN0IHRvIHNlZS4gVGhleSBwcm92aWRlIHRoZSBnYXRld2F5IGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucyB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgbmV0d29ya2luZyBzdGFjayBhbmQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0aWVzLiBXZSdyZSBvbiB0aGUgcmlnaHQgdHJhY2s7IHRob3NlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NzExLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6MzkuNDc2Njk5NDcyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcyMTYwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZCkgYmNtX3NlbmRtc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9iY20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2JjbS5jPTE2MDM9c3RhdGljIGludCBiY21fdHhfc2VuZChzdHJ1Y3QgbXNnaGRyICptc2csIGludCBpZmluZGV4LCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvY2FuL2JjbS5jLTE2NTEtICovXFxubmV0L2Nhbi9iY20uYzoxNjUyOnN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG5uZXQvY2FuL2JjbS5jLTE2NTMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTozOS41MjI0MjM3MTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MjEyNjc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgaW1wbGljYXRpb25zIHdpdGhpbiBteSBhcmVhIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgU29ja2V0IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYmNtX3NlbmRtc2dgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBhIGJpdCB1bnVzdWFsIGZvciBhIHNvY2tldCBvcGVyYXRpb24uIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBpbXBsaWVzIGEgdGlnaHRseSBib3VuZCBvciBzcGVjaWFsaXplZCBjb21tdW5pY2F0aW9uIHBhdGggd2l0aGluIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgY29udGV4dCwgcHJvYmFibHkgYSBoaWdobHktb3B0aW1pemVkIG9yIGhhcmR3YXJlLXNwZWNpZmljIGFwcHJvYWNoLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gR2l2ZW4gaXRzIHN0YXRpYyBuYXR1cmUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGNvbnN0cmFpbnRzIGluIGl0cyB1c2FnZSBvciBwb3RlbnRpYWwgY2hhbGxlbmdlcyBpbiBtb2RpZmljYXRpb24gaWYgaXQncyBkZWVwbHkgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBuZXR3b3JrIHN0YWNrLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB0aWVzIGludG8gdGhlIG92ZXJhbGwgc3lzdGVtLiBUbyBnZXQgYSBoYW5kbGUgb24gaXQsIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgaW52ZXN0aWdhdGUgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYC4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgZ2l2ZSBzb21lIGltcG9ydGFudCBjb250ZXh0IGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIGBiY21fc2VuZG1zZ2AuIEl0J3MgbGlrZWx5IHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCByZXZlYWwgdGhlIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uIHRoYXQgYGJjbV9zZW5kbXNnYCBpcyBtYW5pcHVsYXRpbmcsIHBvdGVudGlhbGx5IGRldGFpbGluZyB0aGUgZGF0YSBmbG93IGFuZCBob3cgaXQncyBoYW5kbGVkIGF0IHRoZSBVU0IgbGV2ZWwuIFRoaXMgY291bGQgYmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCByYXcgQ0FOIG9yIG90aGVyIGluZHVzdHJpYWwgcHJvdG9jb2xzLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIHJlYWQgYW5kIGhvdyB0aGF0IGRhdGEgZW5kcyB1cCBvbiB0aGUgc29ja2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIyNSwiT3V0cHV0VG9rZW5zIjo2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDEyOjMxOjQzLjc3NDU1NjM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMzA5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuYz0yMTA1PXN0YXRpYyBpbnQga3Zhc2VyX3VzYl9oeWRyYV9mbHVzaF9xdWV1ZShzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmMtMjEyNS0gKi9cXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jOjIxMjY6c3RhdGljIHZvaWQga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IGt2YXNlcl91c2IgKmRldixcXG5kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jLTIxMjctXFx0XFx0XFx0XFx0XFx0XFx0dm9pZCAqYnVmLCBpbnQgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTo0My44MjA4OTA1MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTU3NjQ2ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IENBTiBOZXR3b3JraW5nIFx1MDAyNiBVU0IgVVJCIENvbXBsZXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kLCB3aGlsZSBpdCBzZWVtcyBzdGF0aWMgYXQgZmlyc3QgZ2xhbmNlLCB0aGlzIGlzIGFjdHVhbGx5IGEgY2FsbGJhY2sgZm9yIFVTQiBVUkIgKFVTQiBSZXF1ZXN0IEJsb2NrKSBjb21wbGV0aW9uLiBUaGF0IG1ha2VzIGl0IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG15IFVTQiBmdXp6aW5nIGVmZm9ydHMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0J3MgYSBrZXkgc3BvdCB0byBwcm9iZSB0aGUgQ0FOIG5ldHdvcmtpbmcgc3RhY2suIExldCdzIHNlZS4uLiB3aGF0IGZ1bmN0aW9ucyBhcmUgd2UgbG9va2luZyBhdD8gUmlnaHQsIEkgc2VlOiBgY2FuX3NlbmRgLCBgYmNtX3NlbmRtc2dgLCBgYmNtX2Nvbm5lY3RgLCBgY2d3X2NyZWF0ZV9qb2JgLCBgaXNvdHBfYmluZGAsIGByYXdfYmluZGAsIGFuZCBga3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBoaXR0aW5nIHRoZSByaWdodCBlbnRyeSBwb2ludHMuIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIGBjYW5fcmN2YCBpcyBhbHNvIHN0YXRpYy4gWXVwLCBpdCBpcy4gQnV0LCBpcyB0aGVyZSBhIGJldHRlciBlbnRyeSBwb2ludD8gQWgsIGBjYW5fcmVjZWl2ZWAgaXMgYWxzbyBzdGF0aWMuIE9rYXksIGBjYW5fcmN2YCBpcyByZWdpc3RlcmVkIHVzaW5nIGBkZXZfYWRkX3BhY2tgLi4uIFRoYXQncyBwZXJmZWN0bHkgZmluZSB0byBpbmNsdWRlIGl0LiBJIHNob3VsZCBhbHNvIGdyYWIgYGNhbl9yY3ZgLCBgY2FuZmRfcmN2YCwgYW5kIGBjYW54bF9yY3ZgIHRvby5cblxuTm93LCB3aGljaCBjb25maWdzIGFyZSByZWxldmFudCBoZXJlPyBMZXQncyBzZWU6IGBDQU5gLCBgQ0FOX0JDTWAsIGBDQU5fR1dgLCBgQ0FOX0lTT1RQYCwgYENBTl9SQVdgLCBhbmQgYENBTl9LVkFTRVJfVVNCYC5cblxuVGhlIGxvZ2ljIGJlaGluZCB0aGlzIHNlbGVjdGlvbiBpcyB0aGF0IHRoZSBwYXRjaCBzZXJpZXMgSSdtIGV4YW1pbmluZyBtb2RpZmllcyBjb3JlIENBTiBuZXR3b3JraW5nLiBTcGVjaWZpY2FsbHksIGl0IHNoaWZ0cyBmcm9tIGNoZWNraW5nIGBkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfQ0FOYCB0byB1c2luZyBgY2FuX2dldF9tbF9wcml2KGRldilgLiBUaGlzIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyBsaWtlIFJBVywgQkNNLCBHVywgYW5kIElTT1RQLiBJdCBhbHNvIGluY2x1ZGVzIGEgZml4IGZvciB0aGUgS3Zhc2VyIFVTQiBkcml2ZXI7IHRoZSBidWxrIHJlYWQgY2FsbGJhY2sgaGFkIGEgYnVnIHJlbGF0ZWQgdG8gcGFydGlhbCBjb21tYW5kcywgdGhhdCBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyByZWFkcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgYWxsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIGVpdGhlciB2aWEgQ0FOIHNvY2tldHMgb3IgbmV0bGluaywgYW5kIGFsc28gdGhyb3VnaCBVU0IgZW11bGF0aW9uLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBiZWNhdXNlIGl0IGNsZWFybHkgaGFzIGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODgwMywiT3V0cHV0VG9rZW5zIjoyNjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuNzc4NTM5NzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkzMzkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0JDTVwiLFxuICAgIFwiQ0FOX0dXXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9SQVdcIixcbiAgICBcIkNBTl9LVkFTRVJfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FuX3NlbmRcIixcbiAgICBcImNhbl9yY3ZcIixcbiAgICBcImNhbmZkX3JjdlwiLFxuICAgIFwiY2FueGxfcmN2XCIsXG4gICAgXCJiY21fc2VuZG1zZ1wiLFxuICAgIFwiYmNtX2Nvbm5lY3RcIixcbiAgICBcImNnd19jcmVhdGVfam9iXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJyYXdfYmluZFwiLFxuICAgIFwia3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBDQU4gbmV0d29ya2luZyB0byB1c2UgYGNhbl9nZXRfbWxfcHJpdihkZXYpYCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJ3MgYnVsayByZWFkIGNhbGxiYWNrIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGNvbW1hbmRzIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ0FOIHNvY2tldHMgYW5kIG5ldGxpbmssIGFzIHdlbGwgYXMgdGhyb3VnaCBVU0IgZW11bGF0aW9uLCBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0JDTVwiLFxuICAgIFwiQ0FOX0dXXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9SQVdcIixcbiAgICBcIkNBTl9LVkFTRVJfVVNCXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2FuX3NlbmRcIixcbiAgICBcImNhbl9yY3ZcIixcbiAgICBcImNhbmZkX3JjdlwiLFxuICAgIFwiY2FueGxfcmN2XCIsXG4gICAgXCJiY21fc2VuZG1zZ1wiLFxuICAgIFwiYmNtX2Nvbm5lY3RcIixcbiAgICBcImNnd19jcmVhdGVfam9iXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJyYXdfYmluZFwiLFxuICAgIFwia3Zhc2VyX3VzYl9oeWRyYV9yZWFkX2J1bGtfY2FsbGJhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgY29yZSBDQU4gbmV0d29ya2luZyB0byB1c2UgYGNhbl9nZXRfbWxfcHJpdihkZXYpYCBpbnN0ZWFkIG9mIGNoZWNraW5nIGBkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0NBTmAsIHdoaWNoIGFmZmVjdHMgaG93IENBTiBkZXZpY2VzIGFyZSBpZGVudGlmaWVkIGFuZCB2YWxpZGF0ZWQgYWNyb3NzIHZhcmlvdXMgQ0FOIHByb3RvY29scyAoUkFXLCBCQ00sIEdXLCBJU09UUCkuIEl0IGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIEt2YXNlciBVU0IgZHJpdmVyJ3MgYnVsayByZWFkIGNhbGxiYWNrIHRvIHByb3Blcmx5IGhhbmRsZSBwYXJ0aWFsIGNvbW1hbmRzIGFuZCBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgQ0FOIHNvY2tldHMgYW5kIG5ldGxpbmssIGFzIHdlbGwgYXMgdGhyb3VnaCBVU0IgZW11bGF0aW9uLCBhbmQgaGF2ZSBmdW5jdGlvbmFsIGltcGFjdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxMjozMTo1Mi44NTc4ODU4NDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTA2NzYyNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuODU4MzIxMzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4OTA2MzIyMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2YgdmFyaW91cyBidWcgZml4ZXMgYWNyb3NzIHRoZSBDQU4gc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIGZpeGluZyAzMi1iaXQgb3ZlcmZsb3dzIGluIGJpdCB0aW1pbmcgY2FsY3VsYXRpb25zLCByZXBsYWNpbmcgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGZvciBzYWZlIGV4ZWN1dGlvbiBpbiBJUlEgY29udGV4dCwgYWRkaW5nIHNwaW5sb2NrcyB0byBwcm90ZWN0IFRYIHJpbmcgYnVmZmVycyBpbiB0aGUgUm9ja2NoaXAgQ0FOIGRyaXZlciwgZml4aW5nIHRpbWVyIHNodXRkb3duIGluIHRoZSBLdmFzZXIgUENJZSBkcml2ZXIsIGFuZCBpbXByb3ZpbmcgVVNCIGJ1bGsgbWVzc2FnZSBwYXJzaW5nIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb2YgZnJhZ21lbnRlZCBjb21tYW5kcy4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgc2VudCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzLiBUaGUgbW9kaWZpY2F0aW9ucyBwcmltYXJpbHkgYWRkcmVzcyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBleHBvc2VkIGJ5IHRoZXNlIHBhdGNoZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2FhNTc4ZGI3MGNhNWYxNjcxNmRkOGNmYzI4NDcxMDViYjZiOTQxYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDEyOjIxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG5pbmRleCA0MjQ5OGU5ZDNmMzhkLi4yNzg5Yjk5YWI2YTgzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi9jYWxjX2JpdHRpbWluZy5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L2NhbGNfYml0dGltaW5nLmNcbkBAIC0xMTksOCArMTE5LDEyIEBAIGludCBjYW5fY2FsY19iaXR0aW1pbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LFxuIFx0ICAgICB0c2VnIFx1MDAzZT0gKGJ0Yy1cdTAwM2V0c2VnMV9taW4gKyBidGMtXHUwMDNldHNlZzJfbWluKSAqIDI7IHRzZWctLSkge1xuIFx0XHR0c2VnYWxsID0gQ0FOX1NZTkNfU0VHICsgdHNlZyAvIDI7XG4gXG4tXHRcdC8qIENvbXB1dGUgYWxsIHBvc3NpYmxlIHRzZWcgY2hvaWNlcyAodHNlZz10c2VnMSt0c2VnMikgKi9cbi1cdFx0YnJwID0gcHJpdi1cdTAwM2VjbG9jay5mcmVxIC8gKHRzZWdhbGwgKiBidC1cdTAwM2ViaXRyYXRlKSArIHRzZWcgJSAyO1xuK1x0XHQvKiBDb21wdXRlIGFsbCBwb3NzaWJsZSB0c2VnIGNob2ljZXMgKHRzZWc9dHNlZzErdHNlZzIpLlxuK1x0XHQgKiBBIDMyIGJpdCB0c2VnYWxsICogYnQtXHUwMDNlYml0cmF0ZSBjYW4gd3JhcCB0byB6ZXJvIGZvciBsYXJnZVxuK1x0XHQgKiB1c2Vyc3BhY2UgYml0cmF0ZXMsIHNvIGNvbXB1dGUgdGhlIHByb2R1Y3QgaW4gNjQgYml0LlxuK1x0XHQgKi9cbitcdFx0YnJwID0gZGl2NjRfdTY0KHByaXYtXHUwMDNlY2xvY2suZnJlcSxcbitcdFx0XHRcdG11bF91MzJfdTMyKHRzZWdhbGwsIGJ0LVx1MDAzZWJpdHJhdGUpKSArIHRzZWcgJSAyO1xuIFxuIFx0XHQvKiBjaG9vc2UgYnJwIHN0ZXAgd2hpY2ggaXMgcG9zc2libGUgaW4gc3lzdGVtICovXG4gXHRcdGJycCA9IChicnAgLyBidGMtXHUwMDNlYnJwX2luYykgKiBidGMtXHUwMDNlYnJwX2luYztcbkBAIC0xMjgsNyArMTMyLDcgQEAgaW50IGNhbl9jYWxjX2JpdHRpbWluZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGJpdHJhdGUgPSBwcml2LVx1MDAzZWNsb2NrLmZyZXEgLyAoYnJwICogdHNlZ2FsbCk7XG4tXHRcdGJpdHJhdGVfZXJyb3IgPSBhYnMoYnQtXHUwMDNlYml0cmF0ZSAtIGJpdHJhdGUpO1xuK1x0XHRiaXRyYXRlX2Vycm9yID0gYWJzX2RpZmYoYnQtXHUwMDNlYml0cmF0ZSwgYml0cmF0ZSk7XG4gXG4gXHRcdC8qIHRzZWcgYnJwIGJpdGVycm9yICovXG4gXHRcdGlmIChiaXRyYXRlX2Vycm9yIFx1MDAzZSBiZXN0X2JpdHJhdGVfZXJyb3IpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi9za2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYvc2tiLmNcbmluZGV4IDk1ZmNkYzEwMjZmODAuLmZhYWZiMTAzM2Q0MjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2L3NrYi5jXG5AQCAtNCw2ICs0LDcgQEBcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBXb2xmZ2FuZyBHcmFuZGVnZ2VyIFx1MDAzY3dnQGdyYW5kZWdnZXIuY29tXHUwMDNlXG4gICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvY2FuLmhcdTAwM2VcbkBAIC01NCw2ICs1NSw3IEBAIGludCBjYW5fcHV0X2VjaG9fc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoaWR4IFx1MDAzZT0gcHJpdi1cdTAwM2VlY2hvX3NrYl9tYXgpIHtcbiBcdFx0bmV0ZGV2X2VycihkZXYsIFwiJXM6IEJVRyEgVHJ5aW5nIHRvIGFjY2VzcyBjYW5fcHJpdjo6ZWNob19za2Igb3V0IG9mIGJvdW5kcyAoJXUvbWF4ICV1KVxcblwiLFxuIFx0XHRcdCAgIF9fZnVuY19fLCBpZHgsIHByaXYtXHUwMDNlZWNob19za2JfbWF4KTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG5AQCAtNjIsNyArNjQsNyBAQCBpbnQgY2FuX3B1dF9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0ICAgIChza2ItXHUwMDNlcHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfQ0FOKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTkZEKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAgc2tiLVx1MDAzZXByb3RvY29sICE9IGh0b25zKEVUSF9QX0NBTlhMKSkpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTkwLDcgKzkyLDcgQEAgaW50IGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH0gZWxzZSB7XG4gXHRcdC8qIGxvY2tpbmcgcHJvYmxlbSB3aXRoIG5ldGlmX3N0b3BfcXVldWUoKSA/PyAqL1xuIFx0XHRuZXRkZXZfZXJyKGRldiwgXCIlczogQlVHISBlY2hvX3NrYiAlZCBpcyBvY2N1cGllZCFcXG5cIiwgX19mdW5jX18sIGlkeCk7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuQEAgLTIyMyw3ICsyMjUsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfY2FuX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgY2FuX2ZyYW1lICoqY2YpXG4gXG4gXHRjc3ggPSBjYW5fc2tiX2V4dF9hZGQoc2tiKTtcbiBcdGlmICghY3N4KSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0XHRnb3RvIG91dF9lcnJvcl9jYztcbiBcdH1cbiBcbkBAIC0yNTQsNyArMjU2LDcgQEAgc3RydWN0IHNrX2J1ZmYgKmFsbG9jX2NhbmZkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIFx0Y3N4ID0gY2FuX3NrYl9leHRfYWRkKHNrYik7XG4gXHRpZiAoIWNzeCkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0Z290byBvdXRfZXJyb3JfZmQ7XG4gXHR9XG4gXG5AQCAtMjkyLDcgKzI5NCw3IEBAIHN0cnVjdCBza19idWZmICphbGxvY19jYW54bF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdGNzeCA9IGNhbl9za2JfZXh0X2FkZChza2IpO1xuIFx0aWYgKCFjc3gpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdGdvdG8gb3V0X2Vycm9yX3hsO1xuIFx0fVxuIFxuQEAgLTM4NCw3ICszODYsNyBAQCBib29sIGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBFVEhfUF9DQU5YTDpcbi1cdFx0aWYgKCFjYW5faXNfY2FueGxfc2tiKHNrYikpXG4rXHRcdGlmICghY2FuX2NhcF9lbmFibGVkKGRldiwgQ0FOX0NBUF9YTCkgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSlcbiBcdFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdFx0YnJlYWs7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2t2YXNlcl9wY2llZmQva3Zhc2VyX3BjaWVmZF9jb3JlLmMgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuaW5kZXggZDhjOWJmYjIwMjMwNC4uYTA1OTdkYjcyMDg2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9rdmFzZXJfcGNpZWZkL2t2YXNlcl9wY2llZmRfY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4va3Zhc2VyX3BjaWVmZC9rdmFzZXJfcGNpZWZkX2NvcmUuY1xuQEAgLTE3MzksNiArMTczOSw3IEBAIHN0YXRpYyB2b2lkIGt2YXNlcl9wY2llZmRfdGVhcmRvd25fY2FuX2N0cmxzKHN0cnVjdCBrdmFzZXJfcGNpZWZkICpwY2llKVxuIFx0XHRcdGlvd3JpdGUzMigwLCBjYW4tXHUwMDNlcmVnX2Jhc2UgKyBLVkFTRVJfUENJRUZEX0tDQU5fSUVOX1JFRyk7XG4gXHRcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRcdGt2YXNlcl9wY2llZmRfZGV2bGlua19wb3J0X3VucmVnaXN0ZXIoY2FuKTtcbitcdFx0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4gXHRcdFx0ZnJlZV9jYW5kZXYoY2FuLVx1MDAzZWNhbi5kZXYpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMTg3OSw3ICsxODgwLDcgQEAgc3RhdGljIHZvaWQga3Zhc2VyX3BjaWVmZF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHN0cnVjdCBrdmFzZXJfcGNpZWZkX2NhbiAqY2FuID0gcGNpZS1cdTAwM2VjYW5baV07XG4gXG4gXHRcdHVucmVnaXN0ZXJfY2FuZGV2KGNhbi1cdTAwM2VjYW4uZGV2KTtcbi1cdFx0dGltZXJfZGVsZXRlKFx1MDAyNmNhbi1cdTAwM2ViZWNfcG9sbF90aW1lcik7XG4rXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2Y2FuLVx1MDAzZWJlY19wb2xsX3RpbWVyKTtcbiBcdFx0a3Zhc2VyX3BjaWVmZF9wd21fc3RvcChjYW4pO1xuIFx0XHRrdmFzZXJfcGNpZWZkX2RldmxpbmtfcG9ydF91bnJlZ2lzdGVyKGNhbik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLWNvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1jb3JlLmNcbmluZGV4IDM3YzFjMjJjNDBjOWYuLjFjYWU4Njk3M2RhNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtY29yZS5jXG5AQCAtOTIxLDYgKzkyMSw3IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0cHJpdi1cdTAwM2VjYW4uZG9fc2V0X21vZGUgPSBya2NhbmZkX3NldF9tb2RlO1xuIFx0cHJpdi1cdTAwM2VjYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHJrY2FuZmRfZ2V0X2JlcnJfY291bnRlcjtcbiBcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuIFxuIFx0bWF0Y2ggPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFx0aWYgKG1hdGNoKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXJ4LmMgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuaW5kZXggMjRlODdkYWExZGYwMC4uNTk0MjAyMzNjOTE4NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC1yeC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtcnguY1xuQEAgLTEwMCwxNCArMTAwLDI1IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkX25vbWluYWw7XG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4rXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuIFx0c2tiID0gcHJpdi1cdTAwM2VjYW4uZWNob19za2JbdHhfdGFpbF07XG4gXHRpZiAoIXNrYikge1xuK1x0XHRjb25zdCB1bnNpZ25lZCBpbnQgdHhfaGVhZF91bm1hc2tlZCA9IHByaXYtXHUwMDNldHhfaGVhZDtcbitcdFx0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWxfdW5tYXNrZWQgPSBwcml2LVx1MDAzZXR4X3RhaWw7XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZGV2LFxuIFx0XHRcdCAgIFwiJXM6IGVjaG9fc2tiWyV1XT1OVUxMIHR4X2hlYWQ9MHglMDh4IHR4X3RhaWw9MHglMDh4XFxuXCIsXG4gXHRcdFx0ICAgX19mdW5jX18sIHR4X3RhaWwsXG4tXHRcdFx0ICAgcHJpdi1cdTAwM2V0eF9oZWFkLCBwcml2LVx1MDAzZXR4X3RhaWwpO1xuK1x0XHRcdCAgIHR4X2hlYWRfdW5tYXNrZWQsIHR4X3RhaWxfdW5tYXNrZWQpO1xuIFxuIFx0XHRyZXR1cm4gLUVOT01TRztcbiBcdH1cbkBAIC0xMjMsMTcgKzEzNCwxOCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHRcdHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHByaXYsIHRzLCBcdTAwMjZmcmFtZV9sZW4pO1xuIFxuIFx0XHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfdGFpbCwgcHJpdi1cdTAwM2V0eF90YWlsICsgMSk7XG4rXHRcdCp0eF9kb25lID0gdHJ1ZTtcbitcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiBcdFx0bmV0aWZfc3VicXVldWVfY29tcGxldGVkX3dha2UocHJpdi1cdTAwM2VuZGV2LCAwLCAxLCBmcmFtZV9sZW4sXG4gXHRcdFx0XHRcdCAgICAgIHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHByaXYpLFxuIFx0XHRcdFx0XHQgICAgICBSS0NBTkZEX1RYX1NUQVJUX1RIUkVTSE9MRCk7XG4gXG4tXHRcdCp0eF9kb25lID0gdHJ1ZTtcbi1cbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoIShwcml2LVx1MDAzZWRldnR5cGVfZGF0YS5xdWlya3MgXHUwMDI2IFJLQ0FORkRfUVVJUktfUkszNTY4X0VSUkFUVU1fNikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBFcnJhdHVtIDY6IEV4dGVuZGVkIGZyYW1lcyBtYXkgYmUgc2VuZCBhcyBzdGFuZGFyZCBmcmFtZXMuXG4gXHQgKlxuQEAgLTE0Myw3ICsxNTUsNyBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX0VGRl9GTEFHKSB8fFxuIFx0ICAgIChjZmRfcngtXHUwMDNlY2FuX2lkIFx1MDAyNiBDQU5fRUZGX0ZMQUcpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSBzdGFuZGFyZCBwYXJ0IGFuZCBSVFIgZmxhZyBvZiB0aGUgVFgnZWQgZnJhbWVcbkBAIC0xNTEsMjAgKzE2MywyMCBAQCBzdGF0aWMgaW50IHJrY2FuZmRfcnhzdHhfZmlsdGVyKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG4gXHQgKi9cbiBcdGlmICgoY2ZkX25vbWluYWwtXHUwMDNlY2FuX2lkIFx1MDAyNiAoQ0FOX1JUUl9GTEFHIHwgQ0FOX1NGRl9NQVNLKSkgIT1cbiBcdCAgICAoY2ZkX3J4LVx1MDAzZWNhbl9pZCBcdTAwMjYgKENBTl9SVFJfRkxBRyB8IENBTl9TRkZfTUFTSykpKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0LyogTm90IGFmZmVjdGVkIGlmOlxuIFx0ICogLSBsZW5ndGggaXMgbm90IHRoZSBzYW1lXG4gXHQgKi9cbiBcdGlmIChjZmRfbm9taW5hbC1cdTAwM2VsZW4gIT0gY2ZkX3J4LVx1MDAzZWxlbilcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIE5vdCBhZmZlY3RlZCBpZjpcbiBcdCAqIC0gdGhlIGRhdGEgb2Ygbm9uIFJUUiBmcmFtZXMgaXMgZGlmZmVyZW50XG4gXHQgKi9cbiBcdGlmICghKGNmZF9ub21pbmFsLVx1MDAzZWNhbl9pZCBcdTAwMjYgQ0FOX1JUUl9GTEFHKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBtZW1jbXAoY2ZkX25vbWluYWwtXHUwMDNlZGF0YSwgY2ZkX3J4LVx1MDAzZWRhdGEsIGNmZF9ub21pbmFsLVx1MDAzZWxlbikpXG4tXHRcdHJldHVybiAwO1xuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBBZmZlY3RlZCBieSBFcnJhdHVtIDYgKi9cbiBcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cmtjYW5mZF9zdGF0cy1cdTAwM2VzeW5jcCk7XG5AQCAtMTg1LDYgKzE5Nyw5IEBAIHN0YXRpYyBpbnQgcmtjYW5mZF9yeHN0eF9maWx0ZXIoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdixcbiBcbiBcdHJrY2FuZmRfeG1pdF9yZXRyeShwcml2KTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQtdHguYyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG5pbmRleCAxMjIwMGRjZmQzMzg5Li5iMzY3MzQxZGQwYWViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLXR4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC10eC5jXG5AQCAtMTQsNiArMTQsOCBAQCBzdGF0aWMgYm9vbCBya2NhbmZkX3R4X3RhaWxfaXNfZWZmKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4gXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4rXG4gXHRpZiAoIXJrY2FuZmRfZ2V0X3R4X3BlbmRpbmcocHJpdikpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC0zMywxMyArMzUsMjIgQEAgc3RhdGljIGJvb2wgcmtjYW5mZF90eF90YWlsX2lzX2VmZihjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KVxuIFx0cmV0dXJuIGNmZC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRztcbiB9XG4gXG4tdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4rdW5zaWduZWQgaW50IHJrY2FuZmRfZ2V0X2VmZmVjdGl2ZV90eF9mcmVlKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuK1x0dW5zaWduZWQgaW50IHR4X2ZyZWU7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2V0eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRpZiAocHJpdi1cdTAwM2VkZXZ0eXBlX2RhdGEucXVpcmtzIFx1MDAyNiBSS0NBTkZEX1FVSVJLX1JLMzU2OF9FUlJBVFVNXzYgXHUwMDI2XHUwMDI2XG4gXHQgICAgcmtjYW5mZF90eF90YWlsX2lzX2VmZihwcml2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHR4X2ZyZWUgPSAwO1xuK1x0ZWxzZVxuK1x0XHR0eF9mcmVlID0gcmtjYW5mZF9nZXRfdHhfZnJlZShwcml2KTtcbiBcbi1cdHJldHVybiBya2NhbmZkX2dldF90eF9mcmVlKHByaXYpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB0eF9mcmVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKGNvbnN0IHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsXG5AQCAtNTcsOCArNjgsMTAgQEAgc3RhdGljIHZvaWQgcmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LFxuIFxuIHZvaWQgcmtjYW5mZF94bWl0X3JldHJ5KHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpXG4ge1xuLVx0Y29uc3QgdW5zaWduZWQgaW50IHR4X2hlYWQgPSBya2NhbmZkX2dldF90eF9oZWFkKHByaXYpO1xuLVx0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuK1x0Y29uc3QgdW5zaWduZWQgaW50IHR4X3RhaWwgPSBya2NhbmZkX2dldF90eF90YWlsKHByaXYpO1xuK1x0Y29uc3QgdTMyIHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X3RhaWwpO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2spO1xuIFxuIFx0cmtjYW5mZF9zdGFydF94bWl0X3dyaXRlX2NtZChwcml2LCByZWdfY21kKTtcbiB9XG5AQCAtNjksNiArODIsNyBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR1MzIgcmVnX2ZyYW1laW5mbywgcmVnX2lkLCByZWdfY21kO1xuIFx0dW5zaWduZWQgaW50IHR4X2hlYWQsIGZyYW1lX2xlbjtcbiBcdGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGludCBlcnI7XG4gXHR1OCBpO1xuIFxuQEAgLTg4LDcgKzEwMiwxOSBAQCBuZXRkZXZfdHhfdCBya2NhbmZkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbi1cdGNmZCA9IChzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXHUwMDNlZGF0YTtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1x0dHhfaGVhZCA9IHJrY2FuZmRfZ2V0X3R4X2hlYWQocHJpdik7XG4rXHRmcmFtZV9sZW4gPSBjYW5fc2tiX2dldF9mcmFtZV9sZW4oc2tiKTtcbitcdGVyciA9IGNhbl9wdXRfZWNob19za2Ioc2tiLCBuZGV2LCB0eF9oZWFkLCBmcmFtZV9sZW4pO1xuK1x0aWYgKGVycikge1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0XHRuZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQrKztcbitcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbitcdH1cbitcbitcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X2hlYWRdO1xuK1x0Y2ZkID0gKGNvbnN0IHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0aWYgKGNmZC1cdTAwM2VjYW5faWQgXHUwMDI2IENBTl9FRkZfRkxBRykge1xuIFx0XHRyZWdfZnJhbWVpbmZvID0gUktDQU5GRF9SRUdfRkRfRlJBTUVJTkZPX0ZSQU1FX0ZPUk1BVDtcbkBAIC0xMTQsNyArMTQwLDYgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRcdFx0XHQgICAgY2ZkLVx1MDAzZWxlbik7XG4gXHR9XG4gXG4tXHR0eF9oZWFkID0gcmtjYW5mZF9nZXRfdHhfaGVhZChwcml2KTtcbiBcdHJlZ19jbWQgPSBSS0NBTkZEX1JFR19DTURfVFhfUkVRKHR4X2hlYWQpO1xuIFxuIFx0cmtjYW5mZF93cml0ZShwcml2LCBSS0NBTkZEX1JFR19GRF9UWEZSQU1FSU5GTywgcmVnX2ZyYW1laW5mbyk7XG5AQCAtMTIzLDE0ICsxNDgsMTIgQEAgbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0XHRya2NhbmZkX3dyaXRlKHByaXYsIFJLQ0FORkRfUkVHX0ZEX1RYREFUQTAgKyBpLFxuIFx0XHRcdCAgICAgICoodTMyICopKGNmZC1cdTAwM2VkYXRhICsgaSkpO1xuIFxuLVx0ZnJhbWVfbGVuID0gY2FuX3NrYl9nZXRfZnJhbWVfbGVuKHNrYik7XG4tXHRlcnIgPSBjYW5fcHV0X2VjaG9fc2tiKHNrYiwgbmRldiwgdHhfaGVhZCwgZnJhbWVfbGVuKTtcbi1cdGlmICghZXJyKVxuLVx0XHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4rXHRuZXRkZXZfc2VudF9xdWV1ZShwcml2LVx1MDAzZW5kZXYsIGZyYW1lX2xlbik7XG4gXG4gXHRXUklURV9PTkNFKHByaXYtXHUwMDNldHhfaGVhZCwgcHJpdi1cdTAwM2V0eF9oZWFkICsgMSk7XG4gXG4gXHRya2NhbmZkX3N0YXJ0X3htaXRfd3JpdGVfY21kKHByaXYsIHJlZ19jbWQpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZXR4X2xvY2ssIGZsYWdzKTtcbiBcbiBcdG5ldGlmX3N1YnF1ZXVlX21heWJlX3N0b3AocHJpdi1cdTAwM2VuZGV2LCAwLFxuIFx0XHRcdFx0ICBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShwcml2KSxcbkBAIC0xNDcsNiArMTcwLDggQEAgdm9pZCBya2NhbmZkX2hhbmRsZV90eF9kb25lX29uZShzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2LCBjb25zdCB1MzIgdHMsXG4gXHR1bnNpZ25lZCBpbnQgdHhfdGFpbDtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnByaXYtXHUwMDNldHhfbG9jayk7XG4rXG4gXHR0eF90YWlsID0gcmtjYW5mZF9nZXRfdHhfdGFpbChwcml2KTtcbiBcdHNrYiA9IHByaXYtXHUwMDNlY2FuLmVjaG9fc2tiW3R4X3RhaWxdO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yb2NrY2hpcC9yb2NrY2hpcF9jYW5mZC5oIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbmluZGV4IDk1YmVhOWJmZDhhMmYuLjJkYzNhNDFhZmUzMmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vcm9ja2NoaXAvcm9ja2NoaXBfY2FuZmQuaFxuKysrIGIvZHJpdmVycy9uZXQvY2FuL3JvY2tjaGlwL3JvY2tjaGlwX2NhbmZkLmhcbkBAIC0xNSw2ICsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZXNldC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGltZWNvdW50ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91NjRfc3RhdHNfc3luYy5oXHUwMDNlXG5AQCAtNDc0LDYgKzQ3NSw3IEBAIHN0cnVjdCBya2NhbmZkX3ByaXYge1xuIFx0c3RydWN0IGNhbl9yeF9vZmZsb2FkIG9mZmxvYWQ7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiBcbitcdHNwaW5sb2NrX3QgdHhfbG9jazsgLyogcHJvdGVjdHMgdHhfaGVhZCwgdHhfdGFpbCBhbmQgZWNob19za2IgKi9cbiBcdHZvaWQgX19pb21lbSAqcmVncztcbiBcdHVuc2lnbmVkIGludCB0eF9oZWFkO1xuIFx0dW5zaWduZWQgaW50IHR4X3RhaWw7XG5AQCAtNTU2LDcgKzU1OCw3IEBAIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RhcnQoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gdm9pZCBya2NhbmZkX3RpbWVzdGFtcF9zdG9wKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIHZvaWQgcmtjYW5mZF90aW1lc3RhbXBfc3RvcF9zeW5jKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYpO1xuIFxuLXVuc2lnbmVkIGludCBya2NhbmZkX2dldF9lZmZlY3RpdmVfdHhfZnJlZShjb25zdCBzdHJ1Y3QgcmtjYW5mZF9wcml2ICpwcml2KTtcbit1bnNpZ25lZCBpbnQgcmtjYW5mZF9nZXRfZWZmZWN0aXZlX3R4X2ZyZWUoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gdm9pZCBya2NhbmZkX3htaXRfcmV0cnkoc3RydWN0IHJrY2FuZmRfcHJpdiAqcHJpdik7XG4gbmV0ZGV2X3R4X3QgcmtjYW5mZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbiB2b2lkIHJrY2FuZmRfaGFuZGxlX3R4X2RvbmVfb25lKHN0cnVjdCBya2NhbmZkX3ByaXYgKnByaXYsIGNvbnN0IHUzMiB0cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc3BpL2hpMzExeC5jIGIvZHJpdmVycy9uZXQvY2FuL3NwaS9oaTMxMXguY1xuaW5kZXggYWU5MGU2NzE2ZGU1Yi4uMmJlODUxZTg5MDdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvaGkzMTF4LmNcbkBAIC03ODcsNyArNzg3LDEwIEBAIHN0YXRpYyBpbnQgaGkzMTEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbiBcdHJldHVybiAwO1xuIFxuICBvdXRfZnJlZV9pcnE6XG4rXHRwcml2LVx1MDAzZWZvcmNlX3F1aXQgPSAxO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0ZnJlZV9pcnEoc3BpLVx1MDAzZWlycSwgcHJpdik7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlaGkzMTEwX2xvY2spO1xuIFx0aGkzMTEwX2h3X3NsZWVwKHNwaSk7XG4gIG91dF9jbG9zZTpcbiBcdGhpMzExMF9wb3dlcl9lbmFibGUocHJpdi1cdTAwM2V0cmFuc2NlaXZlciwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9mODE2MDQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZjgxNjA0LmNcbmluZGV4IGYxMjMxODI2OGU0NmIuLjRjMTQ3YjlkNmQ2OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Y4MTYwNC5jXG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0cnVjdCBmODE2MDRfaW50X2RhdGEge1xuIFx0dTggcnhlcnI7XG4gXHR1OCB0eGVycjtcbiBcdHU4IHZhbDtcbi19IF9fcGFja2VkIF9fYWxpZ25lZCg0KTtcbit9IF9fcGFja2VkO1xuIFxuIHN0cnVjdCBmODE2MDRfc2ZmIHtcbiBcdF9fYmUxNiBpZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2t2YXNlcl91c2Iva3Zhc2VyX3VzYl9oeWRyYS5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiL2t2YXNlcl91c2JfaHlkcmEuY1xuaW5kZXggZWZiYjdiZWQzNGM5ZC4uZWZlN2IzZWY0ODliZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi9rdmFzZXJfdXNiX2h5ZHJhLmNcbkBAIC01MzYsNiArNTM2LDI0IEBAIHN0YXRpYyBzaXplX3Qga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyogLUVBR0FJTiBtZWFucyBpbmNvbXBsZXRlOyAtRUlOVkFMIHJlamVjdHMgemVybyB0byBlbnN1cmUgcHJvZ3Jlc3MuICovXG4rc3RhdGljIGludCBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHN0cnVjdCBrdmFzZXJfY21kICpjbWQsXG4rXHRcdFx0XHRcdHNpemVfdCByZW1haW5pbmcsIHNpemVfdCAqY21kX2xlbilcbit7XG4rXHRpZiAocmVtYWluaW5nIFx1MDAzYyBzaXplb2YoY21kLVx1MDAzZWhlYWRlci5jbWRfbm8pKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdGlmIChjbWQtXHUwMDNlaGVhZGVyLmNtZF9ubyA9PSBDTURfRVhURU5ERUQgXHUwMDI2XHUwMDI2XG4rXHQgICAgcmVtYWluaW5nIFx1MDAzYyBvZmZzZXRvZihzdHJ1Y3Qga3Zhc2VyX2NtZF9leHQsIGNtZF9ub19leHQpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbitcdCpjbWRfbGVuID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZShjbWQpO1xuK1x0aWYgKCEqY21kX2xlbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpcbiBrdmFzZXJfdXNiX2h5ZHJhX25ldF9wcml2X2Zyb21fY21kKGNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiICpkZXYsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qga3Zhc2VyX2NtZCAqY21kKVxuQEAgLTY3NSw4ICs2OTMsOCBAQCBzdGF0aWMgaW50IGt2YXNlcl91c2JfaHlkcmFfd2FpdF9jbWQoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwgdTggY21kX25vLFxuIFx0XHRcdHNpemVfdCBjbWRfbGVuO1xuIFxuIFx0XHRcdHRtcF9jbWQgPSBidWYgKyBwb3M7XG4tXHRcdFx0Y21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUodG1wX2NtZCk7XG4tXHRcdFx0aWYgKHBvcyArIGNtZF9sZW4gXHUwMDNlIGFjdHVhbF9sZW4pIHtcbitcdFx0XHRlcnIgPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplX3J4KHRtcF9jbWQsIGFjdHVhbF9sZW4gLSBwb3MsIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRcdGlmIChlcnIgfHwgcG9zICsgY21kX2xlbiBcdTAwM2UgYWN0dWFsX2xlbikge1xuIFx0XHRcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChcdTAwMjZkZXYtXHUwMDNlaW50Zi1cdTAwM2VkZXYsXG4gXHRcdFx0XHRcdFx0ICAgIFwiRm9ybWF0IGVycm9yXFxuXCIpO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMjEyMCwyMyArMjEzOCw0NyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHR1c2JfcnhfbGVmdG92ZXJfbGVuID0gY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4gXHRpZiAodXNiX3J4X2xlZnRvdmVyX2xlbikge1xuK1x0XHRjb25zdCBzaXplX3QgY21kX3NpemVfZmllbGRfZW5kID0gb2Zmc2V0b2Yoc3RydWN0IGt2YXNlcl9jbWRfZXh0LCBjbWRfbm9fZXh0KTtcbiBcdFx0aW50IHJlbWFpbmluZ19ieXRlcztcbitcdFx0aW50IGVycjtcbiBcbiBcdFx0Y21kID0gKHN0cnVjdCBrdmFzZXJfY21kICopY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlcjtcbiBcbi1cdFx0Y21kX2xlbiA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemUoY21kKTtcbitcdFx0aWYgKGNtZC1cdTAwM2VoZWFkZXIuY21kX25vID09IENNRF9FWFRFTkRFRCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVzYl9yeF9sZWZ0b3Zlcl9sZW4gXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xuK1x0XHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KGludCwgbGVuLCBjbWRfc2l6ZV9maWVsZF9lbmQgLSB1c2JfcnhfbGVmdG92ZXJfbGVuKTtcbitcbitcdFx0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiwgcmVtYWluaW5nX2J5dGVzKTtcbitcdFx0XHR1c2JfcnhfbGVmdG92ZXJfbGVuICs9IHJlbWFpbmluZ19ieXRlcztcbitcdFx0XHRjYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyX2xlbiA9IHVzYl9yeF9sZWZ0b3Zlcl9sZW47XG4rXHRcdFx0cG9zICs9IHJlbWFpbmluZ19ieXRlcztcbiBcbi1cdFx0cmVtYWluaW5nX2J5dGVzID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sXG4rXHRcdFx0aWYgKHVzYl9yeF9sZWZ0b3Zlcl9sZW4gXHUwMDNjIGNtZF9zaXplX2ZpZWxkX2VuZCkge1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbitcdFx0XHRcdHJldHVybjtcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0ZXJyID0ga3Zhc2VyX3VzYl9oeWRyYV9jbWRfc2l6ZV9yeChjbWQsIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRpZiAoZXJyIHx8IGNtZF9sZW4gXHUwMDNjIHVzYl9yeF9sZWZ0b3Zlcl9sZW4pIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXG4rXHRcdHJlbWFpbmluZ19ieXRlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuIC0gcG9zLFxuIFx0XHRcdFx0XHRjbWRfbGVuIC0gdXNiX3J4X2xlZnRvdmVyX2xlbik7XG4gXHRcdC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgdXNiX3J4X2xlZnRvdmVyICovXG4gXHRcdGlmIChyZW1haW5pbmdfYnl0ZXMgKyB1c2JfcnhfbGVmdG92ZXJfbGVuIFx1MDAzZVxuIFx0XHRcdFx0XHRcdEtWQVNFUl9VU0JfSFlEUkFfTUFYX0NNRF9MRU4pIHtcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNmRldi1cdTAwM2VpbnRmLVx1MDAzZWRldiwgXCJGb3JtYXQgZXJyb3JcXG5cIik7XG4rXHRcdFx0Y2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3Zlcl9sZW4gPSAwO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUodXNiX3J4X2xlZnRvdmVyX2xvY2ssIGlycV9mbGFncyk7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG4tXHRcdG1lbWNweShjYXJkX2RhdGEtXHUwMDNldXNiX3J4X2xlZnRvdmVyICsgdXNiX3J4X2xlZnRvdmVyX2xlbiwgYnVmLFxuK1x0XHRtZW1jcHkoY2FyZF9kYXRhLVx1MDAzZXVzYl9yeF9sZWZ0b3ZlciArIHVzYl9yeF9sZWZ0b3Zlcl9sZW4sIGJ1ZiArIHBvcyxcbiBcdFx0ICAgICAgIHJlbWFpbmluZ19ieXRlcyk7XG4gXHRcdHBvcyArPSByZW1haW5pbmdfYnl0ZXM7XG4gXG5AQCAtMjE1MiwxMSArMjE5NCwxNyBAQCBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX2h5ZHJhX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LFxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh1c2JfcnhfbGVmdG92ZXJfbG9jaywgaXJxX2ZsYWdzKTtcbiBcbiBcdHdoaWxlIChwb3MgXHUwMDNjIGxlbikge1xuK1x0XHRpbnQgZXJyO1xuK1xuIFx0XHRjbWQgPSBidWYgKyBwb3M7XG4gXG4tXHRcdGNtZF9sZW4gPSBrdmFzZXJfdXNiX2h5ZHJhX2NtZF9zaXplKGNtZCk7XG4rXHRcdGVyciA9IGt2YXNlcl91c2JfaHlkcmFfY21kX3NpemVfcngoY21kLCBsZW4gLSBwb3MsIFx1MDAyNmNtZF9sZW4pO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTikge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2ZGV2LVx1MDAzZWludGYtXHUwMDNlZGV2LCBcIkZvcm1hdCBlcnJvclxcblwiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcbi1cdFx0aWYgKHBvcyArIGNtZF9sZW4gXHUwMDNlIGxlbikge1xuK1x0XHRpZiAoZXJyID09IC1FQUdBSU4gfHwgcG9zICsgY21kX2xlbiBcdTAwM2UgbGVuKSB7XG4gXHRcdFx0LyogV2UgZ290IGZpcnN0IHBhcnQgb2YgYSBjb21tYW5kICovXG4gXHRcdFx0aW50IGxlZnRvdmVyX2J5dGVzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL3NrYi5oIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbmluZGV4IGE3MGEwMjk2NzA3MTEuLjc4YzU4NzBlMmY5YTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9za2IuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jYW4vc2tiLmhcbkBAIC03NiwxMiArNzYsMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqY2FuX2NyZWF0ZV9lY2hvX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0bnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHVubGlrZWx5KCFuc2tiKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4gXHRjYW5fc2tiX3NldF9vd25lcihuc2tiLCBza2ItXHUwMDNlc2spO1xuLVx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdGRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTtcbiBcdHJldHVybiBuc2tiO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uY1xuaW5kZXggN2JjODZiMTc2YjRkZS4uZWY0MzVmMjJhYzkzMyAxMDA2NDRcbi0tLSBhL25ldC9jYW4vYWZfY2FuLmNcbisrKyBiL25ldC9jYW4vYWZfY2FuLmNcbkBAIC0yMjYsNyArMjI2LDcgQEAgaW50IGNhbl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIGludCBsb29wKVxuIFx0XHRnb3RvIGludmFsX3NrYjtcbiBcdH1cbiBcbi1cdGlmICh1bmxpa2VseShza2ItXHUwMDNlZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTikpIHtcbitcdGlmICh1bmxpa2VseSghY2FuX2dldF9tbF9wcml2KHNrYi1cdTAwM2VkZXYpKSkge1xuIFx0XHRlcnIgPSAtRVBFUk07XG4gXHRcdGdvdG8gaW52YWxfc2tiO1xuIFx0fVxuQEAgLTQ1Miw3ICs0NTIsNyBAQCBpbnQgY2FuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2FuaWRfdCBjYW5faWQsXG4gXG4gXHQvKiBpbnNlcnQgbmV3IHJlY2VpdmVyICAoZGV2LGNhbmlkLG1hc2spIC1cdTAwM2UgKGZ1bmMsZGF0YSkgKi9cbiBcbi1cdGlmIChkZXYgXHUwMDI2XHUwMDI2IChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSkpXG4rXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKGRldiBcdTAwMjZcdTAwMjYgIW5ldF9lcShuZXQsIGRldl9uZXQoZGV2KSkpXG5AQCAtNTE5LDcgKzUxOSw3IEBAIHZvaWQgY2FuX3J4X3VucmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjYW5pZF90IGNhbl9pZCxcbiBcdHN0cnVjdCBjYW5fcmN2X2xpc3RzX3N0YXRzICpyY3ZfbGlzdHNfc3RhdHMgPSBuZXQtXHUwMDNlY2FuLnJjdl9saXN0c19zdGF0cztcbiBcdHN0cnVjdCBjYW5fZGV2X3Jjdl9saXN0cyAqZGV2X3Jjdl9saXN0cztcbiBcbi1cdGlmIChkZXYgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoZGV2IFx1MDAyNlx1MDAyNiAhY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChkZXYgXHUwMDI2XHUwMDI2ICFuZXRfZXEobmV0LCBkZXZfbmV0KGRldikpKVxuQEAgLTY4Nyw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCBjYW5fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgY2FuX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4gXHRcdCAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2Nhbl9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbkBAIC03MDMsNyArNzAzLDcgQEAgc3RhdGljIGludCBjYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gc3RhdGljIGludCBjYW5mZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpXG4ge1xuLVx0aWYgKHVubGlrZWx5KGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4gfHwgIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4rXHRpZiAodW5saWtlbHkoIWNhbl9nZXRfbWxfcHJpdihkZXYpIHx8XG4gXHRcdCAgICAgIWNhbl9za2JfZXh0X2ZpbmQoc2tiKSB8fCAhY2FuX2lzX2NhbmZkX3NrYihza2IpKSkge1xuIFx0XHRwcl93YXJuX29uY2UoXCJQRl9DQU46IGRyb3BwZWQgbm9uIGNvbmZvcm0gQ0FOIEZEIHNrYnVmZjogZGV2IHR5cGUgJWQsIGxlbiAlZFxcblwiLFxuIFx0XHRcdCAgICAgZGV2LVx1MDAzZXR5cGUsIHNrYi1cdTAwM2VsZW4pO1xuQEAgLTcxOSw3ICs3MTksNyBAQCBzdGF0aWMgaW50IGNhbmZkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHN0YXRpYyBpbnQgY2FueGxfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxuIHtcbi1cdGlmICh1bmxpa2VseShkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOIHx8ICFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuK1x0aWYgKHVubGlrZWx5KCFjYW5fZ2V0X21sX3ByaXYoZGV2KSB8fFxuIFx0XHQgICAgICFjYW5fc2tiX2V4dF9maW5kKHNrYikgfHwgIWNhbl9pc19jYW54bF9za2Ioc2tiKSkpIHtcbiBcdFx0cHJfd2Fybl9vbmNlKFwiUEZfQ0FOOiBkcm9wcGVkIG5vbiBjb25mb3JtIENBTiBYTCBza2J1ZmY6IGRldiB0eXBlICVkLCBsZW4gJWRcXG5cIixcbiBcdFx0XHQgICAgIGRldi1cdTAwM2V0eXBlLCBza2ItXHUwMDNlbGVuKTtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uY1xuaW5kZXggM2Q2MzdhMWUwYWMxYS4uNjA0MDY0MzlhMTNmNyAxMDA2NDRcbi0tLSBhL25ldC9jYW4vYmNtLmNcbisrKyBiL25ldC9jYW4vYmNtLmNcbkBAIC01NCw2ICs1NCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2Nhbi1tbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9za2IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nhbi9iY20uaFx1MDAzZVxuQEAgLTE3MTksNyArMTcyMCw3IEBAIHN0YXRpYyBpbnQgYmNtX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdFx0ZGV2X3B1dChkZXYpO1xuIFx0XHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRcdGdvdG8gb3V0X3JlbGVhc2U7XG5AQCAtMTg2Nyw3ICsxODY4LDcgQEAgc3RhdGljIGludCBiY21fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtc2csXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIFxuLVx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKVxuIFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gXHRpZiAobXNnICE9IE5FVERFVl9VTlJFR0lTVEVSIFx1MDAyNlx1MDAyNiBtc2cgIT0gTkVUREVWX0RPV04pXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbkBAIC0yMDI0LDcgKzIwMjUsNyBAQCBzdGF0aWMgaW50IGJjbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50XG4gXHRcdFx0cmV0ID0gLUVOT0RFVjtcbiBcdFx0XHRnb3RvIGZhaWw7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbitcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdGRldl9wdXQoZGV2KTtcbiBcdFx0XHRyZXQgPSAtRU5PREVWO1xuIFx0XHRcdGdvdG8gZmFpbDtcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2d3LmMgYi9uZXQvY2FuL2d3LmNcbmluZGV4IDBlYzk5ZjY4YWE0NTIuLmQ5OTEyZGVhNzM4YmEgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2d3LmNcbisrKyBiL25ldC9jYW4vZ3cuY1xuQEAgLTUyLDYgKzUyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2d3LmhcdTAwM2VcbkBAIC02MDksNyArNjEwLDcgQEAgc3RhdGljIGludCBjZ3dfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTtcbiBcbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSlcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIFxuIFx0aWYgKG1zZyA9PSBORVRERVZfVU5SRUdJU1RFUikge1xuQEAgLTExNjAsNyArMTE2MSw3IEBAIHN0YXRpYyBpbnQgY2d3X2NyZWF0ZV9qb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0aWYgKCFnd2otXHUwMDNlc3JjLmRldilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoZ3dqLVx1MDAzZXNyYy5kZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKVxuK1x0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZ3dqLVx1MDAzZXNyYy5kZXYpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGd3ai1cdTAwM2Vkc3QuZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KG5ldCwgZ3dqLVx1MDAzZWNjZ3cuZHN0X2lkeCk7XG5AQCAtMTE2OCw3ICsxMTY5LDcgQEAgc3RhdGljIGludCBjZ3dfY3JlYXRlX2pvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRpZiAoIWd3ai1cdTAwM2Vkc3QuZGV2KVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdGlmIChnd2otXHUwMDNlZHN0LmRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pXG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihnd2otXHUwMDNlZHN0LmRldikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogaXMgc2VuZGluZyB0aGUgc2tiIGJhY2sgdG8gdGhlIGluY29taW5nIGludGVyZmFjZSBpbnRlbmRlZD8gKi9cbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcbmluZGV4IDE1NTUzMGFlZGNlMmUuLjQ1NjBkNWE1NjdlY2YgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTY1LDYgKzY1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY2FuLW1sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jYW4vY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL3NrYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FuL2lzb3RwLmhcdTAwM2VcbkBAIC0xNjA2LDcgKzE2MDcsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRlcnIgPSAtRU5PREVWO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbi1cdGlmIChkZXYtXHUwMDNldHlwZSAhPSBBUlBIUkRfQ0FOKSB7XG4rXHRpZiAoIWNhbl9nZXRfbWxfcHJpdihkZXYpKSB7XG4gXHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4gXHR9XG5AQCAtMTg5Myw3ICsxODk0LDcgQEAgc3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuZGlmZiAtLWdpdCBhL25ldC9jYW4vcmF3LmMgYi9uZXQvY2FuL3Jhdy5jXG5pbmRleCA4MmQ5YzA0OTljOTVmLi44ZTJlMTE0YWJjYjk5IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9yYXcuY1xuKysrIGIvbmV0L2Nhbi9yYXcuY1xuQEAgLTM0NCw3ICszNDQsNyBAQCBzdGF0aWMgaW50IHJhd19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gXG4tXHRpZiAoZGV2LVx1MDAzZXR5cGUgIT0gQVJQSFJEX0NBTilcbitcdGlmICghY2FuX2dldF9tbF9wcml2KGRldikpXG4gXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiBcdGlmIChtc2cgIT0gTkVUREVWX1VOUkVHSVNURVIgXHUwMDI2XHUwMDI2IG1zZyAhPSBORVRERVZfRE9XTilcbiBcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuQEAgLTQ4Nyw3ICs0ODcsNyBAQCBzdGF0aWMgaW50IHJhd19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlblxuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9DQU4pIHtcbitcdFx0aWYgKCFjYW5fZ2V0X21sX3ByaXYoZGV2KSkge1xuIFx0XHRcdGVyciA9IC1FTk9ERVY7XG4gXHRcdFx0Z290byBvdXRfcHV0X2RldjtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzE6NTIuODU4MzIyMzAyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4OTA2Mjk2NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNBTiBTdWJzeXN0ZW0gUGF0Y2ggU2VyaWVzIFJldmlldzogVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBDQU4gc3Vic3lzdGVtIHBhdGNoIHNlcmllcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBmb2N1cyBteSBhbmFseXNpcy4gSSd2ZSBnb25lIHRocm91Z2ggZWFjaCBvZiB0aGUgY2hhbmdlZCBmaWxlcyBjYXJlZnVsbHkuXG5cbkZpcnN0IHVwLCBgY2FsY19iaXR0aW1pbmcuY2AgdXNlcyBgZGl2NjRfdTY0YCBhbmQgYG11bF91MzJfdTMyYCB0byBhdm9pZCAzMi1iaXQgb3ZlcmZsb3dzIGFuZCB0aGUgYGFic19kaWZmYCBtYWNyby4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnMgdGhlcmU7IHRoaXMgaXMgZ29vZCwgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLlxuXG5UaGVuLCBgc2tiLmNgIHN3aXRjaGVzIHRvIGBkZXZfa2ZyZWVfc2tiX2FueWAgYW5kIGFkZHMgYSBjaGVjayBmb3IgQ0FOX0NBUF9YTC4gU291bmRzIGxpa2UgYSBzdGFuZGFyZCBTS0IgY2xlYW51cC9zYWZldHkgaW1wcm92ZW1lbnQsIG5vdCBhIHNvdXJjZSBvZiB1bmluaXRpYWxpemVkIHJlYWRzLlxuXG5ga3Zhc2VyX3BjaWVmZF9jb3JlLmNgIHJlcGxhY2VzIGB0aW1lcl9kZWxldGVgIHdpdGggYHRpbWVyX3NodXRkb3duX3N5bmNgLiBGaW5lLiBObyBwcm9ibGVtLlxuXG5JbiB0aGUgYHJvY2tjaGlwX2NhbmZkYCBmaWxlcywgd2Ugc2VlIGBzcGluX2xvY2tfaW5pdGAgYW5kIHByb3RlY3RlZCBhY2Nlc3NlcyBmb3IgdGhlIFRYIHBhdGguIFRoaXMgaXMgYWxsIGFib3V0IHRocmVhZCBzYWZldHksIGJ1dCB0aGVyZSdzIG5vIHdheSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbmBoaTMxMXguY2AgYWRkcyBhIGBmb3JjZV9xdWl0YCBmbGFnIGFuZCBtdXRleCBwcm90ZWN0aW9uIGFyb3VuZCBgZnJlZV9pcnFgLiBBZ2FpbiwgdGhpcyBsb29rcyBsaWtlIHJvYnVzdCBlcnJvciBoYW5kbGluZyBhbmQgbG9ja2luZywgbm90IHVuaW5pdGlhbGl6ZWQgZGF0YSBpc3N1ZXMuXG5cblRoZSByZW1vdmFsIG9mIGBfX2FsaWduZWQoNClgIGZyb20gYGY4MTYwNC5jYCdzIGBpbnRfZGF0YWAgc3RydWN0dXJlIGlzIHVubGlrZWx5IHRvIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlIHJlbW92aW5nIGFsaWdubWVudCwgbm90IGludHJvZHVjaW5nIG5ldyB2YXJpYWJsZXMgb3Igc3RydWN0cy5cblxuTm93LCB0aGUgYGt2YXNlcl91c2JfaHlkcmEuY2AgY2hhbmdlcyBhcmUgYSBsaXR0bGUgbW9yZSBpbnRlcmVzdGluZywgZXNwZWNpYWxseSB0aGUgYGt2YXNlcl91c2JfaHlkcmFfcmVhZF9idWxrX2NhbGxiYWNrYCBmdW5jdGlvbi4gSSBoYWQgYSBkZWVwZXIgbG9vaywgc3BlY2lmaWNhbGx5IGF0IHRoZSBjaGFuZ2VzIHRvIGhvdyBpdCBoYW5kbGVzIGNvbW1hbmQgZnJhZ21lbnRhdGlvbi4gSXQgYWRkcyBzaXplIGNoZWNrcywgY29waWVzIGRhdGEgaW50byBgdXNiX3J4X2xlZnRvdmVyYCwgYW5kIHZlcmlmaWVzIHRoYXQgaXQgZG9lc24ndCByZWFkIG91dCBvZiBib3VuZHMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uICpyZWNlaXZlcyogZGF0YSBmcm9tIHRoZSBVU0IgZGV2aWNlLiBUaGF0IGRhdGEgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gaXRzZWxmLCBvciBpcyB0aGUgZGV2aWNlJ3MgcmVzcG9uc2liaWxpdHksIGFuZCBpcyBiZWluZyB3cml0dGVuIGludG8gdGhlIGJ1ZmZlci4gSWYgdGhlIGRldmljZSBkb2Vzbid0IHByb3ZpZGUgZW5vdWdoIGRhdGEsIHdlIG5vdyBnZXQgYC1FQUdBSU5gIGluc3RlYWQgb2YgcG90ZW50aWFsbHkgcmVhZGluZyBnYXJiYWdlLiBUaGlzIGlzIGdvb2Q6IHRoZSBkYXRhIGNvbWVzIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlLCB3aGljaCBtYWtlcyBpdCBzYWZlLlxuXG5UaGUgY2hhbmdlcyBpbiBgc2tiLmhgIGFyZSBqdXN0IG1vcmUgU0tCIG1hbmFnZW1lbnQgdXBkYXRlcyAodXNpbmcgYGRldl9rZnJlZV9za2JfYW55YCBhbmQgYGRldl9jb25zdW1lX3NrYl9hbnlgKSwgc2FmZS5cblxuRmluYWxseSwgdGhlIGBhZl9jYW4uY2AsIGBiY20uY2AsIGBndy5jYCwgYGlzb3RwLmNgLCBhbmQgYHJhdy5jYCB1cGRhdGVzIHVzaW5nIGAhY2FuX2dldF9tbF9wcml2KGRldilgIGRvbid0IHByZXNlbnQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5Tbywgb3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYSBjb2xsZWN0aW9uIG9mIGxvY2tpbmcgZml4ZXMsIGJvdW5kcyBjaGVja3MsIDMyLWJpdCBvdmVyZmxvdyBwcmV2ZW50aW9uLCBhIHRpbWVyIHNodXRkb3duLCBhbmQgaW1wcm92ZWQgVVNCIGNvbW1hbmQgaGFuZGxpbmcuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBzZWVtIHRvIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5ldyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIFVTQiBjaGFuZ2VzIGNhcmVmdWxseSBoYW5kbGUgdGhlIGRhdGEgY29taW5nICpmcm9tKiB0aGUgZGV2aWNlLiBUaGUgQ0FOIGNoYW5nZXMgZGVhbCB3aXRoIHRoZSB2ZXJ5IG1hdHVyZSBTS0IgbWFuYWdlbWVudCBhbmQgY29ycmVjdCBsb2NraW5nL3N5bmNocm9uaXphdGlvbiwgd2hpY2ggaXMgZmluZS5cblxuVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvICpub3QqIHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBsaWtlIG91dC1vZi1ib3VuZHMgcmVhZHMsIHVzZS1hZnRlci1mcmVlLCBvciBkZWFkbG9ja3MgdGhhdCBtaWdodCBjcm9wIHVwLiBUaGlzIGlzIGEgc29saWQgcGF0Y2ggc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA2OCwiT3V0cHV0VG9rZW5zIjoyMDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTI6MzI6MTEuNzY0NjIyNDg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2YgdmFyaW91cyBidWcgZml4ZXMgYWNyb3NzIHRoZSBDQU4gc3Vic3lzdGVtLiBUaGVzZSBpbmNsdWRlIGZpeGluZyAzMi1iaXQgb3ZlcmZsb3dzIGluIGJpdCB0aW1pbmcgY2FsY3VsYXRpb25zLCByZXBsYWNpbmcgYGtmcmVlX3NrYmAgd2l0aCBgZGV2X2tmcmVlX3NrYl9hbnlgIGZvciBzYWZlIGV4ZWN1dGlvbiBpbiBJUlEgY29udGV4dCwgYWRkaW5nIHNwaW5sb2NrcyB0byBwcm90ZWN0IFRYIHJpbmcgYnVmZmVycyBpbiB0aGUgUm9ja2NoaXAgQ0FOIGRyaXZlciwgZml4aW5nIHRpbWVyIHNodXRkb3duIGluIHRoZSBLdmFzZXIgUENJZSBkcml2ZXIsIGFuZCBpbXByb3ZpbmcgVVNCIGJ1bGsgbWVzc2FnZSBwYXJzaW5nIGluIHRoZSBLdmFzZXIgVVNCIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgb2YgZnJhZ21lbnRlZCBjb21tYW5kcy4gTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMgc2VudCB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzLCBvciBpbmZvLWxlYWtzLiBUaGUgbW9kaWZpY2F0aW9ucyBwcmltYXJpbHkgYWRkcmVzcyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSB3ZWxsIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCBVQlNBTi4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBleHBvc2VkIGJ5IHRoZXNlIHBhdGNoZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHZhcmlvdXMgYnVnIGZpeGVzIGFjcm9zcyB0aGUgQ0FOIHN1YnN5c3RlbS4gVGhlc2UgaW5jbHVkZSBmaXhpbmcgMzItYml0IG92ZXJmbG93cyBpbiBiaXQgdGltaW5nIGNhbGN1bGF0aW9ucywgcmVwbGFjaW5nIGBrZnJlZV9za2JgIHdpdGggYGRldl9rZnJlZV9za2JfYW55YCBmb3Igc2FmZSBleGVjdXRpb24gaW4gSVJRIGNvbnRleHQsIGFkZGluZyBzcGlubG9ja3MgdG8gcHJvdGVjdCBUWCByaW5nIGJ1ZmZlcnMgaW4gdGhlIFJvY2tjaGlwIENBTiBkcml2ZXIsIGZpeGluZyB0aW1lciBzaHV0ZG93biBpbiB0aGUgS3Zhc2VyIFBDSWUgZHJpdmVyLCBhbmQgaW1wcm92aW5nIFVTQiBidWxrIG1lc3NhZ2UgcGFyc2luZyBpbiB0aGUgS3Zhc2VyIFVTQiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIG9mIGZyYWdtZW50ZWQgY29tbWFuZHMuIE5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zIHNlbnQgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcywgb3IgaW5mby1sZWFrcy4gVGhlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFkZHJlc3MgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgd2VsbCBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTQU4uIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgZXhwb3NlZCBieSB0aGVzZSBwYXRjaGVzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[1] Phase: Succeeded StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 12:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 12:32:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2] Phase: Succeeded StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 12:32:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 12:32:23 +0000 UTC FinishedAt: 2026-08-26 12:32:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrgpk/series-workflowwrgpk-convert-artifact-2055833099/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 12:32:33 +0000 UTC FinishedAt: 2026-08-26 12:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 12:32:33 +0000 UTC FinishedAt: 2026-08-26 12:48:21 +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:*1555a1a8-01fa-41a3-9369-dd206136db90,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-workflowwrgpk/series-workflowwrgpk-convert-artifact-2055833099/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": "c369c6dd-6731-4fc7-9474-66106ffd22e2", "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-workflowwrgpk/series-workflowwrgpk-build-action-265126153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 12:32:33 +0000 UTC FinishedAt: 2026-08-26 12:48:11 +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:*1555a1a8-01fa-41a3-9369-dd206136db90,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-workflowwrgpk/series-workflowwrgpk-convert-artifact-2055833099/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": "c369c6dd-6731-4fc7-9474-66106ffd22e2", "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-workflowwrgpk/series-workflowwrgpk-build-action-265126153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 12:48:21 +0000 UTC FinishedAt: 2026-08-26 12:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 12:48:21 +0000 UTC FinishedAt: 2026-08-26 12:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 12:48:21 +0000 UTC FinishedAt: 2026-08-26 12:48:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 12:48:21 +0000 UTC FinishedAt: 2026-08-26 12:48:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwrgpk/series-workflowwrgpk-convert-artifact-2674690914/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 12:48:31 +0000 UTC FinishedAt: 2026-08-26 12:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 12:48:31 +0000 UTC FinishedAt: 2026-08-26 12:50:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c369c6dd-6731-4fc7-9474-66106ffd22e2,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-workflowwrgpk/series-workflowwrgpk-build-action-265126153/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-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 12:50:40 +0000 UTC FinishedAt: 2026-08-26 12:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 12:50:40 +0000 UTC FinishedAt: 2026-08-26 12:50:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 12:50:40 +0000 UTC FinishedAt: 2026-08-26 13:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 12:50:40 +0000 UTC FinishedAt: 2026-08-26 13:07:14 +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:*1555a1a8-01fa-41a3-9369-dd206136db90,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-workflowwrgpk/series-workflowwrgpk-convert-artifact-2674690914/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": "acab1a81-f18e-4163-8c30-7fce19576428", "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-workflowwrgpk/series-workflowwrgpk-build-action-4285462454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 12:50:40 +0000 UTC FinishedAt: 2026-08-26 13:07:04 +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:*1555a1a8-01fa-41a3-9369-dd206136db90,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-workflowwrgpk/series-workflowwrgpk-convert-artifact-2674690914/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": "acab1a81-f18e-4163-8c30-7fce19576428", "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-workflowwrgpk/series-workflowwrgpk-build-action-4285462454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 13:07:14 +0000 UTC FinishedAt: 2026-08-26 13:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 13:07:14 +0000 UTC FinishedAt: 2026-08-26 13:07:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 13:07:14 +0000 UTC FinishedAt: 2026-08-26 13:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 13:07:14 +0000 UTC FinishedAt: 2026-08-26 13:09:14 +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:*acab1a81-f18e-4163-8c30-7fce19576428,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-workflowwrgpk/series-workflowwrgpk-build-action-4285462454/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-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"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:*c369c6dd-6731-4fc7-9474-66106ffd22e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acab1a81-f18e-4163-8c30-7fce19576428,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-workflowwrgpk/series-workflowwrgpk-build-action-265126153/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-workflowwrgpk/series-workflowwrgpk-build-action-4285462454/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 13:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 13:09:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"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-workflowwrgpk/series-workflowwrgpk-convert-artifact-1890075799/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 13:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 13:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 13:09:24 +0000 UTC FinishedAt: 2026-08-26 13:09:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 13:09:35 +0000 UTC FinishedAt: 2026-08-26 16:10:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwrgpk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["can_send","can_rcv","canfd_rcv","canxl_rcv","bcm_sendmsg","bcm_connect","cgw_create_job","isotp_bind","raw_bind","kvaser_usb_hydra_read_bulk_callback"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc4b95b8fee95113587e93ca116356032d271371","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_BCM","CAN_GW","CAN_ISOTP","CAN_RAW","CAN_KVASER_USB"],"series_id":"e0216bb3-ea73-4223-b89f-2361d36b8790","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 13:09:35 +0000 UTC FinishedAt: 2026-08-26 16:10:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c369c6dd-6731-4fc7-9474-66106ffd22e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*acab1a81-f18e-4163-8c30-7fce19576428,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-workflowwrgpk/series-workflowwrgpk-build-action-265126153/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-workflowwrgpk/series-workflowwrgpk-build-action-4285462454/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-workflowwrgpk/series-workflowwrgpk-convert-artifact-1890075799/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,}